Angesichts eines bestimmten Pfads des Ordners in TFS, muss ich rekursiv alle Dateien und Ordner innerhalb des Ordners für eine bestimmte Änderungsmenge finden. Mit anderen Worten, ich muss die transitive Schließung eines Pfades in tfs für eine gegebene Änderungsmenge erhalten. Das Problem dabei ist, den Inhalt eines bestimmten Ordners in tfs aufzulisten. Wie wäre das in C# möglich?Auflistung aller Inhalte eines Ordners in tfs
Antwort
ich nehme an, Sie ‚Ordner-Inhalte ab changeset X‘ und nicht ‚Ordner-Inhalte, die Teil changeset X waren‘ wollen
GetIte ms ist die richtige Entscheidung zu verwenden, geben Sie einfach in einer Version Spezifikation für das Changeset Sie interessiert sind
http://msdn.microsoft.com/en-US/library/bb138911.aspx
so, vorausgesetzt, Sie bereits einen Verweis auf die VersionControlServer Instanz haben.
var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full);
Wenn ich missverstanden und Sie zufällig "Ordner Inhalte, die Teil von Changeset X waren" wollen, gibt es ein paar verschiedene Möglichkeiten, es zu tun, aber das Ändern der Satz mit GetChangeset und nur Filtern der Changes ist ziemlich einfach.
Sie können den Änderungsdienst-Webservice verwenden, um ein XML-Dokument abzurufen, das alle geänderten Elemente für einen bestimmten Änderungssatz enthält. Blättern Sie dann einfach durch die Liste der geänderten Elemente und prüfen Sie, ob sie sich in dem Pfad befinden, nach dem Sie suchen.
Hier ist die URL zum changeset webservice:
http: // your_tfs_server
/VersionControl/Changeset.aspx?artifactMoniker= your_changeset_number
& webView = true
kann ich nur eine VersionControlServer.getItems() und Schleife durch das abgeleitete Array. Ich probiere es gerade aus ... – Sidd
Downvoted (sorry David). Sie sollten den Webservice unter keinen (normalen) Umständen dazu verwenden. Diese sind intern und können ohne vorherige Ankündigung geändert werden. – Robaticus
Etwas Ähnliches könnte mehr sein, was Sie suchen zum. Dadurch werden alle Änderungen in einem Changeset abgerufen und durchlaufen sie, wobei die im angegebenen Pfad angegebenen identifiziert werden. Dies könnte mit einer Linq-Abfrage verkürzt werden, aber ich verlasse es ein bisschen mehr erweitert den Kern von dem, was ich versuche zu sagen:
TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");
VersionControlServer vcs = tfs.GetService<VersionControlServer>();
Changeset cs = vcs.GetChangeset(6284868);
foreach (Change change in cs.Changes)
{
if (change.Item.ServerItem.StartsWith("$/Application Common/Dev/src"))
{
System.Diagnostics.Debug.WriteLine(string.Format("Changeset {0}, file {1}, changes {2}",
cs.ChangesetId, change.Item.ServerItem, change.ChangeType.ToString()));
}
}
Ich denke, so etwas wie dies funktionieren würde ..
TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");
VersionControlServer vcs = tfs.GetService();
ItemSet items;
items = vcs.GetItems(tfsPath, RecursionType.Full);
Wenn Sie weitere Ideen haben, können Sie sie veröffentlichen ..
Sie Code fehlt der Teil, in dem Sie definieren, dass tfsPath an GetItems übergeben wird –
Ich war mir der Versionsspezifikation nicht bewusst. Das ist was ich wollte. Vielen Dank... – Sidd