Получить историю изменений файлов из TFS для реализации пользовательского поведения "вины" - исключений - PullRequest
2 голосов
/ 30 июня 2011

Я пытаюсь найти способ выяснить, кого «обвинять», когда в нашем приложении (на работе) возникает исключение.Конечно, это может быть причиной, но я могу принять это :).Но для этого мне нужна история файла в TFS, чтобы я мог проверить, кто в последний раз внес изменения в строку исключения.Конечно, не всегда в строке исключения вставлено ошибочное изменение, поэтому мне, вероятно, также потребуется проверить любые изменения в том же файле и, наконец, любые проверки, сделанные совсем недавно.Я не уверен, как мне это решить, но я хотел бы сначала узнать у сообщества, есть ли какие-либо уже существующие решения для этого?У меня пока нет опыта работы с TFS API, поэтому я не могу сказать, что возможно, а что нет.Думаю, я бы интегрировал это в наше приложение в обработчике необработанных исключений.Когда некоторые кандидаты на исключение найдены, мне нужно сообщить им по электронной почте.В этом процессе было бы неплохо зарегистрировать, сколько раз какое-либо исключение было сгенерировано любым пользователем в нашей интрасети, кто, когда, как и т. Д. Это может сэкономить нам много времени (и денег).

Ответы [ 2 ]

5 голосов
/ 01 июля 2011

Мне нравится дух!API TFS очень мощный, и вы можете перейти на любой уровень глубины для получения информации, которая вас интересует.

  • Вы можете создать приложение, давайте вызовем приложение TFS API вашего приложения, проверьтеКак вы можете подключиться к TFS программно http://geekswithblogs.net/TarunArora/archive/2011/06/18/tfs-2010-sdk-connecting-to-tfs-2010-programmaticallyndashpart-1.aspx.

  • API TFS позволяет запрашивать TFS для всех изменений (Changesets), внесенных в файл.Итак, допустим, ClassAbc.cs вызывает исключение, если у вас есть шина событий, которая вызывает это исключение для вашего приложения API TFS, вы можете использовать метод в методе GetChangeset versionControlService для получения всех наборов изменений, выполненных в этом файле.Узнайте, как это сделать здесь http://geekswithblogs.net/TarunArora/archive/2011/06/26/tfs-2010-sdk-smart-merge-programmatically-create-your-own-merge.aspx.

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

    public static void GetMergeDetailsForChangeSet()
    {
        var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("Enter the url of team project"));
        var versionControl = tfs.GetService<VersionControlServer>();
    
    
        var a = versionControl.GetChangeset(12322);
    
        VersionSpec changeSpec = new ChangesetVersionSpec(a.Changes[0].Item.ChangesetId);
    
        var abc = a.Changes[0].Item.VersionControlServer.QueryMergesWithDetails(
            null,
            null,
            0,
            a.Changes[0].Item.ServerItem,
            changeSpec,
            a.Changes[0].Item.DeletionId,
            changeSpec,
            changeSpec,
            RecursionType.Full);
    
    }
    
  • Теперь, когда у вас есть действительный код, вы можете запустить набор правил StyleCop http://www.codeproject.com/KB/cs/StyleCop.aspx для этого блока кода и при обнаружении возможных исключений или общих результатов анализа кода можно записать в базу данных ипо электронной почте пользователю.

Звучит интересно.Но, в качестве альтернативы, вы можете использовать функцию Annote в TFS, чтобы увидеть серию изменений, внесенных разработчиком в файл, и связать анализ кода с определением сборки CI и получить постоянную обратную связь об изменениях кода, сделанных разработчиками в вашей команде.

1 голос
/ 30 июня 2011

Это действительно имеет смысл?Подумайте, в каких случаях исключение вызвано изменением в том месте, где оно было выброшено.Обычно причина исключения находится где-то вверх или даже не в пределах стека вызовов во время броска.Вы не должны тратить время на то, что не поможет вам в 99% случаев.

...