From 24367ccd96660195b43d4cc4f297898e6b4fb765 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Sun, 3 Aug 2008 20:47:58 +0200 Subject: [PATCH] needs_update(): Fix $missing_deps passing Instead of piping git cat-file output to our loop, we have to use a temporary file so that $missing_deps gets exported properly. Also, get rid of an extra leading space in its output. --- tg.sh | 72 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/tg.sh b/tg.sh index e987561..e7c42cd 100644 --- a/tg.sh +++ b/tg.sh @@ -90,41 +90,43 @@ branch_contains() # them to space-separated $missing_deps list and skip them. needs_update() { - git cat-file blob "$1:.topdeps" 2>/dev/null | { - _ret=0 - 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= - - # Shoo shoo, keep our environment alone! - [ -z "$_dep_is_tgish" ] || - (needs_update "$_dep" "$@") || - _ret=$? - - _dep_base_uptodate=1 - if [ -n "$_dep_is_tgish" ]; then - branch_contains "$_dep" "refs/top-bases/$_dep" || _dep_base_uptodate= - fi - - if [ -z "$_dep_base_uptodate" ]; then - # _dep needs to be synced with its base - echo ": $_dep $*" - _ret=1 - elif ! branch_contains "refs/top-bases/$1" "$_dep"; then - # Some new commits in _dep - echo "$_dep $*" - _ret=1 - fi - done - exit $_ret - } + depsfile="$(mktemp)" + git cat-file blob "$1:.topdeps" >"$depsfile" + _ret=0 + 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= + + # Shoo shoo, keep our environment alone! + [ -z "$_dep_is_tgish" ] || + (needs_update "$_dep" "$@") || + _ret=$? + + _dep_base_uptodate=1 + if [ -n "$_dep_is_tgish" ]; then + branch_contains "$_dep" "refs/top-bases/$_dep" || _dep_base_uptodate= + fi + + if [ -z "$_dep_base_uptodate" ]; then + # _dep needs to be synced with its base + echo ": $_dep $*" + _ret=1 + elif ! branch_contains "refs/top-bases/$1" "$_dep"; then + # Some new commits in _dep + echo "$_dep $*" + _ret=1 + fi + done <"$depsfile" + missing_deps="${missing_deps# }" + rm "$depsfile" + return $_ret } # branch_empty NAME -- 2.30.2