diff --git a/GitTfs.VsCommon/TfsHelper.Common.cs b/GitTfs.VsCommon/TfsHelper.Common.cs index f6870997..3d2085b0 100644 --- a/GitTfs.VsCommon/TfsHelper.Common.cs +++ b/GitTfs.VsCommon/TfsHelper.Common.cs @@ -640,16 +640,26 @@ namespace Sep.Git.Tfs.VsCommon return _bridge.Wrap(Retry.Do(() => GroupSecurityService.ReadIdentity(SearchFactor.AccountName, username, QueryMembership.None))); } - public ITfsChangeset GetLatestChangeset(IGitTfsRemote remote) + public Changeset GetLatestChangeset(IGitTfsRemote remote, bool includeChanges) { var history = VersionControl.QueryHistory(remote.TfsRepositoryPath, VersionSpec.Latest, 0, - RecursionType.Full, null, null, VersionSpec.Latest, 1, true, false, + RecursionType.Full, null, null, VersionSpec.Latest, 1, includeChanges, false, false).Cast().ToList(); if (history.Empty()) throw new GitTfsException("error: remote TFS repository path was not found"); - return BuildTfsChangeset(history.Single(), remote); + return history.Single(); + } + + public ITfsChangeset GetLatestChangeset(IGitTfsRemote remote) + { + return BuildTfsChangeset(GetLatestChangeset(remote, true), remote); + } + + public int GetLatestChangesetId(IGitTfsRemote remote) + { + return GetLatestChangeset(remote, false).ChangesetId; } public IChangeset GetChangeset(int changesetId) diff --git a/GitTfs.VsFake/TfsHelper.VsFake.cs b/GitTfs.VsFake/TfsHelper.VsFake.cs index 8be74261..36348c8c 100644 --- a/GitTfs.VsFake/TfsHelper.VsFake.cs +++ b/GitTfs.VsFake/TfsHelper.VsFake.cs @@ -68,6 +68,11 @@ namespace Sep.Git.Tfs.VsFake return _script.Changesets.LastOrDefault().Try(x => BuildTfsChangeset(x, remote)); } + public int GetLatestChangesetId(IGitTfsRemote remote) + { + return _script.Changesets.LastOrDefault().Id; + } + public IEnumerable GetChangesets(string path, long startVersion, IGitTfsRemote remote) { if (!_script.Changesets.Any(c => c.IsBranchChangeset) && _script.Changesets.Any(c => c.IsMergeChangeset)) diff --git a/GitTfs/Core/GitTfsRemote.cs b/GitTfs/Core/GitTfsRemote.cs index f6a35958..20d707bc 100644 --- a/GitTfs/Core/GitTfsRemote.cs +++ b/GitTfs/Core/GitTfsRemote.cs @@ -585,7 +585,7 @@ namespace Sep.Git.Tfs.Core private IEnumerable FetchChangesets() { // TFS 2010 doesn't like when we ask for history past its last changeset. - if (MaxChangesetId == GetLatestChangeset().Summary.ChangesetId) + if (MaxChangesetId == GetLatestChangesetId()) return Enumerable.Empty(); if(!IsSubtreeOwner) @@ -603,15 +603,17 @@ namespace Sep.Git.Tfs.Core private ITfsChangeset GetLatestChangeset() { - if (!string.IsNullOrEmpty(this.TfsRepositoryPath)) - { + if (!string.IsNullOrEmpty(TfsRepositoryPath)) return Tfs.GetLatestChangeset(this); - } - else - { - var changesetId = globals.Repository.GetSubtrees(this).Select(x => Tfs.GetLatestChangeset(x)).Max(x => x.Summary.ChangesetId); - return GetChangeset(changesetId); - } + var changesetId = globals.Repository.GetSubtrees(this).Select(x => Tfs.GetLatestChangeset(x)).Max(x => x.Summary.ChangesetId); + return GetChangeset(changesetId); + } + + private int GetLatestChangesetId() + { + if (!string.IsNullOrEmpty(TfsRepositoryPath)) + return Tfs.GetLatestChangesetId(this); + return globals.Repository.GetSubtrees(this).Select(x => Tfs.GetLatestChangesetId(x)).Max(); } public void UpdateTfsHead(string commitHash, long changesetId) diff --git a/GitTfs/Core/TfsInterop/ITfsHelper.cs b/GitTfs/Core/TfsInterop/ITfsHelper.cs index 1bab190e..07095dc1 100644 --- a/GitTfs/Core/TfsInterop/ITfsHelper.cs +++ b/GitTfs/Core/TfsInterop/ITfsHelper.cs @@ -18,6 +18,7 @@ namespace Sep.Git.Tfs.Core.TfsInterop ICheckinNote CreateCheckinNote(Dictionary checkinNotes); IIdentity GetIdentity(string username); ITfsChangeset GetLatestChangeset(IGitTfsRemote remote); + int GetLatestChangesetId(IGitTfsRemote remote); ITfsChangeset GetChangeset(int changesetId, IGitTfsRemote remote); IChangeset GetChangeset(int changesetId); bool HasShelveset(string shelvesetName);