Example #1
0
        public void Apply(ITfsChangeset changeset, string destinationRef)
        {
            var log    = Apply(MaxCommitHash, changeset);
            var commit = Commit(log);

            Repository.UpdateRef(destinationRef, commit);
        }
        private string BuildCheckInComment(ITfsChangeset original, ITfsChangeset source)
        {
            string prefixText    = "";
            string sourceComment = source.Description;

            if (CheckInCommentTemplate.Contains("{PrefixText}"))
            {
                int idx = sourceComment.IndexOf(':');
                if (idx >= 0)
                {
                    prefixText    = sourceComment.Substring(0, idx + 1);
                    sourceComment = sourceComment.Substring(idx + 1).Trim();
                }
            }

            return
                (CheckInCommentTemplate
                 .Replace("{PrefixText}", prefixText)
                 .Replace("{OriginalId}", original.Changeset.ChangesetId.ToString())
                 .Replace("{OriginalDate}", original.Changeset.CreationDate.ToUniversalTime().ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss"))
                 .Replace("{OriginalComment}", original.Description)
                 .Replace("{SourceId}", source.Changeset.ChangesetId.ToString())
                 .Replace("{SourceDate}", source.Changeset.CreationDate.ToUniversalTime().ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss"))
                 .Replace("{SourceComment}", sourceComment)
                 .Replace("{SourceBranch}", MergeSource.Name)
                 .Replace("{TargetBranch}", MergeTarget.Name));
        }
Example #3
0
        private void quickFetch(ITfsChangeset changeset)
        {
            var log = CopyTree(MaxCommitHash, changeset);

            UpdateTfsHead(Commit(log), changeset.Summary.ChangesetId);
            DoGcIfNeeded();
        }
Example #4
0
        private bool ProcessMergeChangeset(ITfsChangeset changeset, bool stopOnFailMergeCommit, ref string parentCommit)
        {
            var parentChangesetId = Tfs.FindMergeChangesetParent(TfsRepositoryPath, changeset.Summary.ChangesetId, this);
            var shaParent         = Repository.FindCommitHashByChangesetId(parentChangesetId);

            if (shaParent == null)
            {
                shaParent = FindMergedRemoteAndFetch(parentChangesetId, stopOnFailMergeCommit);
            }
            if (shaParent != null)
            {
                parentCommit = shaParent;
            }
            else
            {
                if (stopOnFailMergeCommit)
                {
                    return(false);
                }
                //TODO : Manage case where there is not yet a git commit for the parent changset!!!!!
                stdout.WriteLine("warning: this changeset " + changeset.Summary.ChangesetId +
                                 " is a merge changeset. But it can't have been managed accordingly because one of the parent changeset "
                                 + parentChangesetId +
                                 " is not present in the repository! If you want to do it, fetch the branch containing this changeset before retrying...");
            }
            return(true);
        }
Example #5
0
        public void Apply(ITfsChangeset changeset, string destinationRef)
        {
            var log    = Apply(MaxCommitHash, changeset);
            var commit = Commit(log);

            Repository.CommandNoisy("update-ref", destinationRef, commit);
        }
Example #6
0
        private ITfsChangeset FindChangeset(ITfsChangeset source, ITfsBranch where)
        {
            if (source.GetAffectedBranchesForActiveProject().Contains(where))
            {
                return(source);
            }


            var foundLinks
                = AllAssociatedChangesetsIncludingMerges.Where(link => link.Source != null && link.Source.TfsChangeset.Changeset.ChangesetId == source.Changeset.ChangesetId);

            // This could be more optimized.
            foreach (var foundLink in foundLinks)
            {
                if (foundLink.Target.TfsChangeset.GetAffectedBranchesForActiveProject().Contains(where))
                {
                    return(foundLink.Target.TfsChangeset);
                }
            }
            foreach (var foundLink in foundLinks)
            {
                var found = FindChangeset(foundLink.Target.TfsChangeset, where);
                if (found != null)
                {
                    return(found);
                }
            }
            return(null);
        }
Example #7
0
 public string BuildSingleModeMergeMessage(ITfsChangeset tfsChangeset, IBranch branch, string additionalText)
 {
     return(string.Format(
                _singleModeMergeMessageFormat,
                string.Format(_changesetNumberFormat, tfsChangeset.ChangesetNumber),
                BuildBranchPartMessage(branch, additionalText),
                tfsChangeset.Comment));
 }
Example #8
0
        private void quickFetch(ITfsChangeset changeset)
        {
            AssertTemporaryIndexEmpty();
            var log = CopyTree(MaxCommitHash, changeset);

            UpdateRef(Commit(log), changeset.Summary.ChangesetId);
            DoGcIfNeeded();
        }
Example #9
0
 private bool ChangesetHasMixedContent(ITfsChangeset changeset)
 {
     return(changeset
            .GetAllChanges()
            .Any(change => change.Change.ChangeType.HasFlag(ChangeType.Merge))
            &&
            changeset
            .GetAllChanges()
            .Any(change => !change.Change.ChangeType.HasFlag(ChangeType.Merge)));
 }
Example #10
0
        private bool ProcessMergeChangeset(ITfsChangeset changeset, bool stopOnFailMergeCommit, ref string parentCommit)
        {
            if (!Tfs.CanGetBranchInformation)
            {
                stdout.WriteLine("info: this changeset " + changeset.Summary.ChangesetId +
                                 " is a merge changeset. But was not treated as is because this version of TFS can't manage branches...");
            }
            else if (!IsIgnoringBranches())
            {
                var parentChangesetId = Tfs.FindMergeChangesetParent(TfsRepositoryPath, changeset.Summary.ChangesetId, this);
                if (parentChangesetId < 1)  // Handle missing merge parent info
                {
                    if (stopOnFailMergeCommit)
                    {
                        return(false);
                    }

                    stdout.WriteLine("warning: this changeset " + changeset.Summary.ChangesetId + " is a merge changeset. But git-tfs is unable to determine the parent changeset.");
                    return(true);
                }

                var shaParent = Repository.FindCommitHashByChangesetId(parentChangesetId);
                if (shaParent == null)
                {
                    string omittedParentBranch;
                    shaParent = FindMergedRemoteAndFetch(parentChangesetId, stopOnFailMergeCommit, out omittedParentBranch);
                    changeset.OmittedParentBranch = omittedParentBranch;
                }

                if (shaParent != null)
                {
                    parentCommit = shaParent;
                }
                else
                {
                    if (stopOnFailMergeCommit)
                    {
                        return(false);
                    }

                    stdout.WriteLine("warning: this changeset " + changeset.Summary.ChangesetId +
                                     " is a merge changeset. But git-tfs failed to find and fetch the parent changeset "
                                     + parentChangesetId + ". Parent changeset will be ignored...");
                }
            }
            else
            {
                stdout.WriteLine("info: this changeset " + changeset.Summary.ChangesetId +
                                 " is a merge changeset. But was not treated as is because of your git setting...");
                changeset.OmittedParentBranch = ";C" + changeset.Summary.ChangesetId;
            }
            return(true);
        }
Example #11
0
 private string BuildCheckInComment(ITfsChangeset original, ITfsChangeset source)
 {
     return
         (CheckInCommentTemplate
          .Replace("{OriginalId}", original.Changeset.ChangesetId.ToString())
          .Replace("{OriginalDate}", original.Changeset.CreationDate.ToUniversalTime().ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss"))
          .Replace("{OriginalComment}", original.Description)
          .Replace("{SourceId}", source.Changeset.ChangesetId.ToString())
          .Replace("{SourceDate}", source.Changeset.CreationDate.ToUniversalTime().ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss"))
          .Replace("{SourceComment}", source.Description)
          .Replace("{SourceBranch}", MergeSource.Name)
          .Replace("{TargetBranch}", MergeTarget.Name));
 }
Example #12
0
        private LogEntry CopyTree(string lastCommit, ITfsChangeset changeset)
        {
            LogEntry result = null;

            WithTemporaryIndex(() => Tfs.WithWorkspace(WorkingDirectory, this, changeset.Summary, workspace => {
                GitIndexInfo.Do(Repository, index => result = changeset.CopyTree(index, workspace));
                result.Tree = Repository.CommandOneline("write-tree");
            }));
            if (!String.IsNullOrEmpty(lastCommit))
            {
                result.CommitParents.Add(lastCommit);
            }
            return(result);
        }
Example #13
0
        private LogEntry CopyTree(string lastCommit, ITfsChangeset changeset)
        {
            LogEntry result = null;

            WithTemporaryIndex(
                () => GitIndexInfo.Do(Repository, index => result = changeset.CopyTree(index)));
            WithTemporaryIndex(
                () => result.Tree = Repository.CommandOneline("write-tree"));
            if (!String.IsNullOrEmpty(lastCommit))
            {
                result.CommitParents.Add(lastCommit);
            }
            return(result);
        }
Example #14
0
        private LogEntry CopyTree(string lastCommit, ITfsChangeset changeset)
        {
            LogEntry result = null;

            WithWorkspace(changeset.Summary, workspace => {
                var treeBuilder = workspace.Remote.Repository.GetTreeBuilder(null);
                result          = changeset.CopyTree(treeBuilder, workspace);
                result.Tree     = treeBuilder.GetTree();
            });
            if (!String.IsNullOrEmpty(lastCommit))
            {
                result.CommitParents.Add(lastCommit);
            }
            return(result);
        }
Example #15
0
        private LogEntry Apply(string parent, ITfsChangeset changeset)
        {
            LogEntry result = null;

            WithTemporaryIndex(() => WithWorkspace(changeset.Summary, workspace =>
            {
                AssertTemporaryIndexClean(parent);
                GitIndexInfo.Do(Repository, index => result = changeset.Apply(parent, index, workspace));
                result.Tree = Repository.CommandOneline("write-tree");
            }));
            if (!String.IsNullOrEmpty(parent))
            {
                result.CommitParents.Add(parent);
            }
            return(result);
        }
Example #16
0
        private LogEntry Apply(string parent, ITfsChangeset changeset, IDictionary <string, GitObject> entries, Action <Exception> ignorableErrorHandler)
        {
            LogEntry result = null;

            WithWorkspace(changeset.Summary, workspace =>
            {
                var treeBuilder = workspace.Remote.Repository.GetTreeBuilder(parent);
                result          = changeset.Apply(parent, treeBuilder, workspace, entries, ignorableErrorHandler);
                result.Tree     = treeBuilder.GetTree();
            });
            if (!String.IsNullOrEmpty(parent))
            {
                result.CommitParents.Add(parent);
            }
            return(result);
        }
Example #17
0
        /// <summary>
        /// Gets the changesets which have resulted in the given changeset due
        /// to a merge operation.
        /// </summary>
        /// <param name="changeset">The changeset.</param>
        /// <param name="versionControlServer">The version control server.</param>
        /// <returns>
        /// A list of all changesets that have resulted into the given changeset.
        /// </returns>
        public IEnumerable <ITfsChangeset> GetMergeSourceChangesets(ITfsChangeset changeset)
        {
            VersionControlServer versionControlServer = Repository.Instance.TfsBridgeProvider.VersionControlServer;

            // remember the already covered changeset id's
            Dictionary <int, bool> alreadyCoveredChangesets = new Dictionary <int, bool>();

            // initialize list of parent changesets
            List <Changeset> parentChangesets = new List <Changeset>();

            // go through each change inside the changeset
            foreach (Change change in changeset.Changeset.Changes)
            {
                // query for the items' history
                var queryResults = versionControlServer.QueryMergesExtended(
                    new ItemSpec(change.Item.ServerItem, RecursionType.Full),
                    new ChangesetVersionSpec(changeset.Changeset.ChangesetId),
                    null,
                    null);

                // go through each changeset in the history
                foreach (var result in queryResults)
                {
                    // only if the target-change is the given changeset, we have a hit
                    if (result.TargetChangeset.ChangesetId == changeset.Changeset.ChangesetId)
                    {
                        // if that hit has already been processed elsewhere, then just skip it
                        if (!alreadyCoveredChangesets.ContainsKey(result.SourceChangeset.ChangesetId))
                        {
                            // otherwise add it
                            alreadyCoveredChangesets.Add(result.SourceChangeset.ChangesetId, true);
                            yield return(new TfsChangeset(versionControlServer.GetChangeset(result.SourceChangeset.ChangesetId)));
                        }
                    }
                }
            }
        }
Example #18
0
 private LogEntry Apply(string parent, ITfsChangeset changeset, Action <Exception> ignorableErrorHandler)
 {
     return(Apply(parent, changeset, BuildEntryDictionary(), ignorableErrorHandler));
 }
Example #19
0
 private LogEntry Apply(string parent, ITfsChangeset changeset, IDictionary <string, GitObject> entries)
 {
     return(Apply(parent, changeset, entries, null));
 }
Example #20
0
        private string ProcessChangeset(ITfsChangeset changeset, LogEntry log)
        {
            if (ExportMetadatas)
            {
                if (changeset.Summary.Workitems.Any())
                {
                    var workItemIds = TranslateWorkItems(changeset.Summary.Workitems.Select(wi => wi.Id.ToString()));
                    if (workItemIds != null)
                    {
                        log.Log += "\nwork-items: " + string.Join(", ", workItemIds.Select(s => "#" + s));
                    }
                }

                if (!string.IsNullOrWhiteSpace(changeset.Summary.PolicyOverrideComment))
                {
                    log.Log += "\n" + GitTfsConstants.GitTfsPolicyOverrideCommentPrefix + changeset.Summary.PolicyOverrideComment;
                }

                if (!string.IsNullOrWhiteSpace(changeset.Summary.CodeReviewer))
                {
                    log.Log += "\n" + GitTfsConstants.GitTfsCodeReviewerPrefix + changeset.Summary.CodeReviewer;
                }

                if (!string.IsNullOrWhiteSpace(changeset.Summary.SecurityReviewer))
                {
                    log.Log += "\n" + GitTfsConstants.GitTfsSecurityReviewerPrefix + changeset.Summary.SecurityReviewer;
                }

                if (!string.IsNullOrWhiteSpace(changeset.Summary.PerformanceReviewer))
                {
                    log.Log += "\n" + GitTfsConstants.GitTfsPerformanceReviewerPrefix + changeset.Summary.PerformanceReviewer;
                }
            }

            var commitSha = Commit(log);

            UpdateTfsHead(commitSha, changeset.Summary.ChangesetId);
            StringBuilder metadatas = new StringBuilder();

            if (changeset.Summary.Workitems.Any())
            {
                string workitemNote = "Workitems:\n";
                foreach (var workitem in changeset.Summary.Workitems)
                {
                    var workitemId  = workitem.Id.ToString();
                    var workitemUrl = workitem.Url;
                    if (ExportMetadatas && ExportWorkitemsMapping.Count != 0)
                    {
                        if (ExportWorkitemsMapping.ContainsKey(workitemId))
                        {
                            var oldWorkitemId = workitemId;
                            workitemId  = ExportWorkitemsMapping[workitemId];
                            workitemUrl = workitemUrl.Replace(oldWorkitemId, workitemId);
                        }
                    }
                    workitemNote += String.Format("[{0}] {1}\n    {2}\n", workitemId, workitem.Title, workitemUrl);
                }
                metadatas.Append(workitemNote);
            }

            if (!string.IsNullOrWhiteSpace(changeset.Summary.PolicyOverrideComment))
            {
                metadatas.Append("\nPolicy Override Comment:" + changeset.Summary.PolicyOverrideComment);
            }

            if (!string.IsNullOrWhiteSpace(changeset.Summary.CodeReviewer))
            {
                metadatas.Append("\nCode Reviewer:" + changeset.Summary.CodeReviewer);
            }

            if (!string.IsNullOrWhiteSpace(changeset.Summary.SecurityReviewer))
            {
                metadatas.Append("\nSecurity Reviewer:" + changeset.Summary.SecurityReviewer);
            }

            if (!string.IsNullOrWhiteSpace(changeset.Summary.PerformanceReviewer))
            {
                metadatas.Append("\nPerformance Reviewer:" + changeset.Summary.PerformanceReviewer);
            }

            if (!string.IsNullOrWhiteSpace(changeset.OmittedParentBranch))
            {
                metadatas.Append("\nOmitted parent branch: " + changeset.OmittedParentBranch);
            }

            if (metadatas.Length != 0)
            {
                Repository.CreateNote(commitSha, metadatas.ToString(), log.AuthorName, log.AuthorEmail, log.Date);
            }
            return(commitSha);
        }
Example #21
0
        private string ProcessChangeset(ITfsChangeset changeset, LogEntry log)
        {
            if (ExportMetadatas)
            {
                if (changeset.Summary.Workitems.Any())
                {
                    var workItems = TranslateWorkItems(changeset.Summary.Workitems.Select(wi => new ExportWorkItem(wi)));
                    if (workItems != null)
                    {
                        log.Log += "\nWorkitems:";
                        foreach (var workItem in workItems)
                        {
                            log.Log += "\n#" + workItem.Id + " " + workItem.Title;
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(changeset.Summary.PolicyOverrideComment))
                {
                    log.Log += "\n" + GitTfsConstants.GitTfsPolicyOverrideCommentPrefix + " " + changeset.Summary.PolicyOverrideComment;
                }

                foreach (var checkinNote in changeset.Summary.CheckinNotes)
                {
                    if (!string.IsNullOrWhiteSpace(checkinNote.Name) && !string.IsNullOrWhiteSpace(checkinNote.Value))
                    {
                        log.Log += "\n" + GitTfsConstants.GitTfsPrefix + "-" + CamelCaseToDelimitedStringConverter.Convert(checkinNote.Name, "-") + ": " + checkinNote.Value;
                    }
                }
            }

            var commitSha = Commit(log);

            UpdateTfsHead(commitSha, changeset.Summary.ChangesetId);
            StringBuilder metadatas = new StringBuilder();

            if (changeset.Summary.Workitems.Any())
            {
                string workitemNote = "Workitems:\n";
                foreach (var workitem in changeset.Summary.Workitems)
                {
                    var workitemId  = workitem.Id.ToString();
                    var workitemUrl = workitem.Url;
                    if (ExportMetadatas && ExportWorkitemsMapping.Count != 0)
                    {
                        if (ExportWorkitemsMapping.ContainsKey(workitemId))
                        {
                            var oldWorkitemId = workitemId;
                            workitemId  = ExportWorkitemsMapping[workitemId].Id;
                            workitemUrl = workitemUrl.Replace(oldWorkitemId, workitemId);
                        }
                    }
                    workitemNote += string.Format("[{0}] {1}\n    {2}\n", workitemId, workitem.Title, workitemUrl);
                }
                metadatas.Append(workitemNote);
            }

            if (!string.IsNullOrWhiteSpace(changeset.Summary.PolicyOverrideComment))
            {
                metadatas.Append("\nPolicy Override Comment: " + changeset.Summary.PolicyOverrideComment);
            }

            foreach (var checkinNote in changeset.Summary.CheckinNotes)
            {
                if (!string.IsNullOrWhiteSpace(checkinNote.Name) && !string.IsNullOrWhiteSpace(checkinNote.Value))
                {
                    metadatas.Append("\n" + checkinNote.Name + ": " + checkinNote.Value);
                }
            }

            if (!string.IsNullOrWhiteSpace(changeset.OmittedParentBranch))
            {
                metadatas.Append("\nOmitted parent branch: " + changeset.OmittedParentBranch);
            }

            if (metadatas.Length != 0)
            {
                Repository.CreateNote(commitSha, metadatas.ToString(), log.AuthorName, log.AuthorEmail, log.Date);
            }
            return(commitSha);
        }
Example #22
0
 private LogEntry CopyTree(string lastCommit, ITfsChangeset changeset)
 {
     LogEntry result = null;
     WithTemporaryIndex(() => Tfs.WithWorkspace(WorkingDirectory, this, changeset.Summary, workspace => {
         GitIndexInfo.Do(Repository, index => result = changeset.CopyTree(index, workspace));
         result.Tree = Repository.CommandOneline("write-tree");
     }));
     if (!String.IsNullOrEmpty(lastCommit)) result.CommitParents.Add(lastCommit);
     return result;
 }
Example #23
0
 private LogEntry Apply(string parent, ITfsChangeset changeset)
 {
     LogEntry result = null;
     WithTemporaryIndex(() => WithWorkspace(changeset.Summary, workspace =>
     {
         AssertTemporaryIndexClean(parent);
         GitIndexInfo.Do(Repository, index => result = changeset.Apply(parent, index, workspace));
         result.Tree = Repository.CommandOneline("write-tree");
     }));
     if (!String.IsNullOrEmpty(parent)) result.CommitParents.Add(parent);
     return result;
 }
Example #24
0
 private bool ProcessMergeChangeset(ITfsChangeset changeset, bool stopOnFailMergeCommit, ref string parentCommit)
 {
     var parentChangesetId = Tfs.FindMergeChangesetParent(TfsRepositoryPath, changeset.Summary.ChangesetId, this);
     var shaParent = Repository.FindCommitHashByChangesetId(parentChangesetId);
     if (shaParent == null)
         shaParent = FindMergedRemoteAndFetch(parentChangesetId, stopOnFailMergeCommit);
     if (shaParent != null)
     {
         parentCommit = shaParent;
     }
     else
     {
         if (stopOnFailMergeCommit)
         {
             return false;
         }
         //TODO : Manage case where there is not yet a git commit for the parent changset!!!!!
         stdout.WriteLine("warning: this changeset " + changeset.Summary.ChangesetId +
                          " is a merge changeset. But it can't have been managed accordingly because one of the parent changeset "
                          + parentChangesetId +
                          " is not present in the repository! If you want to do it, fetch the branch containing this changeset before retrying...");
     }
     return true;
 }
Example #25
0
 private LogEntry Apply(string parent, ITfsChangeset changeset, Action<Exception> ignorableErrorHandler)
 {
     return Apply(parent, changeset, BuildEntryDictionary(), ignorableErrorHandler);
 }
Example #26
0
 private void quickFetch(ITfsChangeset changeset)
 {
     var log = CopyTree(MaxCommitHash, changeset);
     UpdateTfsHead(Commit(log), changeset.Summary.ChangesetId);
     DoGcIfNeeded();
 }
Example #27
0
 public TfsChangesetWrapper(ITfsChangeset source)
     : base(typeof(TfsChangesetWrapper))
 {
     _tfsChangeset = source;
 }
Example #28
0
 private LogEntry CopyTree(string lastCommit, ITfsChangeset changeset)
 {
     LogEntry result = null;
     WithTemporaryIndex(
         () => GitIndexInfo.Do(Repository, index => result = changeset.CopyTree(index)));
     WithTemporaryIndex(
         () => result.Tree = Repository.CommandOneline("write-tree"));
     if (!String.IsNullOrEmpty(lastCommit)) result.CommitParents.Add(lastCommit);
     return result;
 }
Example #29
0
        private bool ProcessMergeChangeset(ITfsChangeset changeset, bool stopOnFailMergeCommit, ref string parentCommit)
        {
            if (!Tfs.CanGetBranchInformation)
            {
                stdout.WriteLine("info: this changeset " + changeset.Summary.ChangesetId +
                                 " is a merge changeset. But was not treated as is because this version of TFS can't manage branches...");
            }
            else if (!IsIgnoringBranches())
            {
                var parentChangesetId = Tfs.FindMergeChangesetParent(TfsRepositoryPath, changeset.Summary.ChangesetId, this);
                if (parentChangesetId < 1)  // Handle missing merge parent info
                {
                    if (stopOnFailMergeCommit)
                    {
                        return false;
                    }
                    stdout.WriteLine("warning: this changeset " + changeset.Summary.ChangesetId +
                                     " is a merge changeset. But git-tfs is unable to determine the parent changeset.");
                    return true;
                }
                var shaParent = Repository.FindCommitHashByChangesetId(parentChangesetId);
                if (shaParent == null)
                {
                    string omittedParentBranch;
                    shaParent = FindMergedRemoteAndFetch(parentChangesetId, stopOnFailMergeCommit, out omittedParentBranch);
                    changeset.OmittedParentBranch = omittedParentBranch;
                }
                if (shaParent != null)
                {
                    parentCommit = shaParent;
                }
                else
                {
                    if (stopOnFailMergeCommit)
                        return false;

                    stdout.WriteLine("warning: this changeset " + changeset.Summary.ChangesetId +
                                     " is a merge changeset. But git-tfs failed to find and fetch the parent changeset "
                                     + parentChangesetId + ". Parent changeset will be ignored...");
                }
            }
            else
            {
                stdout.WriteLine("info: this changeset " + changeset.Summary.ChangesetId +
                                 " is a merge changeset. But was not treated as is because of your git setting...");
                changeset.OmittedParentBranch = ";C" + changeset.Summary.ChangesetId;
            }
            return true;
        }
Example #30
0
 private LogEntry CopyTree(string lastCommit, ITfsChangeset changeset)
 {
     LogEntry result = null;
     WithWorkspace(changeset.Summary, workspace => {
         var treeBuilder = workspace.Remote.Repository.GetTreeBuilder(null);
         result = changeset.CopyTree(treeBuilder, workspace);
         result.Tree = treeBuilder.GetTree();
     });
     if (!String.IsNullOrEmpty(lastCommit)) result.CommitParents.Add(lastCommit);
     return result;
 }
Example #31
0
        private void FindMergesForChangesetAndBranch(List <MergedChangesetLink> results, ITfsChangeset changeset, ITfsBranch rootBranch)
        {
            var merges
                = changeset.FindMergesForActiveProject(rootBranch, _potentialMergeSourceBranches)
                  .Select(
                      item => new MergedChangesetLink()
            {
                Source = TfsItemCache.UpdateChangesetFromCache(new TfsChangesetWrapper(item.Source)),
                Target = TfsItemCache.UpdateChangesetFromCache(new TfsChangesetWrapper(item.Target))
            });

            results.Add(
                new MergedChangesetLink()
            {
                Source = null,
                Target = TfsItemCache.UpdateChangesetFromCache(new TfsChangesetWrapper(changeset))
            });
            results.AddRange(merges);
        }
Example #32
0
 private LogEntry Apply(string parent, ITfsChangeset changeset)
 {
     IDictionary<string, GitObject> entries = new Dictionary<string, GitObject>(StringComparer.InvariantCultureIgnoreCase);
     return Apply(parent, changeset, entries);
 }
Example #33
0
 private string CommitChangeset(ITfsChangeset changeset, string parent)
 {
     var log = Apply(parent, changeset);
     return Commit(log);
 }
Example #34
0
 private LogEntry Apply(string parent, ITfsChangeset changeset, IDictionary<string, GitObject> entries)
 {
     return Apply(parent, changeset, entries, null);
 }
Example #35
0
        private string CommitChangeset(ITfsChangeset changeset, string parent)
        {
            var log = Apply(parent, changeset);

            return(Commit(log));
        }
Example #36
0
 private LogEntry Apply(string parent, ITfsChangeset changeset, IDictionary<string, GitObject> entries, Action<Exception> ignorableErrorHandler)
 {
     LogEntry result = null;
     WithWorkspace(changeset.Summary, workspace =>
     {
         var treeBuilder = workspace.Remote.Repository.GetTreeBuilder(parent);
         result = changeset.Apply(parent, treeBuilder, workspace, entries, ignorableErrorHandler);
         result.Tree = treeBuilder.GetTree();
     });
     if (!String.IsNullOrEmpty(parent)) result.CommitParents.Add(parent);
     return result;
 }
Example #37
0
        private LogEntry Apply(string parent, ITfsChangeset changeset)
        {
            IDictionary <string, GitObject> entries = new Dictionary <string, GitObject>(StringComparer.InvariantCultureIgnoreCase);

            return(Apply(parent, changeset, entries));
        }
Example #38
0
        private string ProcessChangeset(ITfsChangeset changeset, LogEntry log)
        {
            if (ExportMetadatas)
            {
                if (changeset.Summary.Workitems.Any()) {
                    var workItemIds = TranslateWorkItems(changeset.Summary.Workitems.Select(wi => wi.Id.ToString()));
                    if (workItemIds != null) {
                        log.Log += "\nwork-items: " + string.Join(", ", workItemIds.Select(s => "#" + s));
                    }
                }

                if (!string.IsNullOrWhiteSpace(changeset.Summary.PolicyOverrideComment))
                    log.Log += "\n" + GitTfsConstants.GitTfsPolicyOverrideCommentPrefix + changeset.Summary.PolicyOverrideComment;

                if (!string.IsNullOrWhiteSpace(changeset.Summary.CodeReviewer))
                    log.Log += "\n" + GitTfsConstants.GitTfsCodeReviewerPrefix + changeset.Summary.CodeReviewer;

                if (!string.IsNullOrWhiteSpace(changeset.Summary.SecurityReviewer))
                    log.Log += "\n" + GitTfsConstants.GitTfsSecurityReviewerPrefix + changeset.Summary.SecurityReviewer;

                if (!string.IsNullOrWhiteSpace(changeset.Summary.PerformanceReviewer))
                    log.Log += "\n" + GitTfsConstants.GitTfsPerformanceReviewerPrefix + changeset.Summary.PerformanceReviewer;
            }

            var commitSha = Commit(log);
            UpdateTfsHead(commitSha, changeset.Summary.ChangesetId);
            StringBuilder metadatas = new StringBuilder();
            if (changeset.Summary.Workitems.Any())
            {
                string workitemNote = "Workitems:\n";
                foreach (var workitem in changeset.Summary.Workitems)
                {
                    var workitemId = workitem.Id.ToString();
                    var workitemUrl = workitem.Url;
                    if (ExportMetadatas && ExportWorkitemsMapping.Count != 0)
                    {
                        if (ExportWorkitemsMapping.ContainsKey(workitemId))
                        {
                            var oldWorkitemId = workitemId;
                            workitemId = ExportWorkitemsMapping[workitemId];
                            workitemUrl = workitemUrl.Replace(oldWorkitemId, workitemId);
                        }
                    }
                    workitemNote += String.Format("[{0}] {1}\n    {2}\n", workitemId, workitem.Title, workitemUrl);
                }
                metadatas.Append(workitemNote);
            }

            if (!string.IsNullOrWhiteSpace(changeset.Summary.PolicyOverrideComment))
                metadatas.Append("\nPolicy Override Comment:" + changeset.Summary.PolicyOverrideComment);

            if (!string.IsNullOrWhiteSpace(changeset.Summary.CodeReviewer))
                metadatas.Append("\nCode Reviewer:" + changeset.Summary.CodeReviewer);

            if (!string.IsNullOrWhiteSpace(changeset.Summary.SecurityReviewer))
                metadatas.Append("\nSecurity Reviewer:" + changeset.Summary.SecurityReviewer);

            if (!string.IsNullOrWhiteSpace(changeset.Summary.PerformanceReviewer))
                metadatas.Append("\nPerformance Reviewer:" + changeset.Summary.PerformanceReviewer);

            if (!string.IsNullOrWhiteSpace(changeset.OmittedParentBranch))
                metadatas.Append("\nOmitted parent branch: " + changeset.OmittedParentBranch);

            if (metadatas.Length != 0)
                Repository.CreateNote(commitSha, metadatas.ToString(), log.AuthorName, log.AuthorEmail, log.Date);
            return commitSha;
        }
Example #39
0
 private bool ChangesetConsistsOnlyOfMerges(ITfsChangeset changeset)
 {
     return(changeset
            .GetAllChanges()
            .All(change => change.Change.ChangeType.HasFlag(ChangeType.Merge)));
 }
Example #40
0
 public void Apply(ITfsChangeset changeset, string destinationRef)
 {
     var log = Apply(MaxCommitHash, changeset);
     var commit = Commit(log);
     Repository.CommandNoisy("update-ref", destinationRef, commit);
 }
Example #41
0
 private bool ChangesetDoesNotContainMerges(ITfsChangeset changeset)
 {
     return(changeset
            .GetAllChanges()
            .Any(change => !change.Change.ChangeType.HasFlag(ChangeType.Merge)));
 }
Example #42
0
 private void quickFetch(ITfsChangeset changeset)
 {
     AssertTemporaryIndexEmpty();
     var log = CopyTree(MaxCommitHash, changeset);
     UpdateRef(Commit(log), changeset.Summary.ChangesetId);
     DoGcIfNeeded();
 }
Example #43
0
 public void Apply(ITfsChangeset changeset, string destinationRef)
 {
     var log = Apply(MaxCommitHash, changeset);
     var commit = Commit(log);
     Repository.UpdateRef(destinationRef, commit);
 }