Build with API version 2.13-SNAPSHOT and adjust to recent changes

Change-Id: I8534c763a10f7751411c259faaa176a9ba2e6d0e
diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
index 0a0b2bc..6f4b8f6 100644
--- a/lib/gerrit/BUCK
+++ b/lib/gerrit/BUCK
@@ -1,12 +1,11 @@
 include_defs('//bucklets/maven_jar.bucklet')
 
-VER = '2.12'
+VER = '2.13-SNAPSHOT'
 REPO = MAVEN_CENTRAL
 
 maven_jar(
   name = 'plugin-api',
   id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
-  sha1 = '8ce1f6e65078bbcf03a1758f96b3ebca19b7fe3c',
   license = 'Apache2.0',
   attach_source = False,
   repository = REPO,
diff --git a/pom.xml b/pom.xml
index 75e56bf..126801d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
   <groupId>com.googlesource.gerrit.plugins</groupId>
   <artifactId>wip-plugin</artifactId>
   <packaging>jar</packaging>
-  <version>2.12</version>
+  <version>2.13-SNAPSHOT</version>
   <properties>
     <Gerrit-ApiType>plugin</Gerrit-ApiType>
     <Gerrit-ApiVersion>${project.version}</Gerrit-ApiVersion>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/wip/SetCommand.java b/src/main/java/com/googlesource/gerrit/plugins/wip/SetCommand.java
index c45c1b5..124d5b1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/wip/SetCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/wip/SetCommand.java
@@ -16,18 +16,15 @@
 
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
 import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
-import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.PatchSet;
-import com.google.gerrit.reviewdb.client.RevId;
-import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.change.ChangesCollection;
 import com.google.gerrit.server.change.RevisionResource;
 import com.google.gerrit.server.index.ChangeIndexer;
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.gerrit.sshd.CommandMetaData;
 import com.google.gerrit.sshd.SshCommand;
+import com.google.gerrit.sshd.commands.PatchSetParser;
 import com.google.gwtorm.server.OrmException;
-import com.google.gwtorm.server.ResultSet;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
@@ -46,13 +43,13 @@
 
   private final Set<PatchSet> patchSets = new HashSet<>();
 
-  @Argument(index = 0, required = true,
-      multiValued = true,
+  @Argument(index = 0, required = true, multiValued = true,
       metaVar = "{COMMIT | CHANGE,PATCHSET}",
       usage = "list of commits or patch sets to review")
   void addPatchSetId(String token) {
     try {
-      patchSets.add(parsePatchSet(token));
+      PatchSet ps = psParser.parsePatchSet(token, projectControl, branch);
+      patchSets.add(ps);
     } catch (UnloggedFailure e) {
       throw new IllegalArgumentException(e.getMessage(), e);
     } catch (OrmException e) {
@@ -64,6 +61,9 @@
       usage = "project containing the specified patch set(s)")
   private ProjectControl projectControl;
 
+  @Option(name = "--branch", aliases = "-b", usage = "branch containing the specified patch set(s)")
+  private String branch;
+
   @Option(name = "--message", aliases = "-m",
       usage = "cover message on change(s)", metaVar = "MESSAGE")
   private String changeComment;
@@ -77,9 +77,6 @@
   private boolean readyChange;
 
   @Inject
-  private ReviewDb db;
-
-  @Inject
   private Provider<WorkInProgress> wipProvider;
 
   @Inject
@@ -91,6 +88,9 @@
   @Inject
   ChangesCollection changes;
 
+  @Inject
+  PatchSetParser psParser;
+
   @Override
   protected void run() throws UnloggedFailure {
     if (wipChange && readyChange) {
@@ -132,71 +132,6 @@
     }
   }
 
-  private PatchSet parsePatchSet(String patchIdentity)
-      throws UnloggedFailure, OrmException {
-    // By commit?
-    //
-    if (patchIdentity.matches("^([0-9a-fA-F]{4," + RevId.LEN + "})$")) {
-      RevId id = new RevId(patchIdentity);
-      ResultSet<PatchSet> patches;
-      if (id.isComplete()) {
-        patches = db.patchSets().byRevision(id);
-      } else {
-        patches = db.patchSets().byRevisionRange(id, id.max());
-      }
-
-      Set<PatchSet> matches = new HashSet<>();
-      for (PatchSet ps : patches) {
-        Change change = db.changes().get(ps.getId().getParentKey());
-        if (inProject(change)) {
-          matches.add(ps);
-        }
-      }
-
-      switch (matches.size()) {
-        case 1:
-          return matches.iterator().next();
-        case 0:
-          throw error("\"" + patchIdentity + "\" no such patch set");
-        default:
-          throw error("\"" + patchIdentity + "\" matches multiple patch sets");
-      }
-    }
-
-    // By older style change,patchset?
-    //
-    if (patchIdentity.matches("^[1-9][0-9]*,[1-9][0-9]*$")) {
-      PatchSet.Id patchSetId;
-      try {
-        patchSetId = PatchSet.Id.parse(patchIdentity);
-      } catch (IllegalArgumentException e) {
-        throw error("\"" + patchIdentity + "\" is not a valid patch set");
-      }
-      PatchSet patchSet = db.patchSets().get(patchSetId);
-      if (patchSet == null) {
-        throw error("\"" + patchIdentity + "\" no such patch set");
-      }
-      if (projectControl != null) {
-        Change change = db.changes().get(patchSetId.getParentKey());
-        if (!inProject(change)) {
-          throw error("change " + change.getId() + " not in project "
-              + projectControl.getProject().getName());
-        }
-      }
-      return patchSet;
-    }
-
-    throw error("\"" + patchIdentity + "\" is not a valid patch set");
-  }
-
-  private boolean inProject(Change change) {
-    if (projectControl == null) {
-      // No --project option, so they want every project.
-      return true;
-    }
-    return projectControl.getProject().getNameKey().equals(change.getProject());
-  }
-
   private void writeError(String msg) {
     try {
       err.write(msg.getBytes(ENC));