Ejemplo n.º 1
0
        private static void TrySetBranchNameFromSubject(
            CommitId commitId,
            GitCommit gitCommit,
            IDictionary <CommitId, BranchName> branchNameByCommitId,
            IDictionary <CommitId, BranchName> subjectBranchNameByCommitId)
        {
            // Trying to parse source and target branch names from subject. They can be like
            // "Merge branch 'branch-name' of remote-repository-path"
            // This is considered a "pull merge", where branch-name is both source and target. These are
            // usually automatically created by tools and thus more trustworthy.
            // Other merge merge subjects are less trustworthy since they sometiems are manually edited
            // like:
            // "Merge source-branch"
            // which contains a source branch name, but sometimes they contain a target like
            // "Merge source-branch into target-branch"
            MergeBranchNames mergeNames = BranchNameParser.ParseBranchNamesFromSubject(gitCommit.Subject);

            if (IsPullMergeCommit(mergeNames))
            {
                // Pull merge subjects (source branch same as target) (trust worthy, so use branch name
                branchNameByCommitId[commitId] = mergeNames.SourceBranchName;
                branchNameByCommitId[gitCommit.ParentIds[0]] = mergeNames.SourceBranchName;
                branchNameByCommitId[gitCommit.ParentIds[1]] = mergeNames.SourceBranchName;

                // But also note the barnch name from subjects
                subjectBranchNameByCommitId[commitId] = mergeNames.SourceBranchName;
                subjectBranchNameByCommitId[gitCommit.ParentIds[0]] = mergeNames.SourceBranchName;
                subjectBranchNameByCommitId[gitCommit.ParentIds[1]] = mergeNames.SourceBranchName;
            }
            else
            {
                // Normal merge subject (less trustworthy)
                if (mergeNames.TargetBranchName != null)
                {
                    // There was a target branch name
                    subjectBranchNameByCommitId[commitId] = mergeNames.TargetBranchName;
                }

                if (mergeNames.SourceBranchName != null)
                {
                    // There was a source branch name
                    subjectBranchNameByCommitId[gitCommit.ParentIds[1]] = mergeNames.SourceBranchName;
                }
            }
        }
Ejemplo n.º 2
0
 private static bool IsPullMergeCommit(MergeBranchNames branchNames)
 {
     return
         (branchNames.SourceBranchName != null &&
          branchNames.SourceBranchName == branchNames.TargetBranchName);
 }