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 意味着什么?

C# TFS API:类工作区中的签入方法 - 方法返回结果的含义

检查工作区的备注.签入方法:

每次签入都是一个原子操作。所有更改都签入,或者不签入任何更改。如果签入成功,此方法将返回一个正的变更集编号。如果签入的挂起更改集为 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                      
   }

如果我错了,请纠正我。