summaryrefslogtreecommitdiffstats
path: root/java/com/google/gerrit/sshd/ChangeArgumentParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/gerrit/sshd/ChangeArgumentParser.java')
-rw-r--r--java/com/google/gerrit/sshd/ChangeArgumentParser.java51
1 files changed, 24 insertions, 27 deletions
diff --git a/java/com/google/gerrit/sshd/ChangeArgumentParser.java b/java/com/google/gerrit/sshd/ChangeArgumentParser.java
index 92019ad8a3..3e9dd082f4 100644
--- a/java/com/google/gerrit/sshd/ChangeArgumentParser.java
+++ b/java/com/google/gerrit/sshd/ChangeArgumentParser.java
@@ -18,7 +18,7 @@ import com.google.gerrit.common.Nullable;
import com.google.gerrit.entities.Change;
import com.google.gerrit.entities.Project;
import com.google.gerrit.extensions.restapi.AuthException;
-import com.google.gerrit.extensions.restapi.RestApiException;
+import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.change.ChangeFinder;
import com.google.gerrit.server.change.ChangeResource;
import com.google.gerrit.server.notedb.ChangeNotes;
@@ -30,27 +30,27 @@ import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.restapi.change.ChangesCollection;
import com.google.gerrit.sshd.BaseCommand.UnloggedFailure;
import com.google.inject.Inject;
+import com.google.inject.Provider;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class ChangeArgumentParser {
private final ChangesCollection changesCollection;
private final ChangeFinder changeFinder;
- private final ChangeNotes.Factory changeNotesFactory;
private final PermissionBackend permissionBackend;
+ private final Provider<CurrentUser> currentUserProvider;
@Inject
ChangeArgumentParser(
ChangesCollection changesCollection,
ChangeFinder changeFinder,
- ChangeNotes.Factory changeNotesFactory,
- PermissionBackend permissionBackend) {
+ PermissionBackend permissionBackend,
+ Provider<CurrentUser> currentUserProvider) {
this.changesCollection = changesCollection;
this.changeFinder = changeFinder;
- this.changeNotesFactory = changeNotesFactory;
this.permissionBackend = permissionBackend;
+ this.currentUserProvider = currentUserProvider;
}
public void addChange(String id, Map<Change.Id, ChangeResource> changes)
@@ -68,9 +68,22 @@ public class ChangeArgumentParser {
String id,
Map<Change.Id, ChangeResource> changes,
@Nullable ProjectState projectState,
- boolean useIndex)
+ @SuppressWarnings(
+ "unused") /* Issue 325821304: the useIndex parameter was introduced back in Gerrit
+ * v2.13
+ * when ReviewDb was around and the changeFinder was purely relying on
+ * Lucene.
+ * Fast-forward to v3.7 and the situation is exactly the opposite:
+ * changeFinder uses Lucene or NoteDb depending on the format of the
+ * change id.
+ * TODO: The useIndex is effectively useless right now, but the method
+ * signature needs to be preserved in a stable (almost EOL) release
+ * like v3.7.
+ * The method signature can be amended the parameter removed once this
+ * change is merged to master. */
+ boolean useIndex)
throws UnloggedFailure, PermissionBackendException {
- List<ChangeNotes> matched = useIndex ? changeFinder.find(id) : changeFromNotesFactory(id);
+ List<ChangeNotes> matched = changeFinder.find(id);
List<ChangeNotes> toAdd = new ArrayList<>(changes.size());
boolean canMaintainServer;
try {
@@ -105,26 +118,10 @@ public class ChangeArgumentParser {
} else if (toAdd.size() > 1) {
throw new UnloggedFailure(1, "\"" + id + "\" matches multiple changes");
}
- Change.Id cId = toAdd.get(0).getChangeId();
+ ChangeNotes changeNotes = toAdd.get(0);
ChangeResource changeResource;
- try {
- changeResource = changesCollection.parse(cId);
- } catch (RestApiException e) {
- throw new UnloggedFailure(1, "\"" + id + "\" no such change", e);
- }
- changes.put(cId, changeResource);
- }
-
- private List<ChangeNotes> changeFromNotesFactory(String id) throws UnloggedFailure {
- return changeNotesFactory.createUsingIndexLookup(parseId(id));
- }
-
- private List<Change.Id> parseId(String id) throws UnloggedFailure {
- try {
- return Arrays.asList(Change.id(Integer.parseInt(id)));
- } catch (NumberFormatException e) {
- throw new UnloggedFailure(2, "Invalid change ID " + id, e);
- }
+ changeResource = changesCollection.parse(changeNotes, currentUserProvider.get());
+ changes.put(changeNotes.getChangeId(), changeResource);
}
private boolean inProject(ProjectState projectState, Project.NameKey project) {