This uses the tred(1) and gvpr(1) program from the graphviz package to reduce the dependencies of the given TopGit branch. Signed-off-by: Bert Wesarg <bert.wesarg@xxxxxxxxxxxxxx> --- .gitignore | 2 ++ README | 22 ++++++++++++++++++++++ tg-tred.sh | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 0 deletions(-) diff --git a/.gitignore b/.gitignore index eb56446..1061d93 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ /tg-patch.txt /tg-summary /tg-summary.txt +/tg-tred +/tg-tred.txt /tg-update /tg-update.txt /tg-export diff --git a/README b/README index d2f095d..a941cb6 100644 --- a/README +++ b/README @@ -480,6 +480,28 @@ tg update TODO: tg update -a for updating all topic branches +tg tred +~~~~~~~ + Prints the transitive reduction of the dependecies for the current + or named TopGit branch. + + To actually use this reduced dependencies list, feed the output into + the .topdeps file, commit and run tg update, like: + + $ tg tred > .topdeps + $ tg add -f .topdeps + $ git commit -m "transitive reduce TopGit dependencies" + $ tg update + + If you want to see the differences to the current dependencies, run + this: + + $ diff -u -L current -L tred <(git show :.topdeps) <(tg tred) + + TODO: tg tred -a for reducing all branches + TODO: tg tred -r for reducing recursive all from the current/named + branch + TODO: tg rename diff --git a/tg-tred.sh b/tg-tred.sh new file mode 100644 index 0000000..f41e051 --- /dev/null +++ b/tg-tred.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# TopGit - A different patch queue manager +# (c) Petr Baudis <pasky@xxxxxxx> 2008 +# (c) Bert Wesarg <bert.wesarg@xxxxxxxxxxxxxx> 2009 +# GPLv2 + +name= + + +## Parse options + +while [ -n "$1" ]; do + arg="$1"; shift + case "$arg" in + -*) + echo "Usage: tg [...] tred [NAME]" >&2 + exit 1;; + *) + [ -z "$name" ] || die "name already specified ($name)" + name="$arg";; + esac +done + +[ -n "$name" ] || name="$(git symbolic-ref HEAD | sed 's#^refs/\(heads\|top-bases\)/##')" +base_rev="$(git rev-parse --short --verify "refs/top-bases/$name" 2>/dev/null)" || + die "not a TopGit-controlled branch" + +type tred >/dev/null 2>&1 || + die "need the tred(1) tool from the graphviz package" +type gvpr >/dev/null 2>&1 || + die "need the gvpr(1) tool from the graphviz package" + +$tg summary --graphviz | + tred | + gvpr -a "\"${name}\"" ' +BEG_G { + node_t ctr; + edge_t e; + + ctr = isNode($, ARGV[0]); + for (e = fstedge(ctr); e; e = nxtedge(e,ctr)) { + if (e.head.name != ARGV[0]) + printf("%s\n", e.head.name); + } + exit(0); +} +' -- tg: (fcb488d..) bw/tred (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