func checkoutCL()

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)
}