in git-codereview/change.go [203:246]
func checkoutCL(what, cl, ps string) {
if what == "CL" && ps == "" {
change, err := readGerritChange(cl + "?o=CURRENT_REVISION")
if err != nil {
dief("cannot change to CL %s: %v", cl, err)
}
rev, ok := change.Revisions[change.CurrentRevision]
if !ok {
dief("cannot change to CL %s: invalid current revision from gerrit", cl)
}
ps = strconv.Itoa(rev.Number)
}
var ref string
if what == "CL" {
var group string
if len(cl) > 1 {
group = cl[len(cl)-2:]
} else {
group = "0" + cl
}
cl = fmt.Sprintf("%s/%s", cl, ps)
ref = fmt.Sprintf("refs/changes/%s/%s", group, cl)
} else {
ref = fmt.Sprintf("pull/%s/head", cl)
}
err := runErr("git", "fetch", "-q", "origin", ref)
if err != nil {
dief("cannot change to %v %s: %v", what, cl, err)
}
err = runErr("git", "checkout", "-q", "FETCH_HEAD")
if err != nil {
dief("cannot change to %s %s: %v", what, cl, err)
}
if *noRun {
return
}
subject, err := trimErr(cmdOutputErr("git", "log", "--format=%s", "-1"))
if err != nil {
printf("changed to %s %s.", what, cl)
dief("cannot read change subject from git: %v", err)
}
printf("changed to %s %s.\n\t%s", what, cl, subject)
}