setup_hook()
{
hook_call="\"\$(tg --hooks-path)\"/$1 \"\$@\""
- if [ -x "$git_dir/hooks/$1" ]; then
- if fgrep -q "$hook_call" "$git_dir/hooks/$1"; then
- # Another job well done!
- return
- fi
+ if [ -f "$git_dir/hooks/$1" ] &&
+ fgrep -q "$hook_call" "$git_dir/hooks/$1"; then
+ # Another job well done!
+ return
fi
# Prepare incanation
if [ -x "$git_dir/hooks/$1" ]; then
{
echo "#!/bin/sh"
echo "$hook_call"
- [ -x "$git_dir/hooks/$1" ] && cat "$git_dir/hooks/$1"
+ [ ! -s "$git_dir/hooks/$1" ] || cat "$git_dir/hooks/$1"
} >"$git_dir/hooks/$1+"
chmod a+x "$git_dir/hooks/$1+"
mv "$git_dir/hooks/$1+" "$git_dir/hooks/$1"
# to the branch (e.g. B_DIRTY B1 B2 NAME), one path per line,
# inner paths first. Innermost name can be ':' if the head is
# not in sync with the base.
+# If needs_update() hits missing dependencies, it will append
+# them to space-separated $missing_deps list and skip them.
needs_update()
{
{
git cat-file blob "$1:.topdeps" 2>/dev/null |
while read _dep; do
+ if !git rev-parse --verify "$_dep" >/dev/null 2>&1; then
+ # All hope is lost
+ missing_deps="$missing_deps $_dep"
+ continue
+ fi
+
_dep_is_tgish=1
git rev-parse --verify "refs/top-bases/$_dep" >/dev/null 2>&1 ||
_dep_is_tgish=