X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topgit.git;a=blobdiff_plain;f=tg-summary.sh;fp=tg-summary.sh;h=1c99e2225c61a2a4c9a07ec6bd64ee82558ddda7;hp=612bd27443779266de3385dfce6b2812be81f85a;hb=466ad37954e4735f2f5a38bc47a78d9088b42c00;hpb=f6a3b3964256f3c97793207e801c9c3d854e3b6a diff --git a/tg-summary.sh b/tg-summary.sh index 612bd27..1c99e22 100644 --- a/tg-summary.sh +++ b/tg-summary.sh @@ -7,13 +7,16 @@ terse= graphviz= sort= deps= - +head_from= ## Parse options while [ -n "$1" ]; do arg="$1"; shift case "$arg" in + -i|-w) + [ -z "$head_from" ] || die "-i and -w are mutually exclusive" + head_from="$arg";; -t) terse=1;; --graphviz) @@ -23,7 +26,7 @@ while [ -n "$1" ]; do --deps) deps=1;; *) - echo "Usage: tg [...] summary [-t | --sort | --deps | --graphviz]" >&2 + echo "Usage: tg [...] summary [-t | --sort | --deps | --graphviz] [-i | -w]" >&2 exit 1;; esac done @@ -68,8 +71,11 @@ process_branch() current=' ' [ "$name" != "$curname" ] || current='>' + from=$head_from + [ "$name" = "$curname" ] || + from= nonempty=' ' - ! branch_empty "$name" || nonempty='0' + ! branch_empty "$name" $from || nonempty='0' remote=' ' [ -z "$base_remote" ] || remote='l' ! has_remote "$name" || remote='r' @@ -88,7 +94,7 @@ process_branch() branch_contains "$name" "refs/top-bases/$name" || base_update='B' if [ "$(git rev-parse "$name")" != "$rev" ]; then - subject="$(git cat-file blob "$name:.topmsg" | sed -n 's/^Subject: //p')" + subject="$(cat_file "$name:.topmsg" $from | sed -n 's/^Subject: //p')" else # No commits yet subject="(No commits)" @@ -99,7 +105,7 @@ process_branch() } if [ -n "$deps" ]; then - list_deps + list_deps $head_from exit 0 fi @@ -113,7 +119,10 @@ git for-each-ref refs/top-bases | if [ -n "$terse" ]; then echo "$name" elif [ -n "$graphviz$sort" ]; then - git cat-file blob "$name:.topdeps" | while read dep; do + from=$head_from + [ "$name" = "$curname" ] || + from= + cat_file "$name:.topdeps" $from | while read dep; do dep_is_tgish=true ref_exists "refs/top-bases/$dep" || dep_is_tgish=false