Есть ли способ создать git push / commit со связанными рабочими элементами через клиентские библиотеки / API TFS за одну операцию? - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу создать push-файл с использованием TFS git клиентских библиотек , который содержит указанные рабочие элементы.

Код в основном:

public static async Task<GitPush> CreatePush(
    this GitHttpClient git,
    GitRepository repo,
    GitRefUpdate branchUpdateRef,
    GitChange change,
    String comment,  
    IEnumerable<Int32> workitems = null)
{
    workitems = (workitems ?? Enumerable.Empty<Int32>()).ToList();
    var commit = new GitCommitRef
    {
        Comment = comment,
        Changes = new[]
        {
            change
        },
        WorkItems = workitems
            .Select(wi => new ResourceRef
            {
                Id = wi.ToString() 
                // Perhaps one should also set an URL of some kind
            })
            .ToList()
    };
    var push = new GitPush
    {
        Commits = new[]
        {
            commit
        },
        RefUpdates = new[]
        {
            branchUpdateRef
        },
        Repository = repo
    };
    return await git.CreatePushAsync(
        push, 
        project: repo.ProjectReference.Id,
        repositoryId: repo.Id);
}

Push создается успешно, хотя в созданном коммите нет ссылок на рабочие элементы.

Я пытался

  1. Установка URL-адреса из https://docs.microsoft.com/en-us/rest/api/vsts/wit/work%20items/get%20work%20item?view=vsts-rest-4.1#workitem.
  2. Устанавливает в нем немного другой URL-адрес рабочего элемента, который фактически возвращается в GitCommitRef.WorkItems ResourceRef для коммитов, имеющих связанные рабочие элементы.

Но безрезультатно.

Я действительно могу достичь желаемого конечного результата к

  1. Либо добавив $"#{workitemId}" к строке комментария к коммиту
  2. Или добавив ссылку на коммит к рассматриваемому рабочему элементу

Тем не менее, оба эти решения имеют незначительные недостатки (1 - изменение сообщения о коммите, 2 - возможное состояние гонки с CI и т. Д.), Которых я бы предпочел избежать.

В принципе, есть ли способ создать GitPush со связанными рабочими элементами в одной операции, или я должен использовать вышеупомянутые обходные пути?

1 Ответ

0 голосов
/ 12 сентября 2018

Нет, нет способа достичь этого.Даже когда вы создаете коммит / push из веб-интерфейса TFS, TFS все равно сначала создает коммит / push, а затем обновляет рабочий элемент, чтобы связать его с push.

...