# 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
git symbolic-ref HEAD "$_base"
}
+# Show the help messages.
+do_help()
+{
+ if [ -z "$1" ] ; then
+ echo "TopGit v0.1 - A different patch queue manager"
+ echo "Usage: tg (create|delete|info|patch|summary|update|help) ..."
+ elif [ -f "@sharedir@/tg-$1.txt" ] ; then
+ cat "@sharedir@/tg-$1.txt"
+ else
+ echo "`basename $0`: no help for $1" 1>&2
+ fi
+}
+
## Initial setup
case "$cmd" in
help)
- echo "TopGit v0.1 - A different patch queue manager"
- echo "Usage: tg (create|delete|info|patch|summary|update|help) ..."
+ do_help "$1"
exit 1;;
create|delete|info|patch|summary|update)
. "@cmddir@"/tg-$cmd;;