From 5eb53d7ffd1c589f1f401beed3c0a85d2a04b2bd Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Wed, 18 Feb 2015 13:50:18 +0100 Subject: [PATCH] Insert Change-Id into access right changes When modifications of access rights are saved for review, a new change is created. Now this change has a Change-Id in the commit message, so that it's easier to manually rework the change and push further patch sets. Bug: issue 2817 Change-Id: I0a6399d731644bdc28147cfd8527e3b692c953da Signed-off-by: Edwin Kempin (cherry picked from commit 8d17f7e5e7eb4ec74c6a0702f05f51f8ce24ca26) --- .../httpd/rpc/project/ReviewProjectAccess.java | 12 +++++++++++- .../com/google/gerrit/server/git/MetaDataUpdate.java | 9 +++++++++ .../google/gerrit/server/git/VersionedMetaData.java | 9 +++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) 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 9437bbe907..af6c0dabde 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; @@ -100,6 +101,7 @@ public class ReviewProjectAccess extends ProjectAccessHandler { 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, @@ -109,7 +111,7 @@ public class ReviewProjectAccess extends ProjectAccessHandler { } Change change = new Change( - new Change.Key("I" + commit.name()), + getChangeId(commit), changeId, user.getAccountId(), new Branch.NameKey( @@ -133,6 +135,14 @@ public class ReviewProjectAccess extends ProjectAccessHandler { return changeId; } + private static Change.Key getChangeId(RevCommit commit) { + List 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 c71c94fda9..840b167638 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 @@ public class MetaDataUpdate { private final BatchRefUpdate batch; private final CommitBuilder commit; private boolean allowEmpty; + private boolean insertChangeId; @AssistedInject public MetaDataUpdate(GitReferenceUpdated gitRefUpdated, @@ -180,6 +181,10 @@ public class MetaDataUpdate { 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 @@ public class MetaDataUpdate { 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 b905f67c87..37df726726 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.RevTree; 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 @@ public abstract class VersionedMetaData { 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; }