diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java index f585e141e9..a8a297e9ce 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java @@ -25,6 +25,8 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.reviewdb.server.ReviewDbUtil; +import com.google.gerrit.server.ChangeUtil; +import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.git.BranchOrderSection; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.git.MergeUtil; @@ -65,6 +67,7 @@ public class Mergeable implements RestReadView<RevisionResource> { private final Provider<ReviewDb> db; private final ChangeIndexer indexer; private final MergeabilityCache cache; + private final SubmitRuleEvaluator.Factory submitRuleEvaluatorFactory; @Inject Mergeable( @@ -74,7 +77,8 @@ public class Mergeable implements RestReadView<RevisionResource> { ChangeData.Factory changeDataFactory, Provider<ReviewDb> db, ChangeIndexer indexer, - MergeabilityCache cache) { + MergeabilityCache cache, + SubmitRuleEvaluator.Factory submitRuleEvaluatorFactory) { this.gitManager = gitManager; this.projectCache = projectCache; this.mergeUtilFactory = mergeUtilFactory; @@ -82,6 +86,7 @@ public class Mergeable implements RestReadView<RevisionResource> { this.db = db; this.indexer = indexer; this.cache = cache; + this.submitRuleEvaluatorFactory = submitRuleEvaluatorFactory; } public void setOtherBranches(boolean otherBranches) { @@ -97,14 +102,14 @@ public class Mergeable implements RestReadView<RevisionResource> { MergeableInfo result = new MergeableInfo(); if (!change.getStatus().isOpen()) { - throw new ResourceConflictException("change is " + Submit.status(change)); + throw new ResourceConflictException("change is " + ChangeUtil.status(change)); } else if (!ps.getId().equals(change.currentPatchSetId())) { // Only the current revision is mergeable. Others always fail. return result; } - ChangeData cd = changeDataFactory.create(db.get(), resource.getControl()); - result.submitType = getSubmitType(cd, ps); + ChangeData cd = changeDataFactory.create(db.get(), resource.getNotes()); + result.submitType = getSubmitType(resource.getUser(), cd, ps); try (Repository git = gitManager.openRepository(change.getProject())) { ObjectId commit = toId(ps); @@ -136,8 +141,10 @@ public class Mergeable implements RestReadView<RevisionResource> { return result; } - private SubmitType getSubmitType(ChangeData cd, PatchSet patchSet) throws OrmException { - SubmitTypeRecord rec = new SubmitRuleEvaluator(cd).setPatchSet(patchSet).getSubmitType(); + private SubmitType getSubmitType(CurrentUser user, ChangeData cd, PatchSet patchSet) + throws OrmException { + SubmitTypeRecord rec = + submitRuleEvaluatorFactory.create(user, cd).setPatchSet(patchSet).getSubmitType(); if (rec.status != SubmitTypeRecord.Status.OK) { throw new OrmException("Submit type rule failed: " + rec); } |