Программно получить данные о вине (аннотации) TFS

Я пытаюсь реализовать плагин для Team Foundation Server 2010, который будет создавать отчеты о пользователях в командном проекте. Концептуально все, что мне нужно для правильной реализации этого подключаемого модуля, — это доступ к тем же данным, которые вы получаете при использовании функции «Аннотации» в Visual Studio: Мне нужно иметь возможность сказать, кто был последним автором заданная строка кода.

Я искал в Интернете документацию или примеры кода, но все, что я смог найти, это либо предложения, такие как используя инструменты командной строки TFS или кажущиеся неполными примеры кода.

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


person MaxML    schedule 21.07.2015    source источник


Ответы (2)


Тем временем я нашел рабочее решение, которое выполняет процесс Team Foundation Power Tools. и анализирует его вывод:

private readonly Regex m_Regex = new Regex(@"^(?<changeset>\d+)(?<codeLine>.*)", RegexOptions.Compiled | RegexOptions.Multiline);

public List<Changeset> GetAnnotations(string filepath, string codeText)
    {
        var versionControlServer = CreateVersionControlServer();

        return m_Regex.Matches(ExecutePowerTools(filepath))
            .Cast<Match>()
            .Where(m => m.Groups["codeLine"].Value.Contains(codeText))
            .Select(v => versionControlServer.GetChangeset(int.Parse(v.Groups["changeset"].Value), false, false))
            .ToList();
    }

    private static VersionControlServer CreateVersionControlServer()
    {
        var projectCollection = new TfsTeamProjectCollection(new Uri(@"TFS URL"));
        var versionControlServer = projectCollection.GetService<VersionControlServer>();
        return versionControlServer;
    }

    private static string ExecutePowerTools(string filepath)
    {
        using (var process = Process.Start(TfptLocation, string.Format("annotate /noprompt {0}", filepath)))
        {
            process.WaitForExit();
            return process.StandardOutput.ReadToEnd();
        }
    }
person Boris Modylevsky    schedule 21.09.2015
comment
Я только что реализовал это, и он не сообщает вам владельца каждой строки, только набор изменений и код... - person im1dermike; 11.05.2016
comment
@ im1dermike, ты прав. Это было достаточно хорошо для моего варианта использования. - person Boris Modylevsky; 15.05.2016

У меня было очень похожее требование, чтобы получить информацию о конкретном атрибуте в файле, например. кто добавил, когда, связанные рабочие элементы и т. д.; Следующий проект GitHub реализуется для получения необходимых деталей и требует минимальных изменений в работе.

плагин SonarQube SCM TFVC

Для этого требуется выполнение анализа с компьютеров Windows с установленной объектной моделью Team Foundation Server (загрузить для TFS 2013).

person akjoshi    schedule 15.01.2018