Move ParseRefString into common gerrit package

MultiPart: 2/2
Change-Id: I25ec4ff5be1895a2cec35e8a0104c2881501cc09
diff --git a/presubmit/query.go b/presubmit/query.go
index 7937f3f..bd93d27 100644
--- a/presubmit/query.go
+++ b/presubmit/query.go
@@ -10,7 +10,6 @@
 	"os"
 	"reflect"
 	"sort"
-	"strconv"
 	"strings"
 
 	"v.io/jiri"
@@ -243,7 +242,7 @@
 
 }
 
-type clListInfo struct {
+type processCLListResult struct {
 	clMap             clNumberToPatchsetMap
 	clString          string
 	skipPresubmitTest bool
@@ -253,7 +252,7 @@
 	filteredCLList    gerrit.CLList
 }
 
-func (s *clsSender) processCLList(jirix *jiri.X, curCLList gerrit.CLList) *clListInfo {
+func (s *clsSender) processCLList(jirix *jiri.X, curCLList gerrit.CLList) *processCLListResult {
 	curCLMap := clNumberToPatchsetMap{}
 	clStrings := []string{}
 	skipPresubmitTest := false
@@ -269,7 +268,7 @@
 		}
 		filteredCLList = append(filteredCLList, curCL)
 
-		cl, patchset, err := parseRefString(curCL.Reference())
+		cl, patchset, err := gerrit.ParseRefString(curCL.Reference())
 		if err != nil {
 			printf(jirix.Stderr(), "%v\n", err)
 			return nil
@@ -286,7 +285,7 @@
 		projects = append(projects, curCL.Project)
 		refs = append(refs, curCL.Reference())
 	}
-	return &clListInfo{
+	return &processCLListResult{
 		clMap:             curCLMap,
 		clString:          strings.Join(clStrings, ", "),
 		skipPresubmitTest: skipPresubmitTest,
@@ -423,7 +422,7 @@
 	curCLs := clNumberToPatchsetMap{}
 	refs := strings.Split(curRefs, ":")
 	for _, ref := range refs {
-		cl, patchset, err := parseRefString(ref)
+		cl, patchset, err := gerrit.ParseRefString(ref)
 		if err != nil {
 			return false, err
 		}
@@ -467,23 +466,6 @@
 	return keys
 }
 
-// parseRefString parses the cl and patchset number from the given ref string.
-func parseRefString(ref string) (int, int, error) {
-	parts := strings.Split(ref, "/")
-	if expected, got := 5, len(parts); expected != got {
-		return -1, -1, fmt.Errorf("unexpected number of %q parts: expected %v, got %v", ref, expected, got)
-	}
-	cl, err := strconv.Atoi(parts[3])
-	if err != nil {
-		return -1, -1, fmt.Errorf("Atoi(%q) failed: %v", parts[3], err)
-	}
-	patchset, err := strconv.Atoi(parts[4])
-	if err != nil {
-		return -1, -1, fmt.Errorf("Atoi(%q) failed: %v", parts[4], err)
-	}
-	return cl, patchset, nil
-}
-
 // addPresubmitTestBuild uses Jenkins' remote access API to add a build for
 // a set of open CLs to run presubmit tests.
 func addPresubmitTestBuild(jirix *jiri.X, cls gerrit.CLList, tests []string) error {
diff --git a/presubmit/query_test.go b/presubmit/query_test.go
index a10075c..1a56b2d 100644
--- a/presubmit/query_test.go
+++ b/presubmit/query_test.go
@@ -229,51 +229,3 @@
 		}
 	}
 }
-
-func TestParseRefString(t *testing.T) {
-	type testCase struct {
-		ref              string
-		expectErr        bool
-		expectedCL       int
-		expectedPatchSet int
-	}
-	testCases := []testCase{
-		// Normal case
-		testCase{
-			ref:              "ref/changes/12/3412/2",
-			expectedCL:       3412,
-			expectedPatchSet: 2,
-		},
-		// Error cases
-		testCase{
-			ref:       "ref/123",
-			expectErr: true,
-		},
-		testCase{
-			ref:       "ref/changes/12/a/2",
-			expectErr: true,
-		},
-		testCase{
-			ref:       "ref/changes/12/3412/a",
-			expectErr: true,
-		},
-	}
-	for _, test := range testCases {
-		cl, patchset, err := parseRefString(test.ref)
-		if test.expectErr {
-			if err == nil {
-				t.Fatalf("want errors, got: %v", err)
-			}
-		} else {
-			if err != nil {
-				t.Fatalf("want no errors, got: %v", err)
-			}
-			if cl != test.expectedCL {
-				t.Fatalf("want %v, got %v", test.expectedCL, cl)
-			}
-			if patchset != test.expectedPatchSet {
-				t.Fatalf("want %v, got %v", test.expectedPatchSet, patchset)
-			}
-		}
-	}
-}
diff --git a/presubmit/test.go b/presubmit/test.go
index fd4b8c7..a538c52 100644
--- a/presubmit/test.go
+++ b/presubmit/test.go
@@ -23,6 +23,7 @@
 
 	"v.io/jiri"
 	"v.io/jiri/collect"
+	"v.io/jiri/gerrit"
 	"v.io/jiri/gitutil"
 	"v.io/jiri/project"
 	"v.io/jiri/runutil"
@@ -409,7 +410,7 @@
 	cls := []cl{}
 	for i, ref := range refs {
 		project := projects[i]
-		clNumber, patchset, err := parseRefString(ref)
+		clNumber, patchset, err := gerrit.ParseRefString(ref)
 		if err != nil {
 			return nil, err
 		}