TFS2010 Custom Build Activity: объединить ветви - PullRequest
2 голосов
/ 17 ноября 2011

Я работаю над настройкой нашей деятельности по сборке. Я хотел бы получить вашу помощь по проблеме.

Ниже приведена наша иерархия управления версиями.

Main
 |- Dev
 |- QA

мы работаем над веткой Dev и, принимая сборку, нам нужно объединить ветку Dev с Main, а затем с QA. Основным является корневая ветвь, как вы, возможно, знаете.

В нашем шаблоне сборки я добавил два пользовательских действия для слияния одно с Dev на Main и другое для слияния с Main в QA. Ниже приведен код для пользовательского действия.

protected override string Execute(CodeActivityContext context)
{
   string lstrStatus = string.Empty;

   string lstrSourceBranchPath = context.GetValue(this.SourceBranchPath);
   string lstrTargetBranchPath = context.GetValue(this.TargetBranchPath);

   // Obtain the runtime value of the input arguments
   Workspace workspace = context.GetValue(this.Workspace);

   GetStatus status = workspace.Merge(lstrSourceBranchPath,
             lstrTargetBranchPath,
             null,
             null,
             LockLevel.None,
             RecursionType.Full,
             MergeOptions.None);

   // resolve the conflicts, if any

   if (status.NumConflicts > 0)
   {
      Conflict[] conflicts = workspace.QueryConflicts(new string[]
                             { lstrTargetBranchPath }, true);

      foreach (Conflict conflict in conflicts)
      {
         conflict.Resolution = Resolution.AcceptTheirs;
         workspace.ResolveConflict(conflict);
      }
   }

   // checkin the changes
   PendingChange[] pendingChanges = workspace.GetPendingChanges();
   if (pendingChanges != null && pendingChanges.Length > 0)
   {
      workspace.CheckIn(pendingChanges, "Merged by MERGE BRANCHES activity");
   }
   return lstrStatus;
}

Проблема в том, что слияние происходит на сервере идеально. Но это не отражается в локальной папке. Я пытался добавить SyncWorkspace activity после каждого Merge custom activity. Все еще не работает.

1 Ответ

0 голосов
/ 17 ноября 2011

Я предположил, что SyncWorkspace должно быть единственным, что нужно сделать.
Вы можете попробовать сделать RevertWorkspace до этого.

EDIT
После того, как вы заявили, что даже это не сработает, я выдам сообщение об ошибке по крайней мере для MS, чтобы получить официальный ответ.
В то же время вы можете попробовать следующий метод, который я абсолютно считаю излишним: как только вы зарегистрировались, повторите все шаги в последовательности Initialize Workspace.

Если даже это не сработает, я бы рассмотрел две разные сборки: одну, которая выполняет слияние, и другую, которая выполняет фактическую сборку. Затем вы можете организовать схему, в которой ваша первая сборка, как только она будет завершена, запускает вторую. Здесь является хорошим ресурсом для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...