Subversion Cleanup Probleme mit Verzeichnissen

Ab und zu hatte ich das Problem, dass Tortoise (eine grafische Oberfläche für Subversion) gewisse Operationen nicht durchführen kann. Dann schlägt es vor, das Cleanup-Kommando auszuführen. Cleanup selbst meldet dann jedoch Fehler. Abhilfe schafft das Anlegen der fehlenden Verzeichnisse in den Verwaltungsstrukturen von Subversion (.svn-Ordner). Bei tiefen Verzeichnisstrukturen hat man jedoch allerhand zu tun.

Zuletzt trat der Fehler bei mir in einer sehr tief verschachtelten Ordnerstruktur auf, so dass ich zu anderen Mitteln greifen musste: einer Batch-Datei, welche die Korrektur rekursiv vornimmt.

@echo off
REM Remove quotes for now, otherwise we have it duplicated in the for loop
set "folder=%~1"
set "file=%~2"
REM Default folder is current directory
if "%folder%"=="" set folder=.
REM If SVN directory is found, go and fix it
if "%file%"==".svn" goto fixsvn
REM Process subfolders
for /f "delims=" %%d IN ('dir /ad /w /b "%folder%"') DO call %0 "%folder%/%%d" "%%~d"
goto ende
:fixsvn
echo "Fixing %folder% ..."
mkdir "%folder%/props" 2> NUL
mkdir "%folder%/prop-base" 2> NUL
mkdir "%folder%/text-base" 2> NUL
mkdir "%folder%/tmp" 2> NUL
mkdir "%folder%/tmp/prop-base" 2> NUL
mkdir "%folder%/tmp/props" 2> NUL
mkdir "%folder%/tmp/text-base" 2> NUL
:ende

Diesen Code einfach in eine Batch-Datei einfügen, die Batch-Datei in den beschädigten Ordner legen und ausführen. Die Batch-Datei ermittelt dann selbstständig alle .svn-Ordner und legt fehlende Unterverzeichnisse an. Warum das nicht im Cleanup-Kommando eingebaut ist weiß ich nicht. Das Problem besteht zumindest schon seit 2006, wie ein Bug-Eintrag zeigt.

Update 2012-01-10: Verbesserte Ausgabe. Die Datei hilft übrigens auch bei einem missglückten „Upgrade Working Copy“ beim Update auf Tortoise 1.7, wenn ein Cleanup gar nicht mehr zur Verfügung steht.

Update 2012-01-12: Fehler behoben: Script funktioniert jetzt auch, wenn die SVN-Struktur Ordner mit & enthält. Etwas mehr Anführungszeichen haben geholfen.

Hat Ihnen dieser Artikel geholfen, Ihre Probleme zu lösen? Falls ja, spenden Sie doch einige Kleinigkeit an mich, damit ich motiviert bin, auch zukünftig Informationen dieser Art bereitzustellen. Vielen Dank!