Aufrufe von `Workspace.PendAdd`, die keine Elemente hinzufügen

Ich habe die folgende Funktion, die in einer Schleife für zwei neue Projekte aufgerufen wird, um die Quellcodeverwaltung hinzuzufügen. Bei jeder Iteration der Schleife wird der Quellcode abgerufen, in den Ordner kopiert, ein tfs-Teamprojekt erstellt, ein Arbeitsbereich für dieses Projekt erstellt und anschließend versucht, den Code der Quellcodeverwaltung hinzuzufügen.

static void Main(string[] args) {
    var tfsWorkItems = _<IWorkItems>();
    var workItems = tfsWorkItems.GetProjectsToMigrate();
    var tfs = _<ITfs>();
    var logFilePath = new DirectoryInfo("C:\\log");
    var workingDirectory = new DirectoryInfo("C:\\m");
    Cleanup(workItems, tfs, logFilePath, workingDirectory);
    var svn = _<ISvn>();
    var app = _<IApplication>();
    foreach (var workItem in workItems)
    {
        var root = Path.Combine(workingDirectory.FullName, workItem.Id.ToString());
        var svnBase = Path.Combine(root, "s");
        var localWorkspacePath = Path.Combine(root, "t");
        var tfsBase = Path.Combine(localWorkspacePath, workItem.TfsProjectName, "Main");
        var tfsProject = workItem.ProjectType.ToLower() == "php" ? Path.Combine(tfsBase, "src")
                                                                    : tfsBase;
        svn.CheckoutFromSvn(workItem.SvnLocation, svnBase);
        app.CopyToTfsFolderStructure(svnBase, tfsProject);
        tfs.CreateTeamProject(workItem.TfsProjectName, logFilePath);
        tfs.CreateWorkspace(workItem.WorkspaceName, localWorkspacePath);
        tfs.AddToSourceControl(workItem.WorkspaceName, localWorkspacePath, workItem.TfsProjectName);
    }
}

Es gibt zwei Projekte. Das erste Projekt funktioniert ordnungsgemäß, das zweite jedoch nicht. Das zweite Projekt erstellt das Projekt und den Arbeitsbereich, jedoch in AddToSourceControl

public void AddToSourceControl(string workspaceName, string localPath, string projectName) {
    var tfs = new TfsTeamProjectCollection(_collection);
    var vcs = tfs.GetService<VersionControlServer>();
    var user = vcs.AuthorizedUser;
    var workspace = vcs.GetWorkspace(workspaceName, user);
    var serverPath = workspace.GetServerItemForLocalItem(Path.Combine(localPath, projectName, "Main"));
    var itemSpec = new ItemSpec[] {
        new ItemSpec(serverPath, RecursionType.Full)
    };
    workspace.PendAdd(serverPath, true);

    // doesn't return anything
    var pendingSets = vcs.QueryPendingSets(
        itemSpec, workspace.Name, user, true);
    var pendingChanges = pendingSets.Aggregate(new List<PendingChange>(), (acc, item) => {
        acc.AddRange(item.PendingChanges);
        return acc;
    });
    var parameters = new WorkspaceCheckInParameters(pendingChanges, "svn to tfs migration") {
        OverrideGatedCheckIn = ((CheckInOptions2)vcs.SupportedFeatures & CheckInOptions2.OverrideGatedCheckIn) == CheckInOptions2.OverrideGatedCheckIn,
        PolicyOverride = new PolicyOverrideInfo("migration triggered check-in", null),
        SuppressEvent = true,
    };
    workspace.CheckIn(parameters);
}

workspace.PendAdd(serverPath, true) Gibt für das zweite Projekt immer Null zurück, unabhängig davon, welches Projekt das zweite ist. Das erste Projekt wird immer ordnungsgemäß abgeschlossen. Es ist egal, welches Projekt an zweiter Stelle steht. Das zweite Projekt gibt immer null Elemente zurück. Ich möchte natürlich, dass alle Projekte korrekt zur Quellcodeverwaltung hinzugefügt werden. Was geht hier vor sich?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage