diff options
Diffstat (limited to 'git-show-branches-script')
-rwxr-xr-x | git-show-branches-script | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/git-show-branches-script b/git-show-branches-script new file mode 100755 index 0000000000..90018a9e88 --- /dev/null +++ b/git-show-branches-script @@ -0,0 +1,61 @@ +#!/bin/sh +# +# Show refs and their recent commits. +# + +. git-sh-setup-script || die "Not a git repository" + +usage () { + die "usage: $0 <ref>..." +} + +headref=`readlink $GIT_DIR/HEAD` + +case "$(git-rev-parse --no-revs)" in '') ;; *) usage ;; esac +revs=$(git-rev-parse --revs-only --symbolic --no-flags "$@") +flags=$(git-rev-parse --revs-only --flags "$@") +case "$revs" in +'') + revs=$(git-rev-parse --symbolic --all | sed -ne 's|^refs/heads/||p' | + sort) + shift ;; +esac +set x $revs +shift + +hh= in= +for ref +do + case "/$headref" in + */"$ref") H='*' ;; + *) H='!' ;; + esac + h=`git-rev-parse --verify "$ref^0" 2>/dev/null` || continue + l=`git-log-script --max-count=1 --pretty=oneline "$h" | + sed -e 's/^[^ ]* //'` + hh="$hh $h" + echo "$in$H [$ref] $l" + in="$in " +done +set x $hh +shift + +git-rev-list --pretty=oneline $flags $@ | +while read v l +do + in='' + for h + do + b=`git-merge-base $h $v` + case "$b" in + $v) in="$in+" ;; + *) in="$in " ;; + esac + done + + echo "$in $l" + case "$in" in + *' '*) ;; + *) break ;; + esac +done |