Make the merge commit message more detailed when merging changes

We now format a message more like what "git merge" would say, when
merge.summary is true.

Bug: GERRIT-69
Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
Shawn O. Pearce
2009-03-24 17:58:38 -07:00
parent 4344278e68
commit 6d3246dece

View File

@@ -79,6 +79,8 @@ import javax.mail.MessagingException;
public class MergeOp {
private static final Logger log =
LoggerFactory.getLogger(MergeOp.class);
private static final String R_HEADS_MASTER =
Constants.R_HEADS + Constants.MASTER;
private final GerritServer server;
private final PersonIdent myIdent;
@@ -143,6 +145,7 @@ public class MergeOp {
}
};
rw.sort(RevSort.TOPO);
rw.sort(RevSort.COMMIT_TIME_DESC, true);
}
private void openBranch() throws MergeException {
@@ -328,12 +331,60 @@ public class MergeOp {
private void writeMergeCommit(final Merger m, final CodeReviewCommit n)
throws IOException, MissingObjectException, IncorrectObjectTypeException {
final List<CodeReviewCommit> merged = new ArrayList<CodeReviewCommit>();
rw.reset();
rw.markStart(n);
rw.markUninteresting(mergeTip);
for (final RevCommit c : rw) {
final CodeReviewCommit crc = (CodeReviewCommit)c;
if(crc.patchsetId!=null){
merged.add(crc);}
}
final StringBuilder msgbuf = new StringBuilder();
if (merged.size() == 1) {
final CodeReviewCommit c = merged.get(0);
final Change.Id changeId = c.patchsetId.getParentKey();
msgbuf.append("Merge change ");
msgbuf.append(changeId);
} else {
final ArrayList<CodeReviewCommit> o;
o = new ArrayList<CodeReviewCommit>(merged);
Collections.sort(o, new Comparator<CodeReviewCommit>() {
public int compare(final CodeReviewCommit a, final CodeReviewCommit b) {
final Change.Id aId = a.patchsetId.getParentKey();
final Change.Id bId = b.patchsetId.getParentKey();
return aId.get() - bId.get();
}
});
msgbuf.append("Merge changes ");
for (final Iterator<CodeReviewCommit> i = o.iterator(); i.hasNext();) {
final Change.Id id = i.next().patchsetId.getParentKey();
msgbuf.append(id);
if (i.hasNext()) {
msgbuf.append(',');
}
}
}
if (!R_HEADS_MASTER.equals(destBranch.get())) {
msgbuf.append(" into ");
msgbuf.append(destBranch.getShortName());
}
msgbuf.append("\n\n* changes:\n");
for (final CodeReviewCommit c : merged) {
msgbuf.append(" ");
msgbuf.append(c.getShortMessage());
msgbuf.append("\n");
}
final Commit mergeCommit = new Commit(db);
mergeCommit.setTreeId(m.getResultTreeId());
mergeCommit.setParentIds(new ObjectId[] {mergeTip, n});
mergeCommit.setAuthor(myIdent);
mergeCommit.setCommitter(mergeCommit.getAuthor());
mergeCommit.setMessage("Merge");
mergeCommit.setMessage(msgbuf.toString());
final ObjectId id = m.getObjectWriter().writeCommit(mergeCommit);
mergeTip = (CodeReviewCommit) rw.parseCommit(id);