для чего нужен GitStatus и как его использовать - PullRequest
0 голосов
/ 07 ноября 2019

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

Во время моего исследования я обнаружил GitRef.Statuses и класс «GitStatus», который «содержит метаданные службы / расширения, публикующего статус» (официальное описание Microsoft). GitStatus выглядит очень интересно, потому что я могу определить свои собственные статусы и установить для него состояние. Проблема в том, что я ничего не нашел об этом - кроме MS-Pages, которые не очень далеко идущие. я не знаю, правильна ли моя процедура или нет. Так как я могу использовать это? Мое намерение таково:

public Branch AddStatusToBranch(Branch branch)
{
  if (!(branch.GitBranch.Statuses is List<GitStatus> bGitStatuses))
    bGitStatuses = new List<GitStatus>();

  _status = null;
  if ((_status = bGitStatuses.Find(s => s.Context.Genre == _genre)) != null)
  {
    return branch;
  }
  else
  {
    _status = new GitStatus()
    {
      Context = new GitStatusContext() { Genre = _genre, Name = branch.DisplayName }
    };
    bGitStatuses.Add(_status);
    branch.GitBranch.Statuses = bGitStatuses;
    return branch;
  }
}

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

Так как правильно использовать GitStatus?

С уважением, Мирко

1 Ответ

2 голосов
/ 08 ноября 2019

Спасибо за подробное выражение в комментарии.

Фактически, вы можете обратиться к соответствующему документу Rest api , чтобы узнать больше о GitStatus Class . Это GitStatus доступно только под commit.

Да, мы можем дать тело для GitStatus как

_status = new GitStatus()
    {
      Context = new GitStatusContext() { Genre = _genre, Name = branch.DisplayName }
    };

Но, как я знаю, здесь вам также нужно указать одноНеобходимое свойство в теле: State. Обычно мы определяем его как:

GitStatusState state

Итак, здесь базовая структура должна выглядеть так (я только что написал простой пример):

public static GitStatus GetTestGitStatus(GitStatusState state){
            GitStatus myStatus = new GitStatus();
            myStatus.Context = GetTestStatusContext(name, genre);//Context
            myStatus.State = state;//State
}

Чтобы указать значение для State,Вы также можете напрямую использовать

State = GitStatusState.Succeeded, // GitStatusState.{xxxx}


Поскольку вы упомянули в комментарии: , может ли оно использоваться в личных целях и быть переопределено другими .

Конечно, да, его можно использовать по индивидуальному заказу. Вы можете определить любую вещь с этим синтаксисом. Примечание: Существует одно ограничение: для значения State вы должны использовать то, которое перечислено здесь .

Для Status просто считайте его массивом. Это означает, что он не будет переопределен после того, как вы указали в нем одно настроенное содержимое статуса. Если здесь есть одно новое обновление статуса, оно будет по очереди сохранено в этот «массив», и новое место хранения статуса всегда будет array[0].

Итак, если вы хотите использовать его как , сообщая другому инструменту, что автоматическое объединение активно или нет для определенной ветви , вам нужно беспокоиться о том, что новый статус, созданный другими системными действиямибудет охватывать местоположение того, который вы создали ранее. Я предлагаю вам лучше сохранить status id после его создания в качестве идентификатора других инструментов, чтобы узнать соответствующий статус.

Обновление: Здесь другие действия не ограничиваются толькоВаше настраиваемое действие, оно также включает некоторые системные действия, включая сборки, тесты, коммиты и т. д.

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