summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin Kempin <edwin.kempin@sap.com>2013-05-02 14:25:46 +0200
committerEdwin Kempin <edwin.kempin@sap.com>2013-05-02 14:31:28 +0200
commite5372016d50035235d8bde09a6ab280ae03c4f49 (patch)
treedc2e1ea199888be00151b26dc0227b1e442c07a1
parent23cf15deeb0840e70fde66ab209cdda2432823ff (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.java10
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());