Frage

Zu allererst bin ich nicht sicher, dies ist sogar möglich, jedoch muss ich wissen, wie es gemacht werden kann, und wenn nicht, warum nicht?

Ich möchte eine C # .NET-Anwendung erstellen, die ausgeführt wird zu gegebener Zeit während des Festschreibungsprozesses eines Subversion-Repository (pre-commit glaube ich), die dann eine andere Datei begangen werden hinzufügen.

Zum Beispiel, ich Änderungen an Program.cs und Main.cs, aber nicht AssemblyInfo.cs. Ich möchte für diese Angelegenheit eine Änderung AssemblyInfo.cs oder eine beliebige Datei zwingen können.

Ich schrieb eine Konsolenanwendung SharpSvn verwenden, die auf gefeuert post-commit, die dann eine Datei ersetzt, aber dies eine Zunahme in der Revisionsnummer verursacht. Ganz offensichtlich ist das nicht ideal.

Ich fand dann SvnLookClient innerhalb SharpSvn dass läuft auf pre-commit und haben damit begonnen, etwas zu schreiben, aber traf eine Sackgasse, als ich merkte CopyFromPath bedeuten nicht, was ich erwartet habe:

    using (SvnLookClient client = new SvnLookClient())
    {
        SvnLookOrigin o = new SvnLookOrigin(@"\\server\repository");
        SvnChangedArgs changedArgs = new SvnChangedArgs();
        Collection<SvnChangedEventArgs> changeList;
        client.GetChanged(o, changedArgs, out changeList);
    }

Alternativ werde ich tun dies außerhalb von C #, siedeln aber im Idealfall würde Ich mag es in einer C # Konsolenanwendung tun, so dass ich auch mein Repository-Server kann sagen, andere Aufgaben auszuführen wie in Datenbank-Skripte ausgeführt wird, usw.

War es hilfreich?

Lösung

Sie müssen die Transaktion nicht während eines Haken-Skript ändern. Sie können entweder ablehnen die mit einer Nachricht zu begehen ( stderr wird an den Client gesendet werden ), oder tut es in einem separaten begehen in dem post-commit.

[Bearbeiten] Ich möchte klar Warum Transaktionen zu modifizieren ist eine schlechte Idee (SVN-technisch):

Der Kunde weiß nichts über sie.

Mit Ausnahme von „OK“, „nicht bestanden“ und die stderr-Ausgabe gibt es keinen Rückkanal vom Server an den Client während eines begehen.

Wenn der Kunde seine Änderungen verpflichtet, und die Festschreibung berichtet wird, erfolgreich zu sein, markiert er seinen lokalen Datei- und Ordner-Status mit der Repository-Version synchron sein [xyz]. Wenn Sie später etwas ändern, zum Beispiel, fügen Sie die Datei lokal, sie will diese Änderungen zu übernehmen, aber dann ... Nun, können Sie versuchen, zu wissen, was passiert, ich erwarte, dass etwas in „Prüfsummenfehler“ oder „Datei bereits hinzugefügt“ . Je nach Art der Veränderungen würden Sie wahrscheinlich keine bessere Chance, ein Arbeits WC zu erhalten als durch den Ordner und führen Sie eine neue Kasse des beschädigten Teil zu löschen.

Das ist der technische Teil war. Nun ist die Entwickler-Seite: Zuerst automatisch Befestigungs Änderungen richtig scheint klug, aber es wird nicht aufgrund der Tatsache, dass, wenn die Quelle vorab berechenbar wäre, würden wir nicht zulassen, müssen sie von den Entwicklern schreiben. Sie möchten Ihre Entwickler, das Richtige zu tun.

Dies funktioniert am besten über Bildung: sie müssen wissen , was das Richtige ist. Gute Maßnahmen, um ihnen etwas zu wissen ist, zusätzlich zu den guten alten Ausbildung von welcher Art auch immer, ihnen Feedback zu geben.

Eine Fehlermeldung aus dem SVN-Server, eine automatisierte E-Mail nach gebrochen baut oder Komponententests, ergibt sich aus einem statischen Quellcodeanalysetool, etc., können auch als ein gutes pädagogisches Werkzeug dienen.

Ich würde empfehlen, mit weiterhin Integration und Validierung der Quelle-Baum gibt. Dies hat den Vorteil, dass ein Entwickler nicht blockiert wird seine Änderungen nach einem langen Arbeitstag zu begehen, aber immer noch diesen Status des Quellbaumes kennen.

Und ich jetzt raten Sie mal, was Sie erreichen wollen versuchen: Die serverseitige Source-Baum wird immer „funktional“ sein. Dann ist das Problem, dass auch mit automatischen Dateifestsetzungs, pre-commit Komponententests, Stil-Überprüfung und was auch immer, Sie schließlich immer noch zu prüfen, ob das Programm tatsächlich funktioniert, von old-style-System-Tests. Also im Grunde, die Sie nicht wirklich etwas gewinnen.

Technologie kann Prozesse unterstützen, ausgeklügelte Werkzeuge, um es zu unterstützen, so gut, dass folgende Prozesse tatsächlich helfen Entwicklern sparen Zeit und machen ihren Workflow einfacher. Aber die Technik kann in der Regel Prozesse nicht ersetzen, und es kann nicht die menschliche Intelligenz ersetzen (zumindest vorerst). [/ Edit]

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top