summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin Kempin <edwin.kempin@sap.com>2013-01-03 10:28:17 +0100
committerEdwin Kempin <edwin.kempin@sap.com>2013-01-09 07:53:20 +0100
commit928a29657a0c122ce6e3fdc32f83b3a8f5bed8e3 (patch)
treeaa24162d9ee7d782b98fc3456f74881afe1b8688
parent68fc92e0817f8958a042bfab5c034bcafebf3cdc (diff)
Create ref for new patch set on direct push
If a change is in review and a new commit that has the Change-Id of this change in its commit message is pushed directly, then a new patch set for this commit is created and the change gets automatically closed. The problem is that no change ref for this new patch set is created and as result the change ref that is shown for the new patch set in the WebUI and which is contained in the patchset-created event is invalid. Bug: issue 1726 Change-Id: I4e2ead6841565c3193b04fd4a39add1c8e900055 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java10
1 files changed, 9 insertions, 1 deletions
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 7d1a33a633..68f5752b3b 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
@@ -82,6 +82,7 @@ import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.notes.NoteMap;
import org.eclipse.jgit.revwalk.FooterKey;
@@ -1696,7 +1697,14 @@ public class ReceiveCommits {
markChangeMergedByPush(db, this);
}
- replication.fire(project.getNameKey(), newPatchSet.getRefName());
+ final RefUpdate ru = repo.updateRef(newPatchSet.getRefName());
+ ru.setNewObjectId(newCommit);
+ ru.disableRefLog();
+ if (ru.update(rp.getRevWalk()) != RefUpdate.Result.NEW) {
+ throw new IOException("Failed to create ref " + newPatchSet.getRefName() + " in "
+ + repo.getDirectory() + ": " + ru.getResult());
+ }
+ replication.fire(project.getNameKey(), ru.getName());
hooks.doPatchsetCreatedHook(change, newPatchSet, db);
replaceProgress.update(1);
if (mergedIntoRef != null) {