Seite 1 von 1

python 2.5 win2K - pre-commit-check - subversion

Verfasst: Dienstag 11. März 2008, 11:39
von Regine
Hallo,

ich hatte als "Mania" vor 2 Jahren einen Beitrag geschrieben wg einen ähnlichees Problem.
Habe subversion installiert (wo anders) und die Scripte für die Prüfung der Berechtigungen. Inzwischen mit Python 2.5 und letzte Version von svn.
Bei pre-commit.bat, hatte ich zunächst keine Antworten mehr nachdem
c:\svnprojects\hook\pre-commit-check.py %REPOS% %TXN% || goto Error2
ausgeführt wurde
Also geändert in:
SET DIRNAME=c:\svnprojects\
SET HOOKS_DIR="%DIRNAME%\hooks"
SET PYTHON_DIR=C:\Python25
SET PYTHON="%PYTHON_DIR%\python.exe"
SET REPOS=%1
SET TXN=%2
.../...
%PYTHON% "%HOOKS_DIR%\pre-commit-check.py" "%REPOS%" "%TXN%"
IF ERRORLEVEL 1 SET TRAC_CANCEL=YES
IF DEFINED TRAC_CANCEL GOTO :ERROR2
Jetzt habe ich rückmeldungen und Fehleranzeige.

C:\temp\loc_test1>svn commit -m "test str a"
Hinzufügen trunc\CHART.pkb
Hinzufügen trunc\CHART.pks
Hinzufügen trunc\CLIENTMANAGEMENT.pkb
Hinzufügen trunc\CLIENTMANAGEMENT.pks
Übertrage Daten ....svn: Übertragen fehlgeschlagen (Details folgen):
svn: »pre-commit« Aktion scheiterte mit dem Fehler:
Traceback (most recent call last):
File "c:\svnprojects\\hooks\pre-commit-check.py", line 161, in <module>
sys.exit(core.run_app(main, sys.argv[1], sys.argv[2]))
File "C:\Python25\svn\core.py", line 217, in run_app
return apply(func, (_core.application_pool,) + args, kw)
File "c:\svnprojects\\hooks\pre-commit-check.py", line 129, in main
retval = CheckPermsWithArgs('-r ' + repos_dir+ ' -t ' + txn + ' -f ' + confn
ame, pcc_debug)
File "c:\svnprojects\hooks\svnperms.py", line 326, in CheckPermsWithArgs
opts.author)
File "c:\svnprojects\hooks\svnperms.py", line 233, in check_perms
author = svnlook.author()
File "c:\svnprojects\hooks\svnperms.py", line 224, in author
status, output = self._execsvnlook("author", **kwargs)
File "c:\svnprojects\hooks\svnperms.py", line 189, in _execsvnlook
return self._execcmd(*execcmd_args, **execcmd_kwargs)
File "c:\svnprojects\hooks\svnperms.py", line 159, in _execcmd
process = subprocess.Popen(cmdstr, stdout=PIPE, stderr=PIPE)
File "c:\svnprojects\hooks\subprocess.py", line 586, in __init__
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
File "c:\svnprojects\hooks\subprocess.py", line 686, in _get_handles
p2cread = GetStdHandle(STD_INPUT_HANDLE)
WindowsError: [Error 6] Das Handle ist ungültig

Und im Log habe ich folgendes:

"Repos " C:/svnprojects/test1
"Txn "3-12
test str a
"svnloook.exe ausgeführt... "
"Repos " C:/svnprojects/test1
"Txn "3-12
Mon Mar 10 15:38:35 2008: Begin pre-commit-check.py:

Mon Mar 10 15:38:35 2008: repos.svn_repos_fs:

Mon Mar 10 15:38:35 2008: repos.ChangeCollector:

Mon Mar 10 15:38:35 2008: findroot:

Mon Mar 10 15:38:35 2008: CheckPerms call...: -r C:/svnprojects/test1 -t 3-12 -f c:\svnprojects\svnperms.conf:

Mon Mar 10 15:38:35 2008: 1:-r C:/svnprojects/test1 -t 3-12 -f c:\svnprojects\svnperms.conf:

"Error2"

Also habe ich noch Tests im Dos-Fenster gemacht:

C:\svnprojects\hooks>svnperms.py -r c:\svnprojects\test1 -A mmi -R 1 -f c:\svnpr
ojects\svnperms.conf

C:\svnprojects\hooks>svnperms.py -r c:\svnprojects\test1 -A ada -R 1 -f c:\svnpr
ojects\svnperms.conf
error: you don't have enough permissions for this transaction:
you can't add branches/
you can't add tags/
you can't add test_file1.txt
you can't add trunc/

C:\svnprojects\hooks>svnperms.py -r c:\svnprojects\test1 -t 3-12 -f c:\svnprojec
ts\svnperms.conf

C:\svnprojects\hooks>svnperms.py -r c:/svnprojects/test1 -t 3-12 -f c:\svnprojec
ts\svnperms.conf

C:\svnprojects\hooks>svnperms.py -r C:/svnprojects/test1 -t 3-12 -f c:\svnprojec
ts\svnperms.conf

Und die sehen gut aus.

Hier noch der Code wo der Fehler verursacht wird:
def _execcmd(self, *cmd, **kwargs):
cmdstr = " ".join(cmd)
#STE : commands.getstatusoutput ist only functionning under UNIX for Windows use subprocess.popen
# and that for install subprocess for python 2.3 with installer (installs subprocess.py and links for)
#status, output = commands.getstatusoutput(cmdstr)
process = subprocess.Popen(cmdstr, stdout=PIPE, stderr=PIPE)

(das hatte ich mit Hilfe von Jens auf die Beine gestellt).

Könnte mir jemand einen Hinweis geben was das Problem sein könnte. Bei Bedarf sende ich gerne die fehlende Teile des Puzzles die gebraucht werden um an der Lösung zu kommen.

Vielen Dank im Voraus

Régine.

Lösung gefunden ...

Verfasst: Montag 17. März 2008, 14:55
von Regine
process = subprocess.Popen(cmdstr, stdout = PIPE, stderr=PIPE)

Dann habe ich LogOutputs in subprocess.py eingebaut und angesehen und festgestellt dass stdin = none, stdout = -1 und stderr=-1
In diesem Fall wird folgendes gemacht:
if stdin is None:
p2cread = GetStdHandle(STD_INPUT_HANDLE)
und das geht nicht gut, wieso weiss ich nicht, da müssten Erfahrene Leuten es mir erklären.
Also bin ich auf die Idee gekommen, auch wenn ich es nicht brauche, die stdin auf PIPE zu setzen, etwa so
process = subprocess.Popen(cmdstr, stdin = PIPE, stdout = PIPE, stderr=PIPE)
und schon funktionniert es.
Ich bin so frohh drüber, hätte aber gerne dass mir noch jemand die quizz-Frage oben beantwortet.

Ich hoffe, es hilft auch andere.

Régine.