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