2010-02-23 5 views
5

Wie verwende ich SharpSVN, um programmatisch einen Ordner der Ignorierliste hinzuzufügen?Wie benutze ich SharpSVN, um programmatisch "hinzufügen, um Liste zu ignorieren" für einen Ordner

EDIT: Versuchte:
Hier ist, was ich

svnClient.GetProperty(new SvnUriTarget("svn://svn.foo.com/" + DatabaseName + "/"), SvnPropertyNames.SvnIgnore, out ignores); 
ignores += " Artifacts"; 
var args = new SvnSetPropertyArgs() { BaseRevision = ???, LogMessage = "update ignore list" }; 
svnClient.SetProperty(new Uri("svn://svn.foo.com/" + DatabaseName + "/"), SvnPropertyNames.SvnIgnore, ignores, args); 

habe versucht, aber ich weiß nicht, wie die BaseRevision bekommen (ich kann es manuell bekommen, und das funktioniert, aber alle Kombinationen von GetProperty ich habe versucht, scheinen nicht, es mir zu geben)

. LÖSUNG: Basierend auf Antwort Berts

SvnGetPropertyArgs getArgs = new SvnGetPropertyArgs(){}; 
string ignores = "Artifacts"; 
string result; 
if(svnClient.GetProperty(new SvnUriTarget("svn://svn.foo.com/" + ProjectName + "/trunk/"), SvnPropertyNames.SvnIgnore,out result)) 
{ 
    ignores = result + " Artifacts"; //TODO: check for existing & tidy formatting. 
} 
svnClient.SetProperty(UncPath.TrimEnd('\\'), SvnPropertyNames.SvnIgnore, ignores); 
SvnCommit(svnClient); 
+0

Sie sollten nur die Eigenschaft in Ihrer lokalen Arbeitskopie abrufen und festlegen und dann die Änderung im Repository festschreiben. (Ersetzen Sie dazu einfach das UriTarget durch einen lokalen Pfad). –

+0

Nicht wirklich verwandt (da lokale Pfade viel einfacher sind): Statt die SvnUriTarget-Klasse direkt zu verwenden, können Sie einfach eine normale System.Uri-Instanz übergeben. Es gibt automatische Konvertierungen für die Zeichenfolge -> SvnPathTarget und Uri -> SvnUriTarget definiert. –

Antwort

4

Die Ignorierliste wird in der Eigenschaft 'svn: ignores' im übergeordneten Verzeichnis gespeichert, das das zu ignorierende Dateiverzeichnis enthält. (Siehe die Subversion book oder svn help propset)

Also, um ein Element hinzuzufügen, müssen Sie den ursprünglichen Eigenschaftswert (wenn einer existiert) und dann das zusätzliche Element mit Leerzeichen getrennt hinzufügen. Die Funktionen auf SvnClient dafür sind GetProperty und SetProperty().

+0

das ist hilfreich, aber mir fehlen noch einige Details, damit es funktioniert (siehe bearbeitete Frage) – Myster

+0

Ich habe keinen lokalen Pfad, ich habe einen UNC-Pfad. Wenn ich "SetProperty" so anrufe: svnClient.SetProperty ("\\\\ dev1 \\ www \ \\ www.automan.foo.com \\", "svn: ignore", "Artifacts"); Ich bekomme die Ausnahme: "'\\ dev1 \\ www' ist keine Arbeitskopie" – Myster

+0

Nicht 100% sicher, aber ich denke, dies zeigt, dass die Datei www.automan.foo.com auch keine Arbeitskopie ist (wahrscheinlich nicht einmal ein Verzeichnis) und Sie können nur svn: ignore-Eigenschaften in Verzeichnissen für Arbeitskopien festlegen. –

Verwandte Themen