C# TFS API:类工作区中的签入方法 - 方法返回结果的含义
本文关键字:方法 TFS 返回 结果 工作区 API | 更新日期: 2023-09-27 17:55:51
我使用 TFS API,现在我需要向用户显示有关 Workspace.CheckIn 方法的结果的消息。
public int? CheckInPendingChanges(PendingChange[] pendingChanges, string comments)
{
using (TfsTeamProjectCollection pc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(ConstTfsServerUri)))
{
if (pc == null) return null;
WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(ConstDefaultFlowsTfsPath);
Workspace workspace = workspaceInfo?.GetWorkspace(pc);
try
{
int? result = workspace?.CheckIn(pendingChanges, comments);
return result;
}
catch (CheckinException exception)
{
UIHelper.Instance.RunOnUiThread(() => MessageBox.Show(exception.Message, "Check in exception has happened", MessageBoxButton.OK, MessageBoxImage.Error));
return null;
}
catch (VersionControlException exception)
{
UIHelper.Instance.RunOnUiThread(() => MessageBox.Show(exception.Message, "Version Control Exception has happened", MessageBoxButton.OK, MessageBoxImage.Error));
return null;
}
}
}
但是,我还没有找到有关此的全面信息。我刚刚发现,如果成功,它应该返回变更集的 ID。此外,我发现了这篇文章:https://blogs.msdn.microsoft.com/buckh/2006/09/18/vc-api-checkin-may-return-0/它解释了如果文件未更改并且 TFS 撤消了它,则 CheckIn 将返回"0"。但是,如果它返回 -1 和 null 意味着什么?
检查工作区的备注.签入方法:
每次签入都是一个原子操作。所有更改都签入,或者不签入任何更改。如果签入成功,此方法将返回一个正的变更集编号。如果签入的挂起更改集为 null,则服务器将尝试签入工作区中的所有更改。但是,如果编辑或添加工作空间中的任何挂起更改,则此操作无效,因为内容尚未上载到服务器。
根据从不同来源收集的信息,我向用户显示不同的消息:
public int? CheckInPendingChanges(PendingChange[] pendingChanges, string comments)
{
using (TfsTeamProjectCollection pc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(ConstTfsServerUri)))
{
if (pc == null) return null;
WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(ConstDefaultFlowsTfsPath);
Workspace workspace = workspaceInfo?.GetWorkspace(pc);
try
{
int? result = workspace?.CheckIn(pendingChanges, comments);
return result;
}
catch (CheckinException exception)
{
UIHelper.Instance.RunOnUiThread(() => MessageBox.Show(exception.Message, "Check in exception has happened", MessageBoxButton.OK, MessageBoxImage.Error));
return null;
}
catch (VersionControlException exception)
{
UIHelper.Instance.RunOnUiThread(() => MessageBox.Show(exception.Message, "Version Control Exception has happened", MessageBoxButton.OK, MessageBoxImage.Error));
return null;
}
}
}
1) 如果结果为空或负数 - 我认为这是例外:
if (result < 0||result == null)
{
MessageBox.Show("Check in has failed due to internal Error", "Error", MessageBoxButton.OK,
MessageBoxImage.Error);
return;
}
2)如果结果为0,我认为它已被执行撤消:
if (0 == result)
{
MessageBox.Show("The version control server automatically undoed the pending changes due to attempt to check in files that haven’t changed.", "No changes have been detected in your check in", MessageBoxButton.OK,
MessageBoxImage.Information);
ChangeSourceControlOperation(SourceControlOperations.Undo, currentVm);
}
3). 如果结果是肯定的,我认为这是 TFS 的成功结果:
if (result > 0)
{
//TODO: show changeset id or what ever
}
如果我错了,请纠正我。