# (c) Petr Baudis <pasky@suse.cz> 2008
# GPLv2
-TG_VERSION=0.7
+TG_VERSION=0.8
## Auxiliary functions
else
hook_call="exec $hook_call"
fi
+ # Don't call hook if tg is not installed
+ hook_call="if which \"$tg\" > /dev/null; then $hook_call; fi"
# Insert call into the hook
{
echo "#!/bin/sh"
test "$(git rev-parse "$mb^{tree}")" = "$(git rev-parse "$_name^{tree}")";
}
+# is_sha1 REF
+# Whether REF is a SHA1 (compared to a symbolic name).
+is_sha1()
+{
+ [ "$(git rev-parse "$1")" = "$1" ]
+}
+
# recurse_deps CMD NAME [BRANCHPATH...]
# Recursively eval CMD on all dependencies of NAME.
# CMD can refer to $_name for queried branch name,
# of the whole function.
# If recurse_deps() hits missing dependencies, it will append
# them to space-separated $missing_deps list and skip them.
+# remote dependencies are processed if no_remotes is unset.
recurse_deps()
{
_cmd="$1"; shift
_depchain="$*"
_depsfile="$(mktemp -t tg-depsfile.XXXXXX)"
- # Check also our base against remote base. Checking our head
- # against remote head has to be done in the helper.
- if has_remote "top-bases/$_name"; then
+ # If no_remotes is unset check also our base against remote base.
+ # Checking our head against remote head has to be done in the helper.
+ if test -z "$no_remotes" && has_remote "top-bases/$_name"; then
echo "refs/remotes/$base_remote/top-bases/$_name" >>"$_depsfile"
fi
[ -z "$(git diff-tree "refs/top-bases/$1" "$1" -- | fgrep -v " .top")" ]
}
+# list_deps
+list_deps()
+{
+ git for-each-ref refs/top-bases |
+ while read rev type ref; do
+ name="${ref#refs/top-bases/}"
+ if branch_annihilated "$name"; then
+ continue;
+ fi
+
+ git cat-file blob "$name:.topdeps" | while read dep; do
+ dep_is_tgish=true
+ ref_exists "refs/top-bases/$dep" ||
+ dep_is_tgish=false
+ if ! "$dep_is_tgish" || ! branch_annihilated $dep; then
+ echo "$name $dep"
+ fi
+ done
+ done
+}
+
# switch_to_base NAME [SEED]
switch_to_base()
{
echo "TopGit v$TG_VERSION - A different patch queue manager"
echo "Usage: tg [-r REMOTE] ($cmds|help) ..."
elif [ -r "@cmddir@"/tg-$1 ] ; then
- @cmddir@/tg-$1 -h || :
+ setup_pager
+ @cmddir@/tg-$1 -h 2>&1 || :
echo
if [ -r "@sharedir@/tg-$1.txt" ] ; then
cat "@sharedir@/tg-$1.txt"
# now spawn pager
- export LESS=${LESS:-FRSX} # as in pager.c:pager_preexec()
+ export LESS="${LESS:-FRSX}" # as in pager.c:pager_preexec()
_pager_fifo_dir="$(mktemp -t -d tg-pager-fifo.XXXXXX)"
_pager_fifo="$_pager_fifo_dir/0"
## Dispatch
# We were sourced from another script for our utility functions;
-# this is set by hooks.
-[ -z "$tg__include" ] || return 0
+# this is set by hooks. Skip the rest of the file. A simple return doesn't
+# work as expected in every shell. See http://bugs.debian.org/516188
+if [ -z "$tg__include" ]; then
if [ "$1" = "-r" ]; then
shift
. "@cmddir@"/tg-$cmd;;
esac
+fi
+
# vim:noet