Merge "Include topic name in merge commit messages"
This commit is contained in:
		@@ -16,6 +16,10 @@ package com.google.gerrit.server.git;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import static com.google.common.base.Preconditions.checkArgument;
 | 
					import static com.google.common.base.Preconditions.checkArgument;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.common.base.Function;
 | 
				
			||||||
 | 
					import com.google.common.base.Joiner;
 | 
				
			||||||
 | 
					import com.google.common.base.Strings;
 | 
				
			||||||
 | 
					import com.google.common.collect.Iterables;
 | 
				
			||||||
import com.google.gerrit.common.Nullable;
 | 
					import com.google.gerrit.common.Nullable;
 | 
				
			||||||
import com.google.gerrit.common.data.LabelType;
 | 
					import com.google.gerrit.common.data.LabelType;
 | 
				
			||||||
import com.google.gerrit.reviewdb.client.Account;
 | 
					import com.google.gerrit.reviewdb.client.Account;
 | 
				
			||||||
@@ -69,6 +73,7 @@ import java.util.Collections;
 | 
				
			|||||||
import java.util.Comparator;
 | 
					import java.util.Comparator;
 | 
				
			||||||
import java.util.HashSet;
 | 
					import java.util.HashSet;
 | 
				
			||||||
import java.util.Iterator;
 | 
					import java.util.Iterator;
 | 
				
			||||||
 | 
					import java.util.LinkedHashSet;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
import java.util.TimeZone;
 | 
					import java.util.TimeZone;
 | 
				
			||||||
@@ -558,24 +563,7 @@ public class MergeUtil {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final StringBuilder msgbuf = new StringBuilder();
 | 
					    StringBuilder msgbuf = new StringBuilder().append(summarize(rw, merged));
 | 
				
			||||||
    if (merged.size() == 1) {
 | 
					 | 
				
			||||||
      final CodeReviewCommit c = merged.get(0);
 | 
					 | 
				
			||||||
      rw.parseBody(c);
 | 
					 | 
				
			||||||
      msgbuf.append("Merge \"");
 | 
					 | 
				
			||||||
      msgbuf.append(c.getShortMessage());
 | 
					 | 
				
			||||||
      msgbuf.append("\"");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      msgbuf.append("Merge changes ");
 | 
					 | 
				
			||||||
      for (final Iterator<CodeReviewCommit> i = merged.iterator(); i.hasNext();) {
 | 
					 | 
				
			||||||
        msgbuf.append(i.next().change.getKey().abbreviate());
 | 
					 | 
				
			||||||
        if (i.hasNext()) {
 | 
					 | 
				
			||||||
          msgbuf.append(',');
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!R_HEADS_MASTER.equals(destBranch.get())) {
 | 
					    if (!R_HEADS_MASTER.equals(destBranch.get())) {
 | 
				
			||||||
      msgbuf.append(" into ");
 | 
					      msgbuf.append(" into ");
 | 
				
			||||||
      msgbuf.append(destBranch.getShortName());
 | 
					      msgbuf.append(destBranch.getShortName());
 | 
				
			||||||
@@ -603,6 +591,39 @@ public class MergeUtil {
 | 
				
			|||||||
    return (CodeReviewCommit) rw.parseCommit(commit(inserter, mergeCommit));
 | 
					    return (CodeReviewCommit) rw.parseCommit(commit(inserter, mergeCommit));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private String summarize(RevWalk rw, List<CodeReviewCommit> merged)
 | 
				
			||||||
 | 
					      throws IOException {
 | 
				
			||||||
 | 
					    if (merged.size() == 1) {
 | 
				
			||||||
 | 
					      CodeReviewCommit c = merged.get(0);
 | 
				
			||||||
 | 
					      rw.parseBody(c);
 | 
				
			||||||
 | 
					      return String.format("Merge \"%s\"", c.getShortMessage());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LinkedHashSet<String> topics = new LinkedHashSet<>(4);
 | 
				
			||||||
 | 
					    for (CodeReviewCommit c : merged) {
 | 
				
			||||||
 | 
					      if (!Strings.isNullOrEmpty(c.change.getTopic())) {
 | 
				
			||||||
 | 
					        topics.add(c.change.getTopic());
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (topics.size() == 1) {
 | 
				
			||||||
 | 
					      return String.format("Merge topic '%s'", Iterables.getFirst(topics, null));
 | 
				
			||||||
 | 
					    } else if (topics.size() > 1) {
 | 
				
			||||||
 | 
					      return String.format("Merge topics '%s'", Joiner.on("', '").join(topics));
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return String.format("Merge changes %s%s",
 | 
				
			||||||
 | 
					          Joiner.on(',').join(Iterables.transform(
 | 
				
			||||||
 | 
					              Iterables.limit(merged, 5),
 | 
				
			||||||
 | 
					              new Function<CodeReviewCommit, String>() {
 | 
				
			||||||
 | 
					                @Override
 | 
				
			||||||
 | 
					                public String apply(CodeReviewCommit in) {
 | 
				
			||||||
 | 
					                  return in.change.getKey().abbreviate();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					              })),
 | 
				
			||||||
 | 
					          merged.size() > 5 ? ", ..." : "");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public ThreeWayMerger newThreeWayMerger(final Repository repo,
 | 
					  public ThreeWayMerger newThreeWayMerger(final Repository repo,
 | 
				
			||||||
      final ObjectInserter inserter) {
 | 
					      final ObjectInserter inserter) {
 | 
				
			||||||
    return newThreeWayMerger(repo, inserter,
 | 
					    return newThreeWayMerger(repo, inserter,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user