Encode project name in FullChangeId

Bug: skia:12288
Change-Id: Iec397522fbbde2c28b16f235daa8e565c417bec1
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/435620
Reviewed-by: Eric Boren <borenet@google.com>
Commit-Queue: Ravi Mistry <rmistry@google.com>
diff --git a/go/gerrit/gerrit.go b/go/gerrit/gerrit.go
index 8ffd001..d5c9e03 100644
--- a/go/gerrit/gerrit.go
+++ b/go/gerrit/gerrit.go
@@ -1484,10 +1484,14 @@
 // change. See
 // https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#change-id
 func FullChangeId(ci *ChangeInfo) string {
+	project := ci.Project
+	// Encode the project to convert names like chromium/src into chromium%2Fsrc.
+	project = url.QueryEscape(project)
+
 	branch := ci.Branch
 	// Do not include refs/heads/ when constructing the full change Id.
 	branch = strings.TrimPrefix(branch, "refs/heads/")
 	// Encode the branch to convert names like chrome/m90 into chrome%2Fm90.
 	branch = url.QueryEscape(branch)
-	return fmt.Sprintf("%s~%s~%s", ci.Project, branch, ci.ChangeId)
+	return fmt.Sprintf("%s~%s~%s", project, branch, ci.ChangeId)
 }
diff --git a/go/gerrit/gerrit_test.go b/go/gerrit/gerrit_test.go
index bb4ccc6..7daedf0 100644
--- a/go/gerrit/gerrit_test.go
+++ b/go/gerrit/gerrit_test.go
@@ -607,11 +607,15 @@
 	}
 	require.Equal(t, "skia~main~abc", FullChangeId(ci))
 
+	// Test project with "/" in the name.
+	ci.Project = "chromium/src"
+	require.Equal(t, "chromium%2Fsrc~main~abc", FullChangeId(ci))
+
 	// Test branch with "/" in the name.
 	ci.Branch = "chrome/m90"
-	require.Equal(t, "skia~chrome%2Fm90~abc", FullChangeId(ci))
+	require.Equal(t, "chromium%2Fsrc~chrome%2Fm90~abc", FullChangeId(ci))
 
 	// Test branch with "refs/heads/" prefix.
 	ci.Branch = "refs/heads/chrome/m90"
-	require.Equal(t, "skia~chrome%2Fm90~abc", FullChangeId(ci))
+	require.Equal(t, "chromium%2Fsrc~chrome%2Fm90~abc", FullChangeId(ci))
 }