ソース管理に追加する 2 つの新しいプロジェクトのループで次の関数が呼び出されています。ループの反復ごとに、ソース コードが取得され、それがフォルダーにコピーされ、tfs チーム プロジェクトが作成され、そのプロジェクトのワークスペースが作成され、コードがソース管理に追加されます。
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);
}
}
2 つのプロジェクトがあります。最初のプロジェクトは正しく動作しますが、2 番目のプロジェクトは動作しません。2 番目のプロジェクトは、プロジェクトとワークスペースを作成しますが、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)
どのプロジェクトが 2 番目であるかに関係なく、2 番目のプロジェクトには常に 0 を返します。最初のプロジェクトは常に適切に完了します。どのプロジェクトが 2 番目であるかは問題ではありません。2 番目のプロジェクトは、常に 0 アイテムを返します。もちろん、すべてのプロジェクトをソース管理に正しく追加する必要があります。ここで何が起こっているのですか?