diff options
author | Edwin Kempin <edwin.kempin@sap.com> | 2013-05-02 14:25:46 +0200 |
---|---|---|
committer | Edwin Kempin <edwin.kempin@sap.com> | 2013-05-02 14:31:28 +0200 |
commit | e5372016d50035235d8bde09a6ab280ae03c4f49 (patch) | |
tree | dc2e1ea199888be00151b26dc0227b1e442c07a1 | |
parent | 23cf15deeb0840e70fde66ab209cdda2432823ff (diff) |
Fix RebaseIfNecessary submit strategy
If a change on submit needs to be rebased a current user is not
available since the merge is executed in the background.
At the moment ChangeControl.Factory is used to get the label types
when rebasing a change, which fails if called from the merge thread
because it requires the current user to be injected. As result the
submit fails and the user gets the error message 'change is new'.
Fix the problem by retrieving the label types from the project and
avoid the usage of ChangeControl.
Change-Id: I2e55caf73904ad078ee9be8fb3ba8d6b02c532b3
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java index 6ae8c9610f..9089710345 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java @@ -41,6 +41,7 @@ import com.google.gerrit.server.patch.PatchSetInfoFactory; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.InvalidChangeOperationException; import com.google.gerrit.server.project.NoSuchChangeException; +import com.google.gerrit.server.project.ProjectCache; import com.google.gwtorm.server.AtomicUpdate; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; @@ -74,6 +75,7 @@ public class RebaseChange { private final ChangeHookRunner hooks; private final ApprovalsUtil approvalsUtil; private final MergeUtil.Factory mergeUtilFactory; + private final ProjectCache projectCache; @Inject RebaseChange(final ChangeControl.Factory changeControlFactory, @@ -83,7 +85,8 @@ public class RebaseChange { final GitReferenceUpdated gitRefUpdated, final RebasedPatchSetSender.Factory rebasedPatchSetSenderFactory, final ChangeHookRunner hooks, final ApprovalsUtil approvalsUtil, - final MergeUtil.Factory mergeUtilFactory) { + final MergeUtil.Factory mergeUtilFactory, + final ProjectCache projectCache) { this.changeControlFactory = changeControlFactory; this.patchSetInfoFactory = patchSetInfoFactory; this.db = db; @@ -94,6 +97,7 @@ public class RebaseChange { this.hooks = hooks; this.approvalsUtil = approvalsUtil; this.mergeUtilFactory = mergeUtilFactory; + this.projectCache = projectCache; } /** @@ -377,8 +381,8 @@ public class RebaseChange { "Change %s was modified", change.getId())); } - final LabelTypes labelTypes = changeControlFactory.controlFor(change) - .getLabelTypes(); + final LabelTypes labelTypes = + projectCache.get(change.getProject()).getLabelTypes(); approvalsUtil.copyVetosToPatchSet(db, labelTypes, change.currentPatchSetId()); |