Warum kann ich kein clientseitiges Hook-Skript ausführen, wenn ich einen Switched-Pfad begebe?

1107
aschipfl

Ich habe ein SVN-Repository (Version 1.9.2) und verwende einen TortoiseSVN-Client (Version 1.9.2) auf einem Windows 7-Computer (x64). Es gibt clientseitige Hook-Skripts (Start-Commit, Pre-Commit und Post-Commit), die im Repository gespeichert sind und natürlich in der lokalen Arbeitskopie verfügbar sind. Sie Skripte werden unter Verwendung der speziellen Eigenschaften installiert tsvn:startcommithook, tsvn:precommithookund tsvn:postcommithookjeder Hinweis auf die jeweilige Skriptdatei mit der %REPOROOT%Variable, um zu vermeiden, den absoluten Arbeitskopie Pfad angeben.

Wenn ich Änderungen am Repository festschreibe, .batfunktionieren alle Hook-Skripts (Batch-Dateien ) einwandfrei.

Wenn ich jedoch versuche, Änderungen an Dateien in einem umgeschalteten Pfad festzuschreiben, wird der folgende Fehler angezeigt: Nachdem die Meldung bestätigt wurde, kann die Festschreibung nicht ausgeführt werden. Der Festschreibungsdialog erscheint nicht.

Ich glaube, dieser Fehler wird nicht durch die Hook-Skripte ausgelöst (weil sich beim Schreiben exit 0oder exit 1als einziger Befehl nichts ändert ), sondern durch TortoiseSVN beim Versuch, sie auszuführen, was aus irgendeinem Grund nicht möglich ist das entsprechende Skript nicht mehr finden.

Wie kann ich also Hook-Skripts verwenden, die sich im Repository und somit in der Arbeitskopie befinden?


Das Ersetzen der Variablen %REPOROOT%durch vollständige absolute Pfade ändert das Verhalten überhaupt nicht.

Wenn ich die Variable %REPOROOT%durch %REPOROOT+%in den tsvn:*commithookEigenschaften durch ersetze, ändert sich nichts für umgeschaltete Pfade (daher erscheint die zuvor erwähnte Fehlermeldung), aber bei Standardpfaden wird kein Hook-Skript ausgeführt und es wird schließlich keine Fehlermeldung angezeigt.


Nur als Randbemerkung: Um zu überprüfen, ob versucht wird, ein Hook-Skript zu starten, wird das Dialogfeld "Zustimmung / Ablehnen" von TortoiseSVN angezeigt:
Client-seitiges Hook-Skript genehmigen oder ablehnen

3
Haben Sie dieses Problem jemals gelöst? Habe jetzt genau das gleiche Problem. Carson vor 5 Jahren 0
Noch nicht, @Carson. Es scheint mir ein Bug von TortoiseSVN zu sein. Vielleicht weiß es jemand anders. Danke für die Belohnung, übrigens! aschipfl vor 5 Jahren 0
@PimpJuiceIT, ein Switched-Pfad ist ein Pfad im Arbeitsverzeichnis, der mit einem anderen Repository-Verzeichnis (durch [Tortoise] SVNs Switch-Funktion) als der Repository-Baum verknüpft wird. Es gibt zB einen Repository-Baum `Projekt / Zweige / Sub / a`,` Projekt / Zweige / Sub / b`, `Projekt / Zweige / Sub / c`,` Projekt / Stamm / Sub 'und den Letzteren ausgecheckt Arbeitskopie `C: \ SVN \ project \ sub`; Sie können jetzt `C: \ SVN \ project \ sub` auf` project / branches / a / sub` umstellen. Wenn Sie nach Änderungen suchen suchen, wird unten rechts die Anzahl der umgeschalteten Elemente angezeigt. diese Wege, über die ich spreche ... aschipfl vor 5 Jahren 0
@PimpJuiceIT, das Problem kann nicht durch das Hook-Batch-Skript verursacht werden, da es auch dann angezeigt wird, wenn ich nur einen einzelnen Befehl "exit 0" darin platziere. "% REPOROOT%" sollte gemäß der Hilfe von TortoiseSVN in die URL des Stamms des Repositorys (nicht in die Arbeitskopie) aufgelöst werden. Die Hook-Skripte befinden sich in `^ / hooks /`, daher lautet der Pfad `% REPOROOT% / hooks / script.bat` ... aschipfl vor 5 Jahren 0
Ich frage mich, ob es möglich ist, "% REPOROOT%" irgendwie in eine Protokolldatei zu "einchecken" oder etwas zu bestätigen, was genau den Pfad auflöst, und Sie könnten dann überprüfen, ob der Pfad richtig ist. Ich werde das TortoiseSVN-Dokument später mit mehr Details durchlesen, wenn ich mehr Zeit habe. Es scheint ein Problem zu sein, dass keine Datei gefunden wird, auf die es verweist, so dass alles, was Sie sich vorstellen oder versuchen, solche Variablen zu validieren, usw. wäre guter Ausgangspunkt, würde ich zumindest denken. Pimp Juice IT vor 5 Jahren 1
Ja, ich stimme zu, @PimpJuiceIT, "% REPOROOT%" muss geprüft werden. Ich habe keine Ahnung, wie das geht, weil das Skript nicht läuft, also ist 'echo' dort unbrauchbar ... (Wenn ich das übergeordnete Verzeichnis eines umgeschalteten Pfads festschreibe, funktioniert alles erwartet ...) aschipfl vor 5 Jahren 0

1 Antwort auf die Frage

1
aschipfl

Okay, obwohl die Frage (noch) nicht vollständig beantwortet wurde, starte ich hier jetzt eine Antwort und werde sie mit neuen Erkenntnissen füllen ...


Umgehen

Um das Problem zu umgehen, übergeben Sie einfach das übergeordnete Verzeichnis des Switch-Pfads und nicht den Switched-Pfad selbst oder ein untergeordnetes Element davon.

Nur um es erwähnt zu haben: Es ändert sich nicht das Verhalten, wenn die Hook-Skript-Eigenschaft rekursiv angewendet wird.


Syntax für Hook Script Path (Eigenschaften tsvn:*hook)

Wenn Sie den Pfad zu einem Hook-Skript angeben, ist es sehr wichtig, dass Sie, sobald Sie einen der Platzhalter verwenden, %REPOROOT%oder %REPOROOT+%den Schrägstrich /als Pfadtrennzeichen verwenden. Ich glaube, das hängt mit der Tatsache zusammen, dass diese Variablen intern die URL zum Repository-Stamm enthalten, gemäß der Dokumentation, nicht jedoch einen lokalen Arbeitskopienpfad (WC). Bei festen lokalen Pfaden werden sowohl Schrägstriche /als auch umgekehrte Schrägstriche \akzeptiert.
Falls der Pfad enthält SPACEs, müssen Sie ihn in Anführungszeichen setzen. Sie können Zitate im Allgemeinen verwenden, da es sowieso nicht schadet.


Normaler oder vermittelter Pfad, Verzeichnisebenen

Nehmen wir an, wir haben ein Repository, D:\TEST\repoenthält /trunk, /branches, /tagsund /hooksauf der obersten Ebene, ein Skript script.batin /hooksmit dem Inhalt exit 0, eine Datei mit dem Namen file.txtin /trunk, einem Zweig /trunkan /branches/testund einen anderen Zweig der /trunkan /branch; Das WC ist zwar ausgecheckt D:\TEST\wc, aber wir haben eine spärliche Kasse, so dass nur /trunkund da /hookssind (beide voll rekursiv).

Richten Sie dann eine neue Eigenschaft tsvn:startcommithookim WC-Stammverzeichnis ein:
Hook Script Property Setup Dialog

Versuchen Sie jetzt, irgendetwas an einem beliebigen WC-Speicherplatz (root /trunk, usw.) festzulegen. Das Dialogfeld zum Bestätigen / Ablehnen des Hook-Skripts wird angezeigt. Es enthält den folgenden Pfad für das Hook-Skript. Dies ist der richtige Pfad. Das Skript wird also ausgeführt, wenn Sie auf "Ausführen" klicken:
Hook Script Execution Approval/Rejection Dialog

Wechseln Sie jetzt den lokalen WC-Pfad D:\TEST\wc\trunkzu /branches/testund versuchen Sie, die lokale WC-Datei festzuschreiben file.txt. Im Dialogfeld "Genehmigen / Ablehnen" wird diesmal der folgende falsche Pfad angezeigt:
Hook Script Execution Approval/Rejection Dialog

Wenn Sie auf "Ausführen" klicken, kann das Skript offensichtlich nicht ausgeführt werden:
Hook Script Execution Failure

Aber wenn der lokalen WC Weg Umschalten D:\TEST\wc\trunkauf /branchjetzt und versuchen, die lokale WC - Datei zu begehen file.txt, genehmigen das / ablehnt Dialog zeigt den richtigen Weg wieder wie oben, und das Skript ist in der Lage zu laufen.

Offensichtlich scheinen unterschiedliche Tiefen in der Verzeichnishierarchieebene von normalen und umgeschalteten Pfaden die richtige Erweiterung des Platzhalters zu beeinträchtigen %REPOROOT%.
Dieses Verhalten ist genau das gleiche, wenn das Hook-Skript festgeschrieben wurde oder nicht.