# setup_hook NAME
setup_hook()
{
- hook_call="\"\$(tg --hooks-path)\"/$1 \"\$@\""
+ hook_call="\"\$($tg --hooks-path)\"/$1 \"\$@\""
if [ -f "$git_dir/hooks/$1" ] &&
fgrep -q "$hook_call" "$git_dir/hooks/$1"; then
# Another job well done!
return
fi
- # Prepare incanation
+ # Prepare incantation
if [ -x "$git_dir/hooks/$1" ]; then
hook_call="$hook_call"' || exit $?'
else
# Whether B1 is a superset of B2.
branch_contains()
{
- [ -z "$(git rev-list ^"$1" "$2")" ]
+ [ -z "$(git rev-list ^"$1" "$2" --)" ]
}
# ref_exists REF
git rev-parse --verify "$@" >/dev/null 2>&1
}
+# has_remote BRANCH
+# Whether BRANCH has a remote equivalent (accepts top-bases/ too)
+has_remote()
+{
+ [ -n "$base_remote" ] && ref_exists "remotes/$base_remote/$1"
+}
+
# recurse_deps CMD NAME [BRANCHPATH...]
# Recursively eval CMD on all dependencies of NAME.
# CMD can refer to $_name for queried branch name,
_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.
- _remotebase="refs/remotes/$base_remote/top-bases/$_name"
- if [ -n "$base_remote" ] && ref_exists "$_remotebase"; then
- echo "$_remotebase" >>"$_depsfile"
+ if has_remote "top-bases/$_name"; then
+ echo "refs/remotes/$base_remote/top-bases/$_name" >>"$_depsfile"
fi
git cat-file blob "$_name:.topdeps" >>"$_depsfile"
{
_dep_base_update=
if [ -n "$_dep_is_tgish" ]; then
- if [ -n "$base_remote" ] && ref_exists "refs/remotes/$base_remote/$_dep"; then
+ if has_remote "$_dep"; then
branch_contains "$_dep" "refs/remotes/$base_remote/$_dep" || _dep_base_update=%
fi
# This can possibly override the remote check result;
sep="|"
done
- echo "TopGit v0.2 - A different patch queue manager"
- echo "Usage: tg ($cmds|help) ..."
- elif [ -r "@sharedir@/tg-$1.txt" ] ; then
- cat "@sharedir@/tg-$1.txt"
+ echo "TopGit v0.5 - A different patch queue manager"
+ echo "Usage: tg [-r REMOTE] ($cmds|help) ..."
+ elif [ -r "@cmddir@"/tg-$1 ] ; then
+ @cmddir@/tg-$1 -h || :
+ echo
+ if [ -r "@sharedir@/tg-$1.txt" ] ; then
+ cat "@sharedir@/tg-$1.txt"
+ fi
else
echo "`basename $0`: no help for $1" 1>&2
fi
set -e
git_dir="$(git rev-parse --git-dir)"
root_dir="$(git rev-parse --show-cdup)"; root_dir="${root_dir:-.}"
+# Make sure root_dir doesn't end with a trailing slash.
+root_dir="${root_dir%/}"
base_remote="$(git config topgit.remote 2>/dev/null)" || :
+tg="tg"
# make sure merging the .top* files will always behave sanely
setup_ours
setup_hook "pre-commit"
# this is set by hooks.
[ -z "$tg__include" ] || return 0
+if [ "$1" = "-r" ]; then
+ shift; base_remote="$1"; shift
+ tg="$tg -r $base_remote"
+fi
+
cmd="$1"
[ -n "$cmd" ] || die "He took a duck in the face at two hundred and fifty knots"
shift