chiark / gitweb /
tg info: Asterisk-prefix 'out-of-band' warnings
[topgit.git] / tg-info.sh
1 #!/bin/sh
2 # TopGit - A different patch queue manager
3 # (c) Petr Baudis <pasky@suse.cz>  2008
4 # GPLv2
5
6 name=
7
8
9 ## Parse options
10
11 while [ -n "$1" ]; do
12         arg="$1"; shift
13         case "$arg" in
14         -*)
15                 echo "Usage: tg info [NAME]" >&2
16                 exit 1;;
17         *)
18                 [ -z "$name" ] || die "name already specified ($name)"
19                 name="$arg";;
20         esac
21 done
22
23 [ -n "$name" ] || name="$(git symbolic-ref HEAD | sed 's#^refs/heads/##')"
24 base_rev="$(git rev-parse --short --verify "refs/top-bases/$name" 2>/dev/null)" ||
25         die "not a TopGit-controlled branch"
26
27 measure="$(measure_branch "$name" "$base_rev")"
28
29 echo "Topic Branch: $name ($measure)"
30 if [ "$(git rev-parse --short "$name")" = "$base_rev" ]; then
31         echo "* No commits."
32         exit 0
33 fi
34
35 git cat-file blob "$name:.topmsg" | grep ^Subject:
36
37 echo "Base: $base_rev"
38 branch_contains "$name" "$base_rev" ||
39         echo "* Base is newer than head! Please run \`tg update\`."
40
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 fi
48
49 git cat-file blob "$name:.topdeps" |
50         sed '1{ s/^/Depends: /; n; }; s/^/         /;'
51
52 depcheck="$(mktemp -t tg-depcheck.XXXXXX)"
53 missing_deps=
54 needs_update "$name" >"$depcheck" || :
55 if [ -n "$missing_deps" ]; then
56         echo "MISSING: $missing_deps"
57 fi
58 if [ -s "$depcheck" ]; then
59         echo "Needs update from:"
60         cat "$depcheck" |
61                 sed 's/ [^ ]* *$//' | # last is $name
62                 sed 's/^: //' | # don't distinguish base updates
63                 while read dep chain; do
64                         echo -n "$dep "
65                         [ -n "$chain" ] && echo -n "(<= $(echo "$chain" | sed 's/ / <= /')) "
66                         dep_parent="${chain%% *}"
67                         echo -n "($(measure_branch "$dep" "${dep2:-$name}"))"
68                         echo
69                 done | sed 's/^/\t/'
70 else
71         echo "Up-to-date."
72 fi
73 rm "$depcheck"