Merge "Insert Change-Id into access right changes"
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ReviewProjectAccess.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ReviewProjectAccess.java
index 43c0b22..dff2cd0 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ReviewProjectAccess.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ReviewProjectAccess.java
@@ -14,6 +14,7 @@
package com.google.gerrit.httpd.rpc.project;
+import com.google.gerrit.common.FooterConstants;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.common.TimeUtil;
import com.google.gerrit.common.data.AccessSection;
@@ -102,6 +103,7 @@
protected Change.Id updateProjectConfig(ProjectControl ctl,
ProjectConfig config, MetaDataUpdate md, boolean parentProjectUpdate)
throws IOException, OrmException {
+ md.setInsertChangeId(true);
Change.Id changeId = new Change.Id(db.nextChangeId());
RevCommit commit =
config.commitToNewRef(md, new PatchSet.Id(changeId,
@@ -111,7 +113,7 @@
}
Change change = new Change(
- new Change.Key("I" + commit.name()),
+ getChangeId(commit),
changeId,
user.getAccountId(),
new Branch.NameKey(
@@ -135,6 +137,14 @@
return changeId;
}
+ private static Change.Key getChangeId(RevCommit commit) {
+ List<String> idList = commit.getFooterLines(FooterConstants.CHANGE_ID);
+ Change.Key changeKey = !idList.isEmpty()
+ ? new Change.Key(idList.get(idList.size() - 1).trim())
+ : new Change.Key("I" + commit.name());
+ return changeKey;
+ }
+
private void addProjectOwnersAsReviewers(ChangeResource rsrc) {
final String projectOwners =
groupBackend.get(SystemGroupBackend.PROJECT_OWNERS).getName();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java
index c71c94f..840b167 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java
@@ -148,6 +148,7 @@
private final BatchRefUpdate batch;
private final CommitBuilder commit;
private boolean allowEmpty;
+ private boolean insertChangeId;
@AssistedInject
public MetaDataUpdate(GitReferenceUpdated gitRefUpdated,
@@ -180,6 +181,10 @@
this.allowEmpty = allowEmpty;
}
+ public void setInsertChangeId(boolean insertChangeId) {
+ this.insertChangeId = insertChangeId;
+ }
+
/** @return batch in which to run the update, or {@code null} for no batch. */
BatchRefUpdate getBatch() {
return batch;
@@ -202,6 +207,10 @@
return allowEmpty;
}
+ boolean insertChangeId() {
+ return insertChangeId;
+ }
+
public CommitBuilder getCommitBuilder() {
return commit;
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java
index b905f67..37df726 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java
@@ -43,6 +43,7 @@
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.transport.ReceiveCommand;
import org.eclipse.jgit.treewalk.TreeWalk;
+import org.eclipse.jgit.util.ChangeIdUtil;
import org.eclipse.jgit.util.RawParseUtils;
import java.io.BufferedReader;
@@ -271,6 +272,14 @@
commit.addParentId(src);
}
+ if (update.insertChangeId()) {
+ ObjectId id =
+ ChangeIdUtil.computeChangeId(res, getRevision(),
+ commit.getAuthor(), commit.getCommitter(),
+ commit.getMessage());
+ commit.setMessage(ChangeIdUtil.insertId(commit.getMessage(), id));
+ }
+
src = inserter.insert(commit);
srcTree = res;
}