diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/ConsistencyCheckerIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/ConsistencyCheckerIT.java index 5839ae7ea0..d391834e7b 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/ConsistencyCheckerIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/ConsistencyCheckerIT.java @@ -585,6 +585,7 @@ public class ConsistencyCheckerIT extends AbstractDaemonTest { ChangeUpdate u = changeUpdateFactory.create( changeControlFactory.controlFor(c, userFactory.create(adminId))); + u.setSubject(c.getSubject()); u.setBranch(c.getDest().get()); u.commit(); diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java index 1482b11f4d..c954181083 100644 --- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java +++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java @@ -563,10 +563,18 @@ public final class Change { return subject; } + public void setSubject(String subject) { + this.subject = subject; + } + public String getOriginalSubject() { return originalSubject != null ? originalSubject : subject; } + public void setOriginalSubject(String originalSubject) { + this.originalSubject = originalSubject; + } + /** Get the id of the most current {@link PatchSet} in this change. */ public PatchSet.Id currentPatchSetId() { if (currentPatchSetId > 0) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/PatchSetUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/PatchSetUtil.java index 935aca32a1..4f5b3a1de2 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/PatchSetUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/PatchSetUtil.java @@ -28,7 +28,7 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; -import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.revwalk.RevCommit; import java.sql.Timestamp; import java.util.Collections; @@ -61,7 +61,7 @@ public class PatchSetUtil { } public PatchSet insert(ReviewDb db, ChangeUpdate update, PatchSet.Id psId, - ObjectId id, boolean draft, Iterable groups, + RevCommit commit, boolean draft, Iterable groups, String pushCertificate) throws OrmException { Change.Id changeId = update.getChange().getId(); checkArgument(psId.getParentKey().equals(changeId), @@ -75,7 +75,7 @@ public class PatchSetUtil { } PatchSet ps = new PatchSet(psId); - ps.setRevision(new RevId(id.name())); + ps.setRevision(new RevId(commit.name())); ps.setUploader(update.getUser().getAccountId()); ps.setCreatedOn(new Timestamp(update.getWhen().getTime())); ps.setDraft(draft); @@ -83,6 +83,10 @@ public class PatchSetUtil { ps.setPushCertificate(pushCertificate); db.patchSets().insert(Collections.singleton(ps)); + if (!update.getChange().getSubject().equals(commit.getShortMessage())) { + update.setSubject(commit.getShortMessage()); + } + if (migration.writeChanges()) { // TODO(dborowitz): Write to notedb. } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java index ad7d607959..e2cdf574b7 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java @@ -296,7 +296,8 @@ public class ChangeInserter extends BatchUpdate.InsertChangeOp { ctx.getChange().setCurrentPatchSet(patchSetInfo); ChangeUpdate update = ctx.getUpdate(psId); - update.setSubject("Create change"); + update.setSubjectForCommit("Create change"); + update.setSubject(change.getSubject()); update.setBranch(change.getDest().get()); update.setTopic(change.getTopic()); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java index d99eec7aa1..82c181c42a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java @@ -210,7 +210,7 @@ public class PatchSetInserter extends BatchUpdate.Op { change = ctx.getChange(); ChangeUpdate update = ctx.getUpdate(psId); - update.setSubject("Create patch set " + psId.get()); + update.setSubjectForCommit("Create patch set " + psId.get()); if (!change.getStatus().isOpen() && !allowClosed) { throw new InvalidChangeOperationException(String.format( @@ -222,6 +222,7 @@ public class PatchSetInserter extends BatchUpdate.Op { PatchSet prevPs = psUtil.current(ctx.getDb(), ctx.getNotes()); newGroups = prevPs != null ? prevPs.getGroups() : null; } + ctx.getRevWalk().parseBody(commit); patchSet = psUtil.insert(ctx.getDb(), ctx.getUpdate(psId), psId, commit, draft, newGroups, null); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java index 386e7ed141..9c2fb553b9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java @@ -2241,7 +2241,7 @@ public class ReceiveCommits { Map approvals = new HashMap<>(); ChangeUpdate update = updateFactory.create(changeCtl, createdOn); - update.setSubject("Create patch set " + psId.get()); + update.setSubjectForCommit("Create patch set " + psId.get()); update.setPatchSetId(psId); if (magicBranch != null) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java index 672b204004..4c26710e40 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNoteUtil.java @@ -33,6 +33,7 @@ public class ChangeNoteUtil { static final FooterKey FOOTER_LABEL = new FooterKey("Label"); static final FooterKey FOOTER_PATCH_SET = new FooterKey("Patch-set"); static final FooterKey FOOTER_STATUS = new FooterKey("Status"); + static final FooterKey FOOTER_SUBJECT = new FooterKey("Subject"); static final FooterKey FOOTER_SUBMISSION_ID = new FooterKey("Submission-id"); static final FooterKey FOOTER_SUBMITTED_WITH = new FooterKey("Submitted-with"); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java index aa5545d515..59499e0905 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java @@ -266,6 +266,8 @@ public class ChangeNotes extends AbstractChangeNotes { allChangeMessages = parser.buildAllMessages(); comments = ImmutableListMultimap.copyOf(parser.comments); noteMap = parser.commentNoteMap; + change.setOriginalSubject(parser.originalSubject); + change.setSubject(parser.subject); change.setDest(new Branch.NameKey(getProjectName(), parser.branch)); change.setTopic(Strings.emptyToNull(parser.topic)); change.setCreatedOn(parser.createdOn); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java index 8cb5618a20..ca31828962 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java @@ -19,6 +19,7 @@ import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_HASHTAGS; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_LABEL; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_PATCH_SET; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_STATUS; +import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_SUBJECT; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_SUBMISSION_ID; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_SUBMITTED_WITH; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_TOPIC; @@ -91,6 +92,8 @@ class ChangeNotesParser implements AutoCloseable { Timestamp createdOn; Timestamp lastUpdatedOn; Account.Id ownerId; + String subject; + String originalSubject; String submissionId; private final Change.Id changeId; @@ -177,6 +180,10 @@ class ChangeNotesParser implements AutoCloseable { PatchSet.Id psId = parsePatchSetId(commit); Account.Id accountId = parseIdent(commit); ownerId = accountId; + if (subject == null) { + subject = parseSubject(commit); + } + originalSubject = parseSubject(commit); parseChangeMessage(psId, accountId, commit); if (topic == null) { topic = parseTopic(commit); @@ -205,35 +212,31 @@ class ChangeNotesParser implements AutoCloseable { private String parseSubmissionId(RevCommit commit) throws ConfigInvalidException { - List submissionIdLines = commit.getFooterLines(FOOTER_SUBMISSION_ID); - if (submissionIdLines.isEmpty()) { - return null; - } else if (submissionIdLines.size() > 1) { - throw expectedOneFooter(FOOTER_SUBMISSION_ID, submissionIdLines); - } - return submissionIdLines.get(0); + return parseOneFooter(commit, FOOTER_SUBMISSION_ID); } - private String parseBranch(RevCommit commit) - throws ConfigInvalidException { - List branchLines = commit.getFooterLines(FOOTER_BRANCH); - if (branchLines.isEmpty()) { - return null; - } else if (branchLines.size() > 1) { - throw expectedOneFooter(FOOTER_BRANCH, branchLines); - } - return RefNames.fullName(branchLines.get(0)); + private String parseBranch(RevCommit commit) throws ConfigInvalidException { + String branch = parseOneFooter(commit, FOOTER_BRANCH); + return branch != null ? RefNames.fullName(branch) : null; } - private String parseTopic(RevCommit commit) + private String parseSubject(RevCommit commit) throws ConfigInvalidException { + return parseOneFooter(commit, FOOTER_SUBJECT); + } + + private String parseTopic(RevCommit commit) throws ConfigInvalidException { + return parseOneFooter(commit, FOOTER_TOPIC); + } + + private String parseOneFooter(RevCommit commit, FooterKey footerKey) throws ConfigInvalidException { - List topicLines = commit.getFooterLines(FOOTER_TOPIC); - if (topicLines.isEmpty()) { + List footerLines = commit.getFooterLines(footerKey); + if (footerLines.isEmpty()) { return null; - } else if (topicLines.size() > 1) { - throw expectedOneFooter(FOOTER_TOPIC, topicLines); + } else if (footerLines.size() > 1) { + throw expectedOneFooter(footerKey, footerLines); } - return topicLines.get(0); + return footerLines.get(0); } private void parseHashtags(RevCommit commit) throws ConfigInvalidException { @@ -545,6 +548,9 @@ class ChangeNotesParser implements AutoCloseable { if (branch == null) { missing.add(FOOTER_BRANCH); } + if (originalSubject == null || subject == null) { + missing.add(FOOTER_SUBJECT); + } if (!missing.isEmpty()) { throw parseException("Missing footers: " + Joiner.on(", ") .join(Lists.transform(missing, new Function() { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeRebuilder.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeRebuilder.java index 15602ee4ef..2177e28a84 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeRebuilder.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeRebuilder.java @@ -318,11 +318,12 @@ public class ChangeRebuilder { @Override void apply(ChangeUpdate update) { checkUpdate(update); + update.setSubject(change.getSubject()); if (ps.getPatchSetId() == 1) { - update.setSubject("Create change"); + update.setSubjectForCommit("Create change"); update.setBranch(change.getDest().get()); } else { - update.setSubject("Create patch set " + ps.getPatchSetId()); + update.setSubjectForCommit("Create patch set " + ps.getPatchSetId()); } } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeUpdate.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeUpdate.java index 449c3ba682..bea3bce3c5 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeUpdate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeUpdate.java @@ -20,6 +20,7 @@ import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_HASHTAGS; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_LABEL; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_PATCH_SET; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_STATUS; +import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_SUBJECT; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_SUBMISSION_ID; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_SUBMITTED_WITH; import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_TOPIC; @@ -93,11 +94,12 @@ public class ChangeUpdate extends AbstractChangeUpdate { } private final AccountCache accountCache; + private String commitSubject; + private String subject; private final Table> approvals; private final Map reviewers; private String branch; private Change.Status status; - private String subject; private List submitRecords; private String submissionId; private final CommentsInNotesUtil commentsUtil; @@ -219,6 +221,10 @@ public class ChangeUpdate extends AbstractChangeUpdate { "no submit records specified at submit time"); } + public void setSubjectForCommit(String commitSubject) { + this.commitSubject = commitSubject; + } + public void setSubject(String subject) { this.subject = subject; } @@ -435,8 +441,8 @@ public class ChangeUpdate extends AbstractChangeUpdate { int ps = psId != null ? psId.get() : getChange().currentPatchSetId().get(); StringBuilder msg = new StringBuilder(); - if (subject != null) { - msg.append(subject); + if (commitSubject != null) { + msg.append(commitSubject); } else { msg.append("Update patch set ").append(ps); } @@ -450,6 +456,10 @@ public class ChangeUpdate extends AbstractChangeUpdate { addFooter(msg, FOOTER_PATCH_SET, ps); + if (subject != null) { + addFooter(msg, FOOTER_SUBJECT, subject); + } + if (branch != null) { addFooter(msg, FOOTER_BRANCH, branch); } @@ -526,7 +536,8 @@ public class ChangeUpdate extends AbstractChangeUpdate { } private boolean isEmpty() { - return approvals.isEmpty() + return commitSubject == null + && approvals.isEmpty() && changeMessage == null && comments.isEmpty() && reviewers.isEmpty() diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/change/CommentsTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/change/CommentsTest.java index 699dc6e0e1..f373f07113 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/change/CommentsTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/change/CommentsTest.java @@ -322,6 +322,7 @@ public class CommentsTest extends GerritServerTests { private Change newChange() throws Exception { Change c = TestChanges.newChange(project, changeOwner.getAccountId()); ChangeUpdate u = newUpdate(c, changeOwner); + u.setSubject(c.getSubject()); u.setBranch(c.getDest().get()); u.commit(); return c; diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/AbstractChangeNotesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/AbstractChangeNotesTest.java index 0d19ba9b7e..c17d8fa730 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/AbstractChangeNotesTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/AbstractChangeNotesTest.java @@ -166,6 +166,7 @@ public class AbstractChangeNotesTest extends GerritBaseTests { throws IOException, OrmException, ConfigInvalidException { Change c = TestChanges.newChange(project, changeOwner.getAccountId()); ChangeUpdate u = newUpdate(c, changeOwner); + u.setSubject(c.getSubject()); u.setBranch(c.getDest().get()); u.commit(); return c; diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesParserTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesParserTest.java index 1dce91c695..32b8179eed 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesParserTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesParserTest.java @@ -51,7 +51,8 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { assertParseSucceeds("Update change\n" + "\n" + "Branch: refs/heads/master\n" - + "Patch-Set: 1\n"); + + "Patch-Set: 1\n" + + "Subject: This is a test change\n"); assertParseFails(writeCommit("Update change\n" + "\n" + "Patch-Set: 1\n", @@ -70,12 +71,14 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { + "\n" + "Branch: refs/heads/master\n" + "Patch-Set: 1\n" - + "Status: NEW\n"); + + "Status: NEW\n" + + "Subject: This is a test change\n"); assertParseSucceeds("Update change\n" + "\n" + "Branch: refs/heads/master\n" + "Patch-Set: 1\n" - + "Status: new\n"); + + "Status: new\n" + + "Subject: This is a test change\n"); assertParseFails("Update change\n" + "\n" + "Patch-Set: 1\n" @@ -92,7 +95,8 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { assertParseSucceeds("Update change\n" + "\n" + "Branch: refs/heads/master\n" - + "Patch-Set: 1\n"); + + "Patch-Set: 1\n" + + "Subject: This is a test change\n"); assertParseFails("Update change\n" + "\n"); assertParseFails("Update change\n" @@ -102,7 +106,8 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { assertParseSucceeds("Update change\n" + "\n" + "Branch: refs/heads/master\n" - + "Patch-Set: 1\n"); + + "Patch-Set: 1\n" + + "Subject: This is a test change\n"); assertParseFails("Update change\n" + "\n" + "Patch-Set: x\n"); @@ -117,13 +122,15 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { + "Label: Label1=+1\n" + "Label: Label2=1\n" + "Label: Label3=0\n" - + "Label: Label4=-1\n"); + + "Label: Label4=-1\n" + + "Subject: This is a test change\n"); assertParseSucceeds("Update change\n" + "\n" + "Branch: refs/heads/master\n" + "Patch-Set: 1\n" + "Label: -Label1\n" - + "Label: -Label1 Other Account <2@gerrit>\n"); + + "Label: -Label1 Other Account <2@gerrit>\n" + + "Subject: This is a test change\n"); assertParseFails("Update change\n" + "\n" + "Patch-Set: 1\n" @@ -156,6 +163,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { + "\n" + "Branch: refs/heads/master\n" + "Patch-Set: 1\n" + + "Subject: This is a test change\n" + "Submitted-with: NOT_READY\n" + "Submitted-with: OK: Verified: Change Owner <1@gerrit>\n" + "Submitted-with: NEED: Code-Review\n" @@ -186,6 +194,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { + "\n" + "Branch: refs/heads/master\n" + "Patch-Set: 1\n" + + "Subject: This is a test change\n" + "Submission-id: 1-1453387607626-96fabc25"); assertParseFails("Update change\n" + "\n" @@ -201,7 +210,8 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { + "Branch: refs/heads/master\n" + "Patch-Set: 1\n" + "Reviewer: Change Owner <1@gerrit>\n" - + "CC: Other Account <2@gerrit>\n"); + + "CC: Other Account <2@gerrit>\n" + + "Subject: This is a test change\n"); assertParseFails("Update change\n" + "\n" + "Patch-Set: 1\n" @@ -214,12 +224,14 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { + "\n" + "Branch: refs/heads/master\n" + "Patch-Set: 1\n" - + "Topic: Some Topic"); + + "Topic: Some Topic\n" + + "Subject: This is a test change\n"); assertParseSucceeds("Update change\n" + "\n" + "Branch: refs/heads/master\n" + "Patch-Set: 1\n" - + "Topic:"); + + "Topic:\n" + + "Subject: This is a test change\n"); assertParseFails("Update change\n" + "\n" + "Patch-Set: 1\n" @@ -232,11 +244,13 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { assertParseSucceeds("Update change\n" + "\n" + "Branch: refs/heads/master\n" - + "Patch-Set: 1"); + + "Patch-Set: 1\n" + + "Subject: This is a test change\n"); assertParseSucceeds("Update change\n" + "\n" + "Branch: master\n" - + "Patch-Set: 1"); + + "Patch-Set: 1\n" + + "Subject: This is a test change\n"); assertParseFails("Update change\n" + "\n" + "Patch-Set: 1\n" @@ -244,6 +258,20 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest { + "Branch: refs/heads/stable"); } + @Test + public void parseSubject() throws Exception { + assertParseSucceeds("Update change\n" + + "\n" + + "Patch-Set: 1\n" + + "Branch: refs/heads/master\n" + + "Subject: Some subject of a change\n"); + assertParseFails("Update change\n" + + "\n" + + "Patch-Set: 1\n" + + "Subject: Some subject of a change\n" + + "Subject: Some other subject\n"); + } + private RevCommit writeCommit(String body) throws Exception { return writeCommit(body, ChangeNoteUtil.newIdent( changeOwner.getAccount(), TimeUtil.nowTs(), serverIdent, diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java index 20d55bd7e2..60df952443 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java @@ -350,7 +350,7 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { public void submitRecords() throws Exception { Change c = newChange(); ChangeUpdate update = newUpdate(c, changeOwner); - update.setSubject("Submit patch set 1"); + update.setSubjectForCommit("Submit patch set 1"); update.merge("1-1453387607626-96fabc25", ImmutableList.of( submitRecord("NOT_READY", null, @@ -380,7 +380,7 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { public void latestSubmitRecordsOnly() throws Exception { Change c = newChange(); ChangeUpdate update = newUpdate(c, changeOwner); - update.setSubject("Submit patch set 1"); + update.setSubjectForCommit("Submit patch set 1"); update.merge("1-1453387607626-96fabc25", ImmutableList.of( submitRecord("OK", null, submitLabel("Code-Review", "OK", otherUser.getAccountId())))); @@ -388,7 +388,7 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { incrementPatchSet(c); update = newUpdate(c, changeOwner); - update.setSubject("Submit patch set 2"); + update.setSubjectForCommit("Submit patch set 2"); update.merge("1-1453387901516-5d1e2450", ImmutableList.of( submitRecord("OK", null, submitLabel("Code-Review", "OK", changeOwner.getAccountId())))); @@ -511,6 +511,32 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { new Branch.NameKey(project, otherBranch)); } + @Test + public void subjectChangeNotes() throws Exception { + Change c = newChange(); + + ChangeNotes notes = newNotes(c); + assertThat(notes.getChange().getSubject()).isEqualTo(c.getSubject()); + assertThat(notes.getChange().getOriginalSubject()).isEqualTo(c.getSubject()); + + // An unrelated update doesn't affect the subject + ChangeUpdate update = newUpdate(c, changeOwner); + update.setTopic("topic"); // Change something to get a new commit. + update.commit(); + notes = newNotes(c); + assertThat(notes.getChange().getSubject()).isEqualTo(c.getSubject()); + assertThat(notes.getChange().getOriginalSubject()).isEqualTo(c.getSubject()); + + // An update of the subject doesn't affect the original subject + update = newUpdate(c, changeOwner); + String newSubject = "other subject"; + update.setSubject(newSubject); + update.commit(); + notes = newNotes(c); + assertThat(notes.getChange().getSubject()).isEqualTo(newSubject); + assertThat(notes.getChange().getOriginalSubject()).isEqualTo(c.getSubject()); + } + @Test public void ownerChangeNotes() throws Exception { Change c = newChange(); @@ -560,7 +586,7 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { @Test public void emptyExceptSubject() throws Exception { ChangeUpdate update = newUpdate(newChange(), changeOwner); - update.setSubject("Create change"); + update.setSubjectForCommit("Create change"); update.commit(); assertThat(update.getRevision()).isNotNull(); } diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/CommitMessageOutputTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/CommitMessageOutputTest.java index 0e2d2d6dd4..9c26187715 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/CommitMessageOutputTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/CommitMessageOutputTest.java @@ -106,7 +106,7 @@ public class CommitMessageOutputTest extends AbstractChangeNotesTest { public void submitCommitFormat() throws Exception { Change c = newChange(); ChangeUpdate update = newUpdate(c, changeOwner); - update.setSubject("Submit patch set 1"); + update.setSubjectForCommit("Submit patch set 1"); update.merge("1-1453387607626-96fabc25", ImmutableList.of( submitRecord("NOT_READY", null, @@ -172,7 +172,7 @@ public class CommitMessageOutputTest extends AbstractChangeNotesTest { public void submitWithErrorMessage() throws Exception { Change c = newChange(); ChangeUpdate update = newUpdate(c, changeOwner); - update.setSubject("Submit patch set 1"); + update.setSubjectForCommit("Submit patch set 1"); update.merge("1-1453387607626-96fabc25", ImmutableList.of( submitRecord("RULE_ERROR", "Problem with patch set:\n1")));