tg-push: prevent handing branches more than once to git-push
[topgit/tsort.git] / tg-info.sh
blob7d6a34ca617bc8d6ffc44f81613d30715905688c
1 #!/bin/sh
2 # TopGit - A different patch queue manager
3 # (c) Petr Baudis <pasky@suse.cz> 2008
4 # GPLv2
6 name=
9 ## Parse options
11 while [ -n "$1" ]; do
12 arg="$1"; shift
13 case "$arg" in
14 -*)
15 echo "Usage: tg [...] info [NAME]" >&2
16 exit 1;;
18 [ -z "$name" ] || die "name already specified ($name)"
19 name="$arg";;
20 esac
21 done
23 [ -n "$name" ] || name="$(git symbolic-ref HEAD | sed 's#^refs/\(heads\|top-bases\)/##')"
24 base_rev="$(git rev-parse --short --verify "refs/top-bases/$name" 2>/dev/null)" ||
25 die "not a TopGit-controlled branch"
27 measure="$(measure_branch "$name" "$base_rev")"
29 echo "Topic Branch: $name ($measure)"
30 if [ "$(git rev-parse --short "$name")" = "$base_rev" ]; then
31 echo "* No commits."
32 exit 0
35 git cat-file blob "$name:.topmsg" | grep ^Subject: || :
37 echo "Base: $base_rev"
38 branch_contains "$name" "$base_rev" ||
39 echo "* Base is newer than head! Please run \`$tg update\`."
41 if has_remote "$name"; then
42 echo "Remote Mate: $base_remote/$name"
43 branch_contains "$base_rev" "refs/remotes/$base_remote/top-bases/$name" ||
44 echo "* Local base is out of date wrt. the remote base."
45 branch_contains "$name" "refs/remotes/$base_remote/$name" ||
46 echo "* Local head is out of date wrt. the remote head."
47 branch_contains "refs/remotes/$base_remote/$name" "$name" ||
48 echo "* Local head is ahead of the remote head."
51 git cat-file blob "$name:.topdeps" |
52 sed '1{ s/^/Depends: /; n; }; s/^/ /;'
54 depcheck="$(mktemp -t tg-depcheck.XXXXXX)"
55 missing_deps=
56 needs_update "$name" >"$depcheck" || :
57 if [ -n "$missing_deps" ]; then
58 echo "MISSING: $missing_deps"
60 if [ -s "$depcheck" ]; then
61 echo "Needs update from:"
62 cat "$depcheck" |
63 sed 's/ [^ ]* *$//' | # last is $name
64 sed 's/^: //' | # don't distinguish base updates
65 while read dep chain; do
66 echo -n "$dep "
67 [ -n "$chain" ] && echo -n "(<= $(echo "$chain" | sed 's/ / <= /')) "
68 dep_parent="${chain%% *}"
69 echo -n "($(measure_branch "$dep" "${dep2:-$name}"))"
70 echo
71 done | sed 's/^/\t/'
72 else
73 echo "Up-to-date."
75 rm "$depcheck"
77 # vim:noet