func main()

in cmd/collapsed-kube-commit-mapper/main.go [75:147]


func main() {
	commitMsgTag := flag.String("commit-message-tag", "Kubernetes-commit", "the git commit message tag used to point back to source commits")
	sourceBranch := flag.String("source-branch", "", "the source branch (fully qualified e.g. refs/remotes/origin/master) used as the filter-branch basis")
	showMessage := flag.Bool("l", false, "list the commit message after the two hashes")

	flag.Usage = Usage
	flag.Parse()

	if *sourceBranch == "" {
		glog.Fatalf("source-branch cannot be empty")
	}

	// open repo at "."
	r, err := gogit.PlainOpen(".")
	if err != nil {
		glog.Fatalf("Failed to open repo at .: %v", err)
	}

	// get HEAD
	dstRef, err := r.Head()
	if err != nil {
		glog.Fatalf("Failed to open HEAD: %v", err)
	}
	dstHead, err := cache.CommitObject(r, dstRef.Hash())
	if err != nil {
		glog.Fatalf("Failed to resolve HEAD: %v", err)
	}

	// get first-parent commit list of upstream branch
	srcUpstreamBranch, err := r.ResolveRevision(plumbing.Revision(*sourceBranch))
	if err != nil {
		glog.Fatalf("Failed to open upstream branch %s: %v", *sourceBranch, err)
	}
	srcHead, err := cache.CommitObject(r, *srcUpstreamBranch)
	if err != nil {
		glog.Fatalf("Failed to open upstream branch %s head: %v", *sourceBranch, err)
	}
	srcFirstParents, err := git.FirstParentList(r, srcHead)
	if err != nil {
		glog.Fatalf("Failed to get upstream branch %s first-parent list: %v", *sourceBranch, err)
	}

	// get first-parent commit list of HEAD
	dstFirstParents, err := git.FirstParentList(r, dstHead)
	if err != nil {
		glog.Fatalf("Failed to get first-parent commit list for %s: %v", dstHead.Hash, err)
	}

	sourceCommitToDstCommits, err := git.SourceCommitToDstCommits(r, *commitMsgTag, dstFirstParents, srcFirstParents)
	if err != nil {
		glog.Fatalf("Failed to map upstream branch %s to HEAD: %v", *sourceBranch, err)
	}

	// print out a look-up table
	// <kube sha> <dst sha>
	var lines []string
	for kh, dh := range sourceCommitToDstCommits {
		if *showMessage {
			c, err := cache.CommitObject(r, kh)
			if err != nil {
				// if this happen something above in the algorithm is broken
				glog.Fatalf("Failed to find k8s.io/kubernetes commit %s", kh)
			}
			lines = append(lines, fmt.Sprintf("%s %s %s", kh, dh, strings.SplitN(c.Message, "\n", 2)[0]))
		} else {
			lines = append(lines, fmt.Sprintf("%s %s", kh, dh))
		}
	}
	sort.Strings(lines) // sort to allow binary search
	for _, l := range lines {
		fmt.Println(l)
	}
}