TFS 2010: Getting list of changeset Ids

2019-01-22 20:08发布

I need to create two methods as follows:

  1. Retrieve all changesets in TFS.
  2. Retrieve all changesets newer than a specified changeset.

I've done some google searching and found a few links and managed to come up with some code. I can't seem to work out the method to call to get the complete list of changeset items. I've botched something together to get this but was wondering if someone can help me:

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)
    {
    }
}

Getting the changeset for some Id's throws a 'ResourceAccessException' exception which is why the handler has been added.

Any ideas on how to do this in the "proper" way?

I'm using Visual Studio 2010 with TFS 2010. Application is being written in C# as a .Net 4.0 app.

TIA

2条回答
ら.Afraid
2楼-- · 2019-01-22 20:46

In case it's only the changeset numbers in the range that are required, the following code may be used.

foreach (var changeset in changesets)
{ 
   Console.WriteLine(changeset.ChangesetId); 
}
查看更多
甜甜的少女心
3楼-- · 2019-01-22 21:08

Try this:

  // 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>();
查看更多
登录 后发表回答