QueryHistory против проекта codeplex висит бесконечно - PullRequest
0 голосов
/ 12 июня 2010

Я работаю над утилитой TFS, которая получает наборы изменений для конкретного проекта в TFS.У меня есть домашний сервер TFS 2010, который я в основном использую для тестирования, но я решил попробовать его на проекте Codeplex, в который я внес свой вклад.Таким образом, я могу протестировать функциональность с большим количеством наборов изменений, чем у меня на месте.

Несмотря на то, что он отлично работает в моей среде, переход по проводному каналу на кодплекс оставил меня в тупике.Мое приложение запрашивает историю, но затем, при попытке выполнить итерацию по истории (то есть, когда оно лениво загружает IEnumerable), мое приложение зависает.«исключения, что« элемент не существует в указанной версии »- что явно не соответствует действительности, так как я пытаюсь получить историю для« $ / »в VersionSpec.Latest.

Я также вижудве или три последовательных ошибки сервера 500 возвращаются мне после принудительной приостановки отладки.

Другие операции (например, GetItems()) работают нормально, поэтому я уверен, что аутентификация не является проблемой.

Есть мысли?

Вот код:

IEnumerable items = vcs.QueryHistory("$/", VersionSpec.Latest, 1, RecursionType.None, null, null, null, 5, true, false);

        List<ChangesetItem> returnList = new List<ChangesetItem>();
        foreach (Changeset cs in items)  //hangs here on first iteraiton
        {
            ChangesetItem newItem = new ChangesetItem()
            {
                ChangesetId = cs.ChangesetId,
                //ChangesetNote = cs.CheckinNote.Values[0].Value,
                Comment = cs.Comment,
                Committer = cs.Committer,
                CreationDate = cs.CreationDate
            };

            returnList.Add(newItem);
        }

1 Ответ

0 голосов
/ 18 июня 2010

Doh! Нашел это. Проблема была в моем вызове QueryHistory:

IEnumerable items = vcs.QueryHistory("$/", 
                  VersionSpec.Latest, 
                  1, // the deletionId should be '0' or a unique deletion identifier
                  RecursionType.None, 
                  null, 
                  null, 
                  null, 
                  5, 
                  true, 
                  false);

Я прокомментировал строку кода выше. По какой-то причине я думал, что deletetionId должен был быть равен «1», однако теперь, когда я посмотрел на API, я понял, что это должен быть ноль (для существующих файлов) или конкретный идентификатор удаления для файлов которые были удалены. По-видимому, API искал файл с deletetionId, равным '1', который он не смог найти, что вызвало сбой.

...