TFS 2010: получение списка идентификаторов ревизий - PullRequest
17 голосов
/ 13 декабря 2011

Мне нужно создать два метода следующим образом:

  1. Получить все наборы изменений в TFS.
  2. Получить все наборы изменений, более новые, чем указанный набор изменений.

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

TfsTeamProjectCollection projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://mydomain.com:8080/tfs"));
VersionControlServer versionControl = projectCollection.GetService<VersionControlServer>();
int latestId = versionControl.GetLatestChangesetId();

List<Changeset> changesetList = new List<Changeset>();
for (int i = 1; i < latestId; i++)
{
    try
    {
        Changeset cs = versionControl.GetChangeset(i);
        if (cs != null)
        {
            changesetList.Add(cs);
        }
    }
    catch (ResourceAccessException)
    {
    }
}

Получение набора изменений для некоторых идентификаторов выдает исключение ResourceAccessException, из-за чего был добавлен обработчик.

Есть какие-нибудь идеи о том, как сделать это «правильным» способом?

Я использую Visual Studio 2010 с TFS 2010. Приложение пишется на C # как приложение .Net 4.0.

TIA

Ответы [ 2 ]

27 голосов
/ 13 декабря 2011

Попробуйте это:

  // Replace with your setup
  var tfsServer = @"http://tfsserver:8080/tfs/SW";
  var serverPath = @"$/PCSW/ProjectX/Main";

  // Connect to server
  var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsServer));
  tfs.Connect(ConnectOptions.None);
  var vcs = tfs.GetService<VersionControlServer>();

  // Create versionspec's. Example start with changeset 529
  VersionSpec versionFrom = VersionSpec.ParseSingleSpec("C529", null);
  // If you want all changesets use this versionFrom:
  // VersionSpec versionFrom = null;
  VersionSpec versionTo = VersionSpec.Latest;

  // Get Changesets
  var changesets = vcs.QueryHistory(
    serverPath,
    VersionSpec.Latest,
    0,
    RecursionType.Full,
    null,
    versionFrom,
    versionTo,
    Int32.MaxValue,
    true,
    false
    ).Cast<Changeset>();
1 голос
/ 07 мая 2014

Если требуются только номера наборов изменений в диапазоне, можно использовать следующий код.

foreach (var changeset in changesets)
{ 
   Console.WriteLine(changeset.ChangesetId); 
}
...