Получить WorkItems из Merge Changeset - PullRequest
0 голосов
/ 21 июня 2019

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

Uri tfsUri = new Uri("http://leecrp-tfs1:8080/tfs");
TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri);
VersionControlServer vcs = tfs.GetService<VersionControlServer>();

List<String> changedThings = new List<String>();
Build bld = _builds.Where(x => x.BuildNumber == buildNumber).First();

if(bld != null)
{
    int.TryParse(bld.SourceVersion, out int csId);
    if (csId > 0)
    {
        Changeset changeset = vcs.GetChangeset(csId);
        foreach(Microsoft.TeamFoundation.VersionControl.Client.Change change in changeset.Changes)
        {
            changedThings.Add(change.Item.ServerItem);
        }
    }                
}

if(changedThings != null && changedThings.Count > 0)
{
    lbChanges.DataSource = changedThings;
}

Однако в объекте, похоже, нет ничего об источнике каждой регистрации. Как уже говорилось, мне в первую очередь нужны рабочие элементы, чтобы я мог потом вернуться к нашим билетам JIRA.

Я пробовал следующее, но ничего не возвращается

IEnumerable<ExtendedMerge> mergeDetails = vcs.QueryMergesExtended(new ItemSpec(@"$/Project/Branch", RecursionType.Full), VersionSpec.Latest, VersionSpec.ParseSingleSpec(csId.ToString(), null), VersionSpec.ParseSingleSpec(csId.ToString(), null));

1 Ответ

1 голос
/ 21 июня 2019

Как оказалось, мне просто пришлось немного изменить предыдущую попытку.Ниже приведены сведения о слиянии

VersionSpec versionSpec = VersionSpec.ParseSingleSpec(csId.ToString(), null);
ChangesetMergeDetails results = vcs.QueryMergesWithDetails(@"$/Project/SourceBranch", VersionSpec.Latest, 0, @"$/Project/TargetBranch", VersionSpec.Latest, 0, versionSpec, versionSpec, RecursionType.Full);

Оттуда я использую чрезмерное количество циклов foreach, чтобы получить то, что я хочу:

foreach(Changeset thing in results.Changesets)
{
    foreach(WorkItem workItem in thing.WorkItems.Distinct())
    {
        changedItems.Add(workItem.Id.ToString());

        foreach (Revision revision in workItem.Revisions)
        {
            foreach (Field field in workItem.Fields)
            {
                if(field.Name == "History")
                {
                    string thingICareAbout = revision.Fields[field.Name].Value.ToString();
                    if (thingICareAbout.Contains("TFS4JIRA"))
                    {
                        wiHistory.Add(ParseJIRT(thingICareAbout));
                    }                                        
                }
            }
        }
    }
}
...