Frage

Zusammenfassung
Ich habe derzeit einen NAnt Build-Skript, dass führt ein vssget entweder auf den neuesten Quellcode oder ein bestimmte Zweig (einen ${branch} Parameter verwendet wird).

Jedes Mal, wenn wir eine Produktion Build / Bereitstellung der Code-Baum, der gebaut wurde, ein Zweig geschaffen hat, (so, dass wir die Entwicklung weiter und wissen noch, was Code-Basis auf die Produktion ist, ziemlicher Standard ...)

Problem
Der Prozess der Schaffung dieses Zweig ist immer noch ein manueller ein, durchgeführt von jemandem Visual Source Safe Explorer und Durchführen der Verzweigungsprozedur geht in. Ich frage mich, ob es eine Möglichkeit, in NAnt ist ein VSS-Zweig zu schaffen.

aktuelle Plan
Ich weiß schon über <exec program="ss"> mit und ich versuche, das zu vermeiden, aber in Ermangelung einer besseren Lösungen, die die wahrscheinlichste Route ich nehmen.

Wer weiß, ob es ein NAnt oder NAntContrib Ziel für diesen, oder wenn jemand eine Skript Aufgabe hat, dass sie verwendet haben dies in der Vergangenheit zu tun und den Code dafür sorgen könnten, dass sehr geschätzt werden würde.

Hinweis
Ich weiß, über cvs, SVN, Git und allen anderen Source Control-Lösungen, und das Werkzeug zu wechseln, ist keine Option zur Zeit

War es hilfreich?

Lösung

Wir brauchen eigentlich das, wo ich arbeite. Ich peitschte zusammen eine kleine Aufgabe namens ‚vssbranch‘ (nicht besonders kreativ, aber hier ist der Code ... eine Beispiel-Build-Datei und die Ausgabe der Ausführung:

CODE:

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

using SourceSafeTypeLib;

using NAnt.Core;
using NAnt.Core.Attributes;

namespace NAnt.Contrib.Tasks.SourceSafe
{
    [TaskName("vssbranch")]
    public sealed class BranchTask : BaseTask
    {
        /// <summary>
        /// The label comment.
        /// </summary>
        [TaskAttribute("comment")]
        public String Comment { get; set; }

        /// <summary>
        /// Determines whether to perform the branch recursively.
        /// The default is <see langword="true"/>
        /// </summary>
        [TaskAttribute("recursive"),
        BooleanValidator()]
        public Boolean Recursive { get; set; }

        [TaskAttribute("branchname", Required = true)]
        public String BranchName { get; set; }


        protected override void ExecuteTask()
        {
            this.Open();
            try
            {
                if (VSSItemType.VSSITEM_PROJECT != (VSSItemType)this.Item.Type)
                    throw new BuildException("Only vss projects can be branched", this.Location);

                IVSSItem newShare = null;
                this.Comment = String.IsNullOrEmpty(this.Comment) ? String.Empty : this.Comment;
                if (null != this.Item.Parent)
                    newShare = this.Item.Parent.NewSubproject(this.BranchName, this.Comment);

                if (null != newShare)
                {
                    newShare.Share(this.Item as VSSItem, this.Comment,
                        (this.Recursive) ?
                            (int)VSSFlags.VSSFLAG_RECURSYES : 0);
                    foreach (IVSSItem item in newShare.get_Items(false))
                        this.BranchItem(item, this.Recursive);
                }
            }
            catch (Exception ex)
            {
                throw new BuildException(String.Format("Failed to branch '{0}' to '{1}'", this.Item.Name, this.BranchName), this.Location, ex);
            }
        }

        private void BranchItem(IVSSItem itemToBranch, Boolean recursive)
        {
            if (null == itemToBranch) return;

            if (this.Verbose)
                this.Log(Level.Info, String.Format("Branching {0} path: {1}", itemToBranch.Name, itemToBranch.Spec));

            if (VSSItemType.VSSITEM_FILE == (VSSItemType)itemToBranch.Type)
                itemToBranch.Branch(this.Comment, 0);
            else if (recursive)
            {
                foreach (IVSSItem item in itemToBranch.get_Items(false))
                    this.BranchItem(item, recursive);
            }
        }
    }
}

BUILD DATEI:

                                                             

        <echo message="About to execute: VSS Branch" />

        <echo message="Source Safe Path: ${SourceSafeRootPath}/${CURRENT_FILE}" />

        <vssbranch
              username="my_user_name"
              password="my_password"
              recursive="true"
              comment="attempt to make a branch"
              branchname="test-branch"
              dbpath="${SourceSafeDBPath}"
              path="${SourceSafeRootPath}/${CURRENT_FILE}"
              verbose="true"
            />

    </foreach>
</target>

OUTPUT:

NAnt 0.85 (Build 0.85.2478.0; Freilassung; 10/14/2006) Copyright (C) 2001-2006 Gerry Shaw http://nant.sourceforge.net

Buildfile: file: /// C: /scm/custom/src/VssBranch/bin/Debug/test.build Zielframework: Microsoft .NET Framework 2.0 Target (s) angegeben: run

Ausführen:

[loadtasks] Scanning assembly "NAnt.Contrib.Tasks" für Erweiterungen. [Loadtasks] Scanning assembly "VssBranch" für Erweiterungen.      [Echo] Über auszuführen: VSS Zweig

....

[vssbranch] Branching SecurityProto Pfad: $ / VSS / Endur der Quelle / C # / DailyLive / proto / test-branch / SecurityProto

....

BUILD SUCCEEDED

Gesamtzeit:. 12,9 Sekunden

Natürlich wäre die Ausgabe variiert, war ich in dem Artikel zum Zweig aus einer Textdatei mit dem Namen ‚params.txt‘ ziehen. Diese Aufgabe führt, was in der VSS-Welt als ‚Share and Branch‘ (Branching unmittelbar nach Freigabe) ... andere Quelle Steuerungssysteme müssen nicht vor dem Verzweigen zu Aktien bekannt ist, eh ... das ist für einen anderen Tag

Andere Tipps

Die vss Aufgaben leben im NAntContrib Projekt und nein, derzeit gibt es keine Aufgabe, die Stützen Verzweigung. Obwohl nach dem Vorbild der bestehenden vss Aufgaben (Add, Kasse, checkin, usw.) in NAntContrib, könnten Sie die Quelle greifen und diese selbst erweitern. Das heißt, , wenn die VSS-API unterstützt Verzweigung.

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