Store Change-Id in notedb
This adds a 'Change-id' footer to the commit message of the refs/changes/XX/YYYY/meta notes branch when the change is created. Tests which manually insert new changes must be adapted so that the initial commit to the notes branch contains the Change-Id info. Change-Id: I4a8fde3da5458afab69b39230a6db117fbef8ab9 Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
@@ -589,6 +589,7 @@ public class ConsistencyCheckerIT extends AbstractDaemonTest {
|
|||||||
ChangeUpdate u = changeUpdateFactory.create(
|
ChangeUpdate u = changeUpdateFactory.create(
|
||||||
changeControlFactory.controlFor(c, userFactory.create(adminId)));
|
changeControlFactory.controlFor(c, userFactory.create(adminId)));
|
||||||
u.setBranch(c.getDest().get());
|
u.setBranch(c.getDest().get());
|
||||||
|
u.setChangeId(c.getKey().get());
|
||||||
u.commit();
|
u.commit();
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
|
|||||||
@@ -296,6 +296,7 @@ public class ChangeInserter extends BatchUpdate.InsertChangeOp {
|
|||||||
ctx.getChange().setCurrentPatchSet(patchSetInfo);
|
ctx.getChange().setCurrentPatchSet(patchSetInfo);
|
||||||
|
|
||||||
ChangeUpdate update = ctx.getUpdate(psId);
|
ChangeUpdate update = ctx.getUpdate(psId);
|
||||||
|
update.setChangeId(change.getKey().get());
|
||||||
update.setSubjectForCommit("Create change");
|
update.setSubjectForCommit("Create change");
|
||||||
update.setBranch(change.getDest().get());
|
update.setBranch(change.getDest().get());
|
||||||
update.setTopic(change.getTopic());
|
update.setTopic(change.getTopic());
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public class ChangeNoteUtil {
|
|||||||
static final String GERRIT_PLACEHOLDER_HOST = "gerrit";
|
static final String GERRIT_PLACEHOLDER_HOST = "gerrit";
|
||||||
|
|
||||||
static final FooterKey FOOTER_BRANCH = new FooterKey("Branch");
|
static final FooterKey FOOTER_BRANCH = new FooterKey("Branch");
|
||||||
|
static final FooterKey FOOTER_CHANGE_ID = new FooterKey("Change-id");
|
||||||
static final FooterKey FOOTER_COMMIT = new FooterKey("Commit");
|
static final FooterKey FOOTER_COMMIT = new FooterKey("Commit");
|
||||||
static final FooterKey FOOTER_GROUPS = new FooterKey("Groups");
|
static final FooterKey FOOTER_GROUPS = new FooterKey("Groups");
|
||||||
static final FooterKey FOOTER_HASHTAGS = new FooterKey("Hashtags");
|
static final FooterKey FOOTER_HASHTAGS = new FooterKey("Hashtags");
|
||||||
|
|||||||
@@ -290,6 +290,7 @@ public class ChangeNotes extends AbstractChangeNotes<ChangeNotes> {
|
|||||||
comments = ImmutableListMultimap.copyOf(parser.comments);
|
comments = ImmutableListMultimap.copyOf(parser.comments);
|
||||||
noteMap = parser.noteMap;
|
noteMap = parser.noteMap;
|
||||||
revisionNotes = parser.revisionNotes;
|
revisionNotes = parser.revisionNotes;
|
||||||
|
change.setKey(new Change.Key(parser.changeId));
|
||||||
change.setDest(new Branch.NameKey(getProjectName(), parser.branch));
|
change.setDest(new Branch.NameKey(getProjectName(), parser.branch));
|
||||||
change.setTopic(Strings.emptyToNull(parser.topic));
|
change.setTopic(Strings.emptyToNull(parser.topic));
|
||||||
change.setCreatedOn(parser.createdOn);
|
change.setCreatedOn(parser.createdOn);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
package com.google.gerrit.server.notedb;
|
package com.google.gerrit.server.notedb;
|
||||||
|
|
||||||
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_BRANCH;
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_BRANCH;
|
||||||
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_CHANGE_ID;
|
||||||
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_COMMIT;
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_COMMIT;
|
||||||
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_GROUPS;
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_GROUPS;
|
||||||
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_HASHTAGS;
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_HASHTAGS;
|
||||||
@@ -108,13 +109,14 @@ class ChangeNotesParser implements AutoCloseable {
|
|||||||
Timestamp createdOn;
|
Timestamp createdOn;
|
||||||
Timestamp lastUpdatedOn;
|
Timestamp lastUpdatedOn;
|
||||||
Account.Id ownerId;
|
Account.Id ownerId;
|
||||||
|
String changeId;
|
||||||
String subject;
|
String subject;
|
||||||
String originalSubject;
|
String originalSubject;
|
||||||
String submissionId;
|
String submissionId;
|
||||||
PatchSet.Id currentPatchSetId;
|
PatchSet.Id currentPatchSetId;
|
||||||
NoteMap noteMap;
|
NoteMap noteMap;
|
||||||
|
|
||||||
private final Change.Id changeId;
|
private final Change.Id id;
|
||||||
private final ObjectId tip;
|
private final ObjectId tip;
|
||||||
private final RevWalk walk;
|
private final RevWalk walk;
|
||||||
private final Repository repo;
|
private final Repository repo;
|
||||||
@@ -126,7 +128,7 @@ class ChangeNotesParser implements AutoCloseable {
|
|||||||
ChangeNotesParser(Change change, ObjectId tip, RevWalk walk,
|
ChangeNotesParser(Change change, ObjectId tip, RevWalk walk,
|
||||||
GitRepositoryManager repoManager)
|
GitRepositoryManager repoManager)
|
||||||
throws RepositoryNotFoundException, IOException {
|
throws RepositoryNotFoundException, IOException {
|
||||||
this.changeId = change.getId();
|
this.id = change.getId();
|
||||||
this.tip = tip;
|
this.tip = tip;
|
||||||
this.walk = walk;
|
this.walk = walk;
|
||||||
this.repo = repoManager.openMetadataRepository(change.getProject());
|
this.repo = repoManager.openMetadataRepository(change.getProject());
|
||||||
@@ -216,6 +218,10 @@ class ChangeNotesParser implements AutoCloseable {
|
|||||||
Account.Id accountId = parseIdent(commit);
|
Account.Id accountId = parseIdent(commit);
|
||||||
ownerId = accountId;
|
ownerId = accountId;
|
||||||
|
|
||||||
|
if (changeId == null) {
|
||||||
|
changeId = parseChangeId(commit);
|
||||||
|
}
|
||||||
|
|
||||||
String currSubject = parseSubject(commit);
|
String currSubject = parseSubject(commit);
|
||||||
if (currSubject != null) {
|
if (currSubject != null) {
|
||||||
if (subject == null) {
|
if (subject == null) {
|
||||||
@@ -267,6 +273,10 @@ class ChangeNotesParser implements AutoCloseable {
|
|||||||
return branch != null ? RefNames.fullName(branch) : null;
|
return branch != null ? RefNames.fullName(branch) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String parseChangeId(RevCommit commit) throws ConfigInvalidException {
|
||||||
|
return parseOneFooter(commit, FOOTER_CHANGE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
private String parseSubject(RevCommit commit) throws ConfigInvalidException {
|
private String parseSubject(RevCommit commit) throws ConfigInvalidException {
|
||||||
return parseOneFooter(commit, FOOTER_SUBJECT);
|
return parseOneFooter(commit, FOOTER_SUBJECT);
|
||||||
}
|
}
|
||||||
@@ -386,7 +396,7 @@ class ChangeNotesParser implements AutoCloseable {
|
|||||||
if (psId == null) {
|
if (psId == null) {
|
||||||
throw invalidFooter(FOOTER_PATCH_SET, psIdStr);
|
throw invalidFooter(FOOTER_PATCH_SET, psIdStr);
|
||||||
}
|
}
|
||||||
return new PatchSet.Id(changeId, psId);
|
return new PatchSet.Id(id, psId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private PatchSetState parsePatchSetState(RevCommit commit)
|
private PatchSetState parsePatchSetState(RevCommit commit)
|
||||||
@@ -472,7 +482,7 @@ class ChangeNotesParser implements AutoCloseable {
|
|||||||
noteMap = NoteMap.read(reader, tipCommit);
|
noteMap = NoteMap.read(reader, tipCommit);
|
||||||
|
|
||||||
for (Note note : noteMap) {
|
for (Note note : noteMap) {
|
||||||
RevisionNote rn = new RevisionNote(changeId, reader, note.getData());
|
RevisionNote rn = new RevisionNote(id, reader, note.getData());
|
||||||
RevId revId = new RevId(note.name());
|
RevId revId = new RevId(note.name());
|
||||||
revisionNotes.put(revId, rn);
|
revisionNotes.put(revId, rn);
|
||||||
for (PatchLineComment plc : rn.comments) {
|
for (PatchLineComment plc : rn.comments) {
|
||||||
@@ -743,6 +753,9 @@ class ChangeNotesParser implements AutoCloseable {
|
|||||||
if (branch == null) {
|
if (branch == null) {
|
||||||
missing.add(FOOTER_BRANCH);
|
missing.add(FOOTER_BRANCH);
|
||||||
}
|
}
|
||||||
|
if (changeId == null) {
|
||||||
|
missing.add(FOOTER_CHANGE_ID);
|
||||||
|
}
|
||||||
if (originalSubject == null || subject == null) {
|
if (originalSubject == null || subject == null) {
|
||||||
missing.add(FOOTER_SUBJECT);
|
missing.add(FOOTER_SUBJECT);
|
||||||
}
|
}
|
||||||
@@ -776,6 +789,6 @@ class ChangeNotesParser implements AutoCloseable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ConfigInvalidException parseException(String fmt, Object... args) {
|
private ConfigInvalidException parseException(String fmt, Object... args) {
|
||||||
return ChangeNotes.parseException(changeId, fmt, args);
|
return ChangeNotes.parseException(id, fmt, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -401,11 +401,12 @@ public class ChangeRebuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void apply(ChangeUpdate update) throws IOException {
|
void apply(ChangeUpdate update) throws IOException, OrmException {
|
||||||
checkUpdate(update);
|
checkUpdate(update);
|
||||||
update.setSubject(change.getSubject());
|
update.setSubject(change.getSubject());
|
||||||
if (ps.getPatchSetId() == 1) {
|
if (ps.getPatchSetId() == 1) {
|
||||||
update.setSubjectForCommit("Create change");
|
update.setSubjectForCommit("Create change");
|
||||||
|
update.setChangeId(change.getKey().get());
|
||||||
update.setBranch(change.getDest().get());
|
update.setBranch(change.getDest().get());
|
||||||
} else {
|
} else {
|
||||||
update.setSubjectForCommit("Create patch set " + ps.getPatchSetId());
|
update.setSubjectForCommit("Create patch set " + ps.getPatchSetId());
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ package com.google.gerrit.server.notedb;
|
|||||||
import static com.google.common.base.Preconditions.checkArgument;
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
import static com.google.common.base.Preconditions.checkState;
|
import static com.google.common.base.Preconditions.checkState;
|
||||||
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_BRANCH;
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_BRANCH;
|
||||||
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_CHANGE_ID;
|
||||||
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_COMMIT;
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_COMMIT;
|
||||||
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_GROUPS;
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_GROUPS;
|
||||||
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_HASHTAGS;
|
import static com.google.gerrit.server.notedb.ChangeNoteUtil.FOOTER_HASHTAGS;
|
||||||
@@ -101,6 +102,7 @@ public class ChangeUpdate extends AbstractChangeUpdate {
|
|||||||
private String subject;
|
private String subject;
|
||||||
private final Table<String, Account.Id, Optional<Short>> approvals;
|
private final Table<String, Account.Id, Optional<Short>> approvals;
|
||||||
private final Map<Account.Id, ReviewerStateInternal> reviewers;
|
private final Map<Account.Id, ReviewerStateInternal> reviewers;
|
||||||
|
private String changeId;
|
||||||
private String branch;
|
private String branch;
|
||||||
private Change.Status status;
|
private Change.Status status;
|
||||||
private List<SubmitRecord> submitRecords;
|
private List<SubmitRecord> submitRecords;
|
||||||
@@ -190,6 +192,16 @@ public class ChangeUpdate extends AbstractChangeUpdate {
|
|||||||
this.comments = Lists.newArrayList();
|
this.comments = Lists.newArrayList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setChangeId(String changeId) throws OrmException {
|
||||||
|
if (notes == null) {
|
||||||
|
notes = getChangeNotes().load();
|
||||||
|
}
|
||||||
|
checkArgument(notes.getChange().getKey().get().equals(changeId),
|
||||||
|
"The Change-Id was already set to %s, so we cannot set this Change-Id: %s",
|
||||||
|
notes.getChange().getKey(), changeId);
|
||||||
|
this.changeId = changeId;
|
||||||
|
}
|
||||||
|
|
||||||
public void setBranch(String branch) {
|
public void setBranch(String branch) {
|
||||||
this.branch = branch;
|
this.branch = branch;
|
||||||
}
|
}
|
||||||
@@ -501,6 +513,10 @@ public class ChangeUpdate extends AbstractChangeUpdate {
|
|||||||
|
|
||||||
addPatchSetFooter(msg, ps);
|
addPatchSetFooter(msg, ps);
|
||||||
|
|
||||||
|
if (changeId != null) {
|
||||||
|
addFooter(msg, FOOTER_CHANGE_ID, changeId);
|
||||||
|
}
|
||||||
|
|
||||||
if (subject != null) {
|
if (subject != null) {
|
||||||
addFooter(msg, FOOTER_SUBJECT, subject);
|
addFooter(msg, FOOTER_SUBJECT, subject);
|
||||||
}
|
}
|
||||||
@@ -604,6 +620,7 @@ public class ChangeUpdate extends AbstractChangeUpdate {
|
|||||||
&& changeMessage == null
|
&& changeMessage == null
|
||||||
&& comments.isEmpty()
|
&& comments.isEmpty()
|
||||||
&& reviewers.isEmpty()
|
&& reviewers.isEmpty()
|
||||||
|
&& changeId == null
|
||||||
&& branch == null
|
&& branch == null
|
||||||
&& status == null
|
&& status == null
|
||||||
&& submissionId == null
|
&& submissionId == null
|
||||||
|
|||||||
@@ -322,6 +322,7 @@ public class CommentsTest extends GerritServerTests {
|
|||||||
private Change newChange() throws Exception {
|
private Change newChange() throws Exception {
|
||||||
Change c = TestChanges.newChange(project, changeOwner.getAccountId());
|
Change c = TestChanges.newChange(project, changeOwner.getAccountId());
|
||||||
ChangeUpdate u = newUpdate(c, changeOwner);
|
ChangeUpdate u = newUpdate(c, changeOwner);
|
||||||
|
u.setChangeId(c.getKey().get());
|
||||||
u.setBranch(c.getDest().get());
|
u.setBranch(c.getDest().get());
|
||||||
u.commit();
|
u.commit();
|
||||||
return c;
|
return c;
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ public class AbstractChangeNotesTest extends GerritBaseTests {
|
|||||||
protected Change newChange() throws Exception {
|
protected Change newChange() throws Exception {
|
||||||
Change c = TestChanges.newChange(project, changeOwner.getAccountId());
|
Change c = TestChanges.newChange(project, changeOwner.getAccountId());
|
||||||
ChangeUpdate u = newUpdate(c, changeOwner);
|
ChangeUpdate u = newUpdate(c, changeOwner);
|
||||||
|
u.setChangeId(c.getKey().get());
|
||||||
u.setBranch(c.getDest().get());
|
u.setBranch(c.getDest().get());
|
||||||
u.commit();
|
u.commit();
|
||||||
return c;
|
return c;
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Subject: This is a test change\n");
|
+ "Subject: This is a test change\n");
|
||||||
assertParseFails(writeCommit("Update change\n"
|
assertParseFails(writeCommit("Update change\n"
|
||||||
@@ -70,12 +71,14 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Status: NEW\n"
|
+ "Status: NEW\n"
|
||||||
+ "Subject: This is a test change\n");
|
+ "Subject: This is a test change\n");
|
||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Status: new\n"
|
+ "Status: new\n"
|
||||||
+ "Subject: This is a test change\n");
|
+ "Subject: This is a test change\n");
|
||||||
@@ -95,6 +98,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Subject: This is a test change\n");
|
+ "Subject: This is a test change\n");
|
||||||
assertParseFails("Update change\n"
|
assertParseFails("Update change\n"
|
||||||
@@ -106,6 +110,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Subject: This is a test change\n");
|
+ "Subject: This is a test change\n");
|
||||||
assertParseFails("Update change\n"
|
assertParseFails("Update change\n"
|
||||||
@@ -118,6 +123,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Label: Label1=+1\n"
|
+ "Label: Label1=+1\n"
|
||||||
+ "Label: Label2=1\n"
|
+ "Label: Label2=1\n"
|
||||||
@@ -127,6 +133,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Label: -Label1\n"
|
+ "Label: -Label1\n"
|
||||||
+ "Label: -Label1 Other Account <2@gerrit>\n"
|
+ "Label: -Label1 Other Account <2@gerrit>\n"
|
||||||
@@ -162,6 +169,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Subject: This is a test change\n"
|
+ "Subject: This is a test change\n"
|
||||||
+ "Submitted-with: NOT_READY\n"
|
+ "Submitted-with: NOT_READY\n"
|
||||||
@@ -193,6 +201,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Subject: This is a test change\n"
|
+ "Subject: This is a test change\n"
|
||||||
+ "Submission-id: 1-1453387607626-96fabc25");
|
+ "Submission-id: 1-1453387607626-96fabc25");
|
||||||
@@ -208,6 +217,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Reviewer: Change Owner <1@gerrit>\n"
|
+ "Reviewer: Change Owner <1@gerrit>\n"
|
||||||
+ "CC: Other Account <2@gerrit>\n"
|
+ "CC: Other Account <2@gerrit>\n"
|
||||||
@@ -223,12 +233,14 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Topic: Some Topic\n"
|
+ "Topic: Some Topic\n"
|
||||||
+ "Subject: This is a test change\n");
|
+ "Subject: This is a test change\n");
|
||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Topic:\n"
|
+ "Topic:\n"
|
||||||
+ "Subject: This is a test change\n");
|
+ "Subject: This is a test change\n");
|
||||||
@@ -244,11 +256,13 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Subject: This is a test change\n");
|
+ "Subject: This is a test change\n");
|
||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Branch: master\n"
|
+ "Branch: master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Subject: This is a test change\n");
|
+ "Subject: This is a test change\n");
|
||||||
assertParseFails("Update change\n"
|
assertParseFails("Update change\n"
|
||||||
@@ -258,12 +272,28 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
+ "Branch: refs/heads/stable");
|
+ "Branch: refs/heads/stable");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseChangeId() throws Exception {
|
||||||
|
assertParseSucceeds("Update change\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
|
+ "Patch-Set: 1\n"
|
||||||
|
+ "Subject: This is a test change\n");
|
||||||
|
assertParseFails("Update change\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "Patch-Set: 1\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
|
+ "Change-id: I159532ef4844d7c18f7f3fd37a0b275590d41b1b");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseSubject() throws Exception {
|
public void parseSubject() throws Exception {
|
||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Patch-Set: 1\n"
|
+ "Patch-Set: 1\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Subject: Some subject of a change\n");
|
+ "Subject: Some subject of a change\n");
|
||||||
assertParseFails("Update change\n"
|
assertParseFails("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
@@ -278,6 +308,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Patch-set: 1\n"
|
+ "Patch-set: 1\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Subject: Some subject of a change\n"
|
+ "Subject: Some subject of a change\n"
|
||||||
+ "Commit: abcd1234abcd1234abcd1234abcd1234abcd1234");
|
+ "Commit: abcd1234abcd1234abcd1234abcd1234abcd1234");
|
||||||
assertParseFails("Update change\n"
|
assertParseFails("Update change\n"
|
||||||
@@ -301,16 +332,19 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Patch-set: 1 (PUBLISHED)\n"
|
+ "Patch-set: 1 (PUBLISHED)\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Subject: Some subject of a change\n");
|
+ "Subject: Some subject of a change\n");
|
||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Patch-set: 1 (DRAFT)\n"
|
+ "Patch-set: 1 (DRAFT)\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Subject: Some subject of a change\n");
|
+ "Subject: Some subject of a change\n");
|
||||||
assertParseSucceeds("Update change\n"
|
assertParseSucceeds("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Patch-set: 1 (DELETED)\n"
|
+ "Patch-set: 1 (DELETED)\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Subject: Some subject of a change\n");
|
+ "Subject: Some subject of a change\n");
|
||||||
assertParseFails("Update change\n"
|
assertParseFails("Update change\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
@@ -325,6 +359,7 @@ public class ChangeNotesParserTest extends AbstractChangeNotesTest {
|
|||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Patch-set: 1\n"
|
+ "Patch-set: 1\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
|
+ "Change-id: I577fb248e474018276351785930358ec0450e9f7\n"
|
||||||
+ "Commit: abcd1234abcd1234abcd1234abcd1234abcd1234\n"
|
+ "Commit: abcd1234abcd1234abcd1234abcd1234abcd1234\n"
|
||||||
+ "Subject: Change subject\n"
|
+ "Subject: Change subject\n"
|
||||||
+ "Groups: a,b,c\n");
|
+ "Groups: a,b,c\n");
|
||||||
|
|||||||
@@ -491,6 +491,28 @@ public class ChangeNotesTest extends AbstractChangeNotesTest {
|
|||||||
assertThat(notes.getChange().getTopic()).isNull();
|
assertThat(notes.getChange().getTopic()).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void changeIdChangeNotes() throws Exception {
|
||||||
|
Change c = newChange();
|
||||||
|
|
||||||
|
ChangeNotes notes = newNotes(c);
|
||||||
|
assertThat(notes.getChange().getKey()).isEqualTo(c.getKey());
|
||||||
|
|
||||||
|
// An update doesn't affect the Change-Id
|
||||||
|
ChangeUpdate update = newUpdate(c, changeOwner);
|
||||||
|
update.setTopic("topic"); // Change something to get a new commit.
|
||||||
|
update.commit();
|
||||||
|
assertThat(notes.getChange().getKey()).isEqualTo(c.getKey());
|
||||||
|
|
||||||
|
// Trying to set another Change-Id fails
|
||||||
|
String otherChangeId = "I577fb248e474018276351785930358ec0450e9f7";
|
||||||
|
update = newUpdate(c, changeOwner);
|
||||||
|
exception.expect(IllegalArgumentException.class);
|
||||||
|
exception.expectMessage("The Change-Id was already set to " + c.getKey()
|
||||||
|
+ ", so we cannot set this Change-Id: " + otherChangeId);
|
||||||
|
update.setChangeId(otherChangeId);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void branchChangeNotes() throws Exception {
|
public void branchChangeNotes() throws Exception {
|
||||||
Change c = newChange();
|
Change c = newChange();
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ public class CommitMessageOutputTest extends AbstractChangeNotesTest {
|
|||||||
assertBodyEquals("Update patch set 1\n"
|
assertBodyEquals("Update patch set 1\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Patch-set: 1\n"
|
+ "Patch-set: 1\n"
|
||||||
|
+ "Change-id: " + c.getKey().get() + "\n"
|
||||||
+ "Subject: Change subject\n"
|
+ "Subject: Change subject\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
+ "Commit: " + update.getCommit().name() + "\n"
|
+ "Commit: " + update.getCommit().name() + "\n"
|
||||||
@@ -88,6 +89,7 @@ public class CommitMessageOutputTest extends AbstractChangeNotesTest {
|
|||||||
+ "How about a new line\n"
|
+ "How about a new line\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Patch-set: 1\n"
|
+ "Patch-set: 1\n"
|
||||||
|
+ "Change-id: " + c.getKey().get() + "\n"
|
||||||
+ "Subject: Change subject\n"
|
+ "Subject: Change subject\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
+ "Commit: " + update.getCommit().name() + "\n",
|
+ "Commit: " + update.getCommit().name() + "\n",
|
||||||
@@ -109,6 +111,7 @@ public class CommitMessageOutputTest extends AbstractChangeNotesTest {
|
|||||||
+ "Foo\n"
|
+ "Foo\n"
|
||||||
+ "\n"
|
+ "\n"
|
||||||
+ "Patch-set: 1\n"
|
+ "Patch-set: 1\n"
|
||||||
|
+ "Change-id: " + c.getKey().get() + "\n"
|
||||||
+ "Subject: Subject\n"
|
+ "Subject: Subject\n"
|
||||||
+ "Branch: refs/heads/master\n"
|
+ "Branch: refs/heads/master\n"
|
||||||
+ "Commit: " + commit.name() + "\n",
|
+ "Commit: " + commit.name() + "\n",
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ public class TestChanges {
|
|||||||
cb.parent(tr.getRevWalk().parseCommit(parent.getObjectId()));
|
cb.parent(tr.getRevWalk().parseCommit(parent.getObjectId()));
|
||||||
}
|
}
|
||||||
update.setBranch(c.getDest().get());
|
update.setBranch(c.getDest().get());
|
||||||
|
update.setChangeId(c.getKey().get());
|
||||||
update.setCommit(tr.getRevWalk(), cb.create());
|
update.setCommit(tr.getRevWalk(), cb.create());
|
||||||
return update;
|
return update;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user