diff options
Diffstat (limited to 'gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PatchSetParser.java')
-rw-r--r-- | gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PatchSetParser.java | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PatchSetParser.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PatchSetParser.java deleted file mode 100644 index c3613b16ac..0000000000 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/PatchSetParser.java +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright (C) 2014 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.gerrit.sshd.commands; - -import com.google.gerrit.common.Nullable; -import com.google.gerrit.reviewdb.client.Change; -import com.google.gerrit.reviewdb.client.PatchSet; -import com.google.gerrit.reviewdb.client.Project; -import com.google.gerrit.reviewdb.client.RevId; -import com.google.gerrit.reviewdb.server.ReviewDb; -import com.google.gerrit.server.ChangeFinder; -import com.google.gerrit.server.PatchSetUtil; -import com.google.gerrit.server.notedb.ChangeNotes; -import com.google.gerrit.server.project.NoSuchChangeException; -import com.google.gerrit.server.project.ProjectControl; -import com.google.gerrit.server.query.change.ChangeData; -import com.google.gerrit.server.query.change.InternalChangeQuery; -import com.google.gerrit.sshd.BaseCommand.UnloggedFailure; -import com.google.gwtorm.server.OrmException; -import com.google.inject.Inject; -import com.google.inject.Provider; -import com.google.inject.Singleton; -import java.util.ArrayList; -import java.util.List; - -@Singleton -public class PatchSetParser { - private final Provider<ReviewDb> db; - private final Provider<InternalChangeQuery> queryProvider; - private final ChangeNotes.Factory notesFactory; - private final PatchSetUtil psUtil; - private final ChangeFinder changeFinder; - - @Inject - PatchSetParser( - Provider<ReviewDb> db, - Provider<InternalChangeQuery> queryProvider, - ChangeNotes.Factory notesFactory, - PatchSetUtil psUtil, - ChangeFinder changeFinder) { - this.db = db; - this.queryProvider = queryProvider; - this.notesFactory = notesFactory; - this.psUtil = psUtil; - this.changeFinder = changeFinder; - } - - public PatchSet parsePatchSet(String token, ProjectControl projectControl, String branch) - throws UnloggedFailure, OrmException { - // By commit? - // - if (token.matches("^([0-9a-fA-F]{4," + RevId.LEN + "})$")) { - InternalChangeQuery query = queryProvider.get(); - List<ChangeData> cds; - if (projectControl != null) { - Project.NameKey p = projectControl.getProject().getNameKey(); - if (branch != null) { - cds = query.byBranchCommit(p.get(), branch, token); - } else { - cds = query.byProjectCommit(p, token); - } - } else { - cds = query.byCommit(token); - } - List<PatchSet> matches = new ArrayList<>(cds.size()); - for (ChangeData cd : cds) { - Change c = cd.change(); - if (!(inProject(c, projectControl) && inBranch(c, branch))) { - continue; - } - for (PatchSet ps : cd.patchSets()) { - if (ps.getRevision().matches(token)) { - matches.add(ps); - } - } - } - - switch (matches.size()) { - case 1: - return matches.iterator().next(); - case 0: - throw error("\"" + token + "\" no such patch set"); - default: - throw error("\"" + token + "\" matches multiple patch sets"); - } - } - - // By older style change,patchset? - // - if (token.matches("^[1-9][0-9]*,[1-9][0-9]*$")) { - PatchSet.Id patchSetId; - try { - patchSetId = PatchSet.Id.parse(token); - } catch (IllegalArgumentException e) { - throw error("\"" + token + "\" is not a valid patch set"); - } - ChangeNotes notes = getNotes(projectControl, patchSetId.getParentKey()); - PatchSet patchSet = psUtil.get(db.get(), notes, patchSetId); - if (patchSet == null) { - throw error("\"" + token + "\" no such patch set"); - } - if (projectControl != null || branch != null) { - Change change = notes.getChange(); - if (!inProject(change, projectControl)) { - throw error( - "change " - + change.getId() - + " not in project " - + projectControl.getProject().getName()); - } - if (!inBranch(change, branch)) { - throw error("change " + change.getId() + " not in branch " + branch); - } - } - return patchSet; - } - - throw error("\"" + token + "\" is not a valid patch set"); - } - - private ChangeNotes getNotes(@Nullable ProjectControl projectControl, Change.Id changeId) - throws OrmException, UnloggedFailure { - if (projectControl != null) { - return notesFactory.create(db.get(), projectControl.getProject().getNameKey(), changeId); - } - try { - ChangeNotes notes = changeFinder.findOne(changeId); - return notesFactory.create(db.get(), notes.getProjectName(), changeId); - } catch (NoSuchChangeException e) { - throw error("\"" + changeId + "\" no such change"); - } - } - - private static boolean inProject(Change change, ProjectControl projectControl) { - if (projectControl == null) { - // No --project option, so they want every project. - return true; - } - return projectControl.getProject().getNameKey().equals(change.getProject()); - } - - private static boolean inBranch(Change change, String branch) { - if (branch == null) { - // No --branch option, so they want every branch. - return true; - } - return change.getDest().get().equals(branch); - } - - public static UnloggedFailure error(String msg) { - return new UnloggedFailure(1, msg); - } -} |