Laden...

Team Foundation Server API: Nicht mehr vorhandene Dateien erkennen und diese auf Server löschen

Erstellt von Peter Bucher vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.516 Views
Peter Bucher Themenstarter:in
5.941 Beiträge seit 2005
vor 9 Jahren
Team Foundation Server API: Nicht mehr vorhandene Dateien erkennen und diese auf Server löschen

Hallo zusammen

Ich arbeite an einer Automatisierung per TFS-API. Dabei geht es um einen Ordner der Unterordner und Dateien enthält.

Diese Inhalte werden einmal initial eingecheckt. Anschliessend wird der Inhalt es lokalen Ordners gelöscht und die Inhalte neu hineingeschrieben. Dabei kommt es vor, das Dateien die vorher enthalten waren, jetzt nicht mehr vorhanden sind.
Diese lokal gelöschten Dateien sollten jetzt irgendwie erkannt werden und auf dem Server dann gelöscht werden.
In SVN oder anderen Systemen gibt es sogenannte "missing files", mit denen dann etwas angefangen werden kann. Im TFS scheint so etwas nicht zu existieren.

Meine Frage dabei ist, ob es eine Möglichkeit ist, lokal gelöschte Dateien (und Ordner) per TFS-API zu erkennen und dem Server dann mitzuteilen, das diese gelöscht werden sollen.

Hintergrund ist folgendes:
Ich generiere aus dem SQL Server Create-Scripte für alle Objekte in einen Ordner und möchte so automatisch eine Art History im TFS ablegen.
Wenn jetzt ein Objekt im SQL Server entfernt wird, wird das Script dann auch nicht mehr generiert.

Da ich nicht explizit etwas lösche, kann ich auch nicht einfach per API ein Delete absetzen. Ich müsste das Vorher-Nachher vergleichen, um dies anzustellen.

Vielleicht gibt es ja auch eine andere Möglichkeit mein Ziel zu erreichen.
Hat jemand dazu eine Idee?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

Peter Bucher Themenstarter:in
5.941 Beiträge seit 2005
vor 9 Jahren

Hallo zusammen

Die Lösung war vom "Server Workspace" auf "Local Workspace" umzuschalten. So verhält sich der TFS näher an GIT / Mercurial und erkennt lokale Änderungen, ohne explizites Löschen per Source Control Explorer oder VS.

Die Änderungen müssen dann zuerst noch promoted werden, damit man sie einchecken kann.

Der Code um zu promoten:


PendingChange[] candidates;
workspace.GetPendingChangesWithCandidates(
    new ItemSpec[] { new ItemSpec(@"C:\Local\Path", RecursionType.Full) },
    false,
    out candidates);

foreach (PendingChange pc in candidates)
{
    if ((pc.ChangeType & ChangeType.Delete) == ChangeType.Delete)
    {
        workspace.PendDelete(pc.LocalItem);
    }
    else if ((pc.ChangeType & ChangeType.Add) == ChangeType.Add)
    {
        workspace.PendAdd(pc.LocalItem);
    }
    else
    {
        workspace.PendEdit(pc.LocalItem);
    }
}

PendingChange[] changes = workspace.GetPendingChanges();

/* Now you can review and CheckIn your changes. */

Folgend das Posting mit der Antwort auf Stackoverflow:

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011