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:
@@ -79,6 +79,8 @@ import javax.mail.MessagingException;
|
|||||||
public class MergeOp {
|
public class MergeOp {
|
||||||
private static final Logger log =
|
private static final Logger log =
|
||||||
LoggerFactory.getLogger(MergeOp.class);
|
LoggerFactory.getLogger(MergeOp.class);
|
||||||
|
private static final String R_HEADS_MASTER =
|
||||||
|
Constants.R_HEADS + Constants.MASTER;
|
||||||
|
|
||||||
private final GerritServer server;
|
private final GerritServer server;
|
||||||
private final PersonIdent myIdent;
|
private final PersonIdent myIdent;
|
||||||
@@ -143,6 +145,7 @@ public class MergeOp {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
rw.sort(RevSort.TOPO);
|
rw.sort(RevSort.TOPO);
|
||||||
|
rw.sort(RevSort.COMMIT_TIME_DESC, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openBranch() throws MergeException {
|
private void openBranch() throws MergeException {
|
||||||
@@ -328,12 +331,60 @@ public class MergeOp {
|
|||||||
|
|
||||||
private void writeMergeCommit(final Merger m, final CodeReviewCommit n)
|
private void writeMergeCommit(final Merger m, final CodeReviewCommit n)
|
||||||
throws IOException, MissingObjectException, IncorrectObjectTypeException {
|
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);
|
final Commit mergeCommit = new Commit(db);
|
||||||
mergeCommit.setTreeId(m.getResultTreeId());
|
mergeCommit.setTreeId(m.getResultTreeId());
|
||||||
mergeCommit.setParentIds(new ObjectId[] {mergeTip, n});
|
mergeCommit.setParentIds(new ObjectId[] {mergeTip, n});
|
||||||
mergeCommit.setAuthor(myIdent);
|
mergeCommit.setAuthor(myIdent);
|
||||||
mergeCommit.setCommitter(mergeCommit.getAuthor());
|
mergeCommit.setCommitter(mergeCommit.getAuthor());
|
||||||
mergeCommit.setMessage("Merge");
|
mergeCommit.setMessage(msgbuf.toString());
|
||||||
|
|
||||||
final ObjectId id = m.getObjectWriter().writeCommit(mergeCommit);
|
final ObjectId id = m.getObjectWriter().writeCommit(mergeCommit);
|
||||||
mergeTip = (CodeReviewCommit) rw.parseCommit(id);
|
mergeTip = (CodeReviewCommit) rw.parseCommit(id);
|
||||||
|
Reference in New Issue
Block a user