diff options
author | Edwin Kempin <edwin.kempin@sap.com> | 2013-01-03 10:28:17 +0100 |
---|---|---|
committer | Edwin Kempin <edwin.kempin@sap.com> | 2013-01-09 07:53:20 +0100 |
commit | 928a29657a0c122ce6e3fdc32f83b3a8f5bed8e3 (patch) | |
tree | aa24162d9ee7d782b98fc3456f74881afe1b8688 | |
parent | 68fc92e0817f8958a042bfab5c034bcafebf3cdc (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.java | 10 |
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) { |