public IRevisionVersion GetRevisionOfItem(IRevisionVersion maxRevisionVersion, string path) { var relativePath = path.Substring(m_fileSystemPath.Length); Commit maxCommit = maxRevisionVersion.GetCommit(); var fileInGit = maxCommit[relativePath]; if (fileInGit == null) { return new GitRevisionVersion(m_branch.Commits.Last()); // BegginingOfTime; } Commit foundCommit = null; { foreach (var commit in m_repository.Commits) { if (commit.Parents.Count() == 1) { TreeChanges changes = m_repository.Diff.Compare<TreeChanges>(commit.Tree, commit.Parents.Single().Tree); if (HasAnyChanged(changes.Added, relativePath) || HasAnyChanged(changes.Modified, relativePath)) { foundCommit = commit; break; } } } } if (foundCommit == null) { // This is a bug change every thing return new GitRevisionVersion(m_branch.Commits.Last()); // BegginingOfTime; } else { return new GitRevisionVersion(foundCommit); } }
public IEnumerable<IRevision> GetRevisions(IRevisionVersion sourceRevision, IRevisionVersion targetRevision) { System.Collections.IEnumerable changesets = m_versionControlServer.QueryHistory( m_sourceControlRootPath, targetRevision.GetSpec(), 0, RecursionType.Full, null, sourceRevision.GetSpec(), targetRevision.GetSpec(), int.MaxValue, true, false); int? sourceChangeSetId = null; if (sourceRevision.GetSpec() is ChangesetVersionSpec) { sourceChangeSetId = (sourceRevision.GetSpec() as ChangesetVersionSpec).ChangesetId; } HashSet<string> items = new HashSet<string>(); foreach (var changeset in changesets.OfType<Changeset>()) { if (!sourceChangeSetId.HasValue || sourceChangeSetId.Value != changeset.ChangesetId) { foreach (Change change in changeset.Changes) { if (change.Item.ServerItem.StartsWith(m_sourceControlRootPath, StringComparison.OrdinalIgnoreCase)) { var item = change.Item.ServerItem.Substring(m_sourceControlRootPath.Length); items.Add(item); } } } } return items.Select(p=> new TfsRevision(MakeFileSystemType(p))).ToList(); }
public IRevisionVersion GetRevisionOfItem(IRevisionVersion maxRevisionVersion, string path) { try { if (!m_workspace.IsValueCreated) { var invoker = m_workspace.Value; } var item = m_versionControlServer.GetItem( System.IO.Path.Combine(m_sourceControlRootPath, path), maxRevisionVersion.GetSpec(), DeletedState.NonDeleted, GetItemsOptions.None); return new TFSRevisionVersion(new ChangesetVersionSpec(item.ChangesetId)); } catch (Exception e) { return new TFSRevisionVersion(new DateVersionSpec(new DateTime(1973, 1, 1))); ; // The begining of time; } }
public IEnumerable<IRevision> GetRevisions(IRevisionVersion sourceRevision, IRevisionVersion targetRevision) { HashSet<string> paths = new HashSet<string>(new StringIgnoreCaseEqualityComarer()); Commit minCommit = sourceRevision.GetCommit(); var maxCommit = targetRevision.GetCommit(); if (maxCommit.Equals(minCommit)) { // Nothing Happend return Enumerable.Empty<IRevision>(); } IEnumerable<Commit> allCommits = FindAllCommits(maxCommit, minCommit); List<Commit> affectedCommits = new List<Commit>(); foreach (var currentCommit in allCommits) { int count = currentCommit.Parents.Count(); // We Ignore all merges if (count == 1) { affectedCommits.Add(currentCommit); foreach (var parent in currentCommit.Parents) { TreeChanges changes = m_repository.Diff.Compare<TreeChanges>(currentCommit.Tree, parent.Tree); AddChanges(paths, changes.Added); AddChanges(paths, changes.Deleted); AddChanges(paths, changes.Modified); AddChanges(paths, changes.Renamed); AddChanges(paths, changes.TypeChanged); } } } return paths.Select(p => new GitRevision(p)).ToList(); }