Two new commands to explore the dependencies of TopGit branches: a) tg prev [-i | -w] [NAME] outputs the dependencies of NAME b) tg next [-i | -w] [NAME] outputs branches which depends on NAME Obviously, quilt next was the inspiration. Signed-off-by: Bert Wesarg <bert.wesarg@xxxxxxxxxxxxxx> --- .gitignore | 4 +++ README | 16 +++++++++++++++ contrib/tg-completion.bash | 34 +++++++++++++++++++++++++++++++++ tg-next.sh | 45 ++++++++++++++++++++++++++++++++++++++++++++ tg-prev.sh | 38 +++++++++++++++++++++++++++++++++++++ 5 files changed, 137 insertions(+), 0 deletions(-) diff --git a/.gitignore b/.gitignore index 0342e09..fe4bdc1 100644 .gitignore --- a/.gitignore +++ b/.gitignore @@ -28,8 +28,12 @@ /tg-info.txt /tg-mail /tg-mail.txt +/tg-next +/tg-next.txt /tg-patch /tg-patch.txt +/tg-prev +/tg-prev.txt /tg-push /tg-push.txt /tg-remote diff --git a/README b/README index f103d92..f2d18a2 100644 README --- a/README +++ b/README @@ -522,6 +522,22 @@ tg base repository, so you will not see work done by your collaborators.) +tg prev +~~~~~~~ + Outputs the direct dependencies for the current or named patch. + + Options: + -i show dependencies based on index instead of branch + -w show dependencies based on working tree instead of branch + +tg next +~~~~~~~ + Outputs all patches which directly depend on the current or + named patch. + + Options: + -i show dependencies based on index instead of branch + -w show dependencies based on working tree instead of branch TODO: tg rename diff --git a/contrib/tg-completion.bash b/contrib/tg-completion.bash index 0ee233c..fd17d5c 100755 contrib/tg-completion.bash --- a/contrib/tg-completion.bash +++ b/contrib/tg-completion.bash @@ -426,6 +426,38 @@ _tg_update () COMPREPLY=() } +_tg_next () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + + case "$cur" in + -*) + __tgcomp " + -i + -w + " + ;; + *) + __tgcomp "$(__tg_topics)" + esac +} + +_tg_prev () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + + case "$cur" in + -*) + __tgcomp " + -i + -w + " + ;; + *) + __tgcomp "$(__tg_topics)" + esac +} + ### }}} ### {{{ tg completion @@ -471,7 +503,9 @@ _tg () import) _tg_import ;; info) _tg_info ;; mail) _tg_mail ;; + next) _tg_next ;; patch) _tg_patch ;; + prev) _tg_prev ;; push) _tg_push ;; remote) _tg_remote ;; summary) _tg_summary ;; diff --git a/tg-next.sh b/tg-next.sh new file mode 100644 index 0000000..9b352b3 tg-next.sh --- /dev/null +++ b/tg-next.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# TopGit - A different patch queue manager +# (c) Petr Baudis <pasky@xxxxxxx> 2008 +# (c) Bert Wesarg <Bert.Wesarg@xxxxxxxxxxxxxx> 2009 +# GPLv2 + +name= +head_deps= + + +## Parse options + +while [ -n "$1" ]; do + arg="$1"; shift + case "$arg" in + -i) + head_deps='(i)';; + -w) + head_deps='(w)';; + -*) + echo "Usage: tg next [-i | -w] [NAME]" >&2 + exit 1;; + *) + [ -z "$name" ] || die "name already specified ($name)" + name="$arg";; + esac +done + +head="$(git symbolic-ref HEAD | sed 's#^refs/\(heads\|top-bases\)/##')" +[ -n "$name" ] || name=$head + +git for-each-ref --format='%(refname)' refs/top-bases | + while read ref; do + parent="${ref#refs/top-bases/}" + + deps_src=$parent + # select .topdeps source for HEAD branch + [ "x$parent" = "x$head" -a -n "$head_deps" ] && + deps_src=$head_deps + + cat_file "$deps_src":.topdeps | fgrep -qx "$name" || + continue + + echo "$parent" + done diff --git a/tg-prev.sh b/tg-prev.sh new file mode 100644 index 0000000..efef410 tg-prev.sh --- /dev/null +++ b/tg-prev.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# TopGit - A different patch queue manager +# (c) Petr Baudis <pasky@xxxxxxx> 2008 +# (c) Bert Wesarg <Bert.Wesarg@xxxxxxxxxxxxxx> 2009 +# GPLv2 + +name= +head_deps= + + +## Parse options + +while [ -n "$1" ]; do + arg="$1"; shift + case "$arg" in + -i) + head_deps='(i)';; + -w) + head_deps='(w)';; + -*) + echo "Usage: tg next [-i | -w] [NAME]" >&2 + exit 1;; + *) + [ -z "$name" ] || die "name already specified ($name)" + name="$arg";; + esac +done + +head="$(git symbolic-ref HEAD | sed 's#^refs/\(heads\|top-bases\)/##')" +[ -n "$name" ] || name=$head +base_rev="$(git rev-parse --short --verify "refs/top-bases/$name" 2>/dev/null)" || + die "not a TopGit-controlled branch" + +deps_src=$name +# select .topdeps source for HEAD branch +[ "x$name" = "x$head" -a -n "$head_deps" ] && + deps_src=$head_deps +cat_file "$deps_src:.topdeps" -- tg: (9404aa1..) bw/next-prev-base (depends on: master) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html