From 53583f1e08ce7612e14dfc44c4dcc283902ff85b Mon Sep 17 00:00:00 2001 From: Per Cederqvist Date: Wed, 14 Jul 2010 18:21:02 +0200 Subject: [PATCH] Implemented "tg summary --sort". MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This uses tsort to sort the branches based on their dependency graph. Note: only a single sort order that fulfills the dependency graph is printed. There may be many other possible orderings. A graphical text view would be much more useful, but this is till a lot better than nothing. Signed-off-by: Per Cederqvist Signed-off-by: Uwe Kleine-König --- README | 7 +++++++ tg-summary.sh | 30 +++++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/README b/README index c418ff4..dcb7e80 100644 --- a/README +++ b/README @@ -351,6 +351,13 @@ tg summary pass '--graphviz' to get a dot-suitable output to draw a dependency graph between the topic branches. + You can also use the --sort option to sort the branches using + a topological sort. This is especially useful if each + TopGit-tracked topic branch depends on a single parent branch, + since it will then print the branches in the dependency + order. In more complex scenarios, a text graph view would be + much more useful, but that is not yet implemented. + TODO: Speed up by an order of magnitude TODO: Text graph view diff --git a/tg-summary.sh b/tg-summary.sh index 50ee883..a2cb986 100644 --- a/tg-summary.sh +++ b/tg-summary.sh @@ -5,6 +5,7 @@ terse= graphviz= +sort= ## Parse options @@ -16,8 +17,10 @@ while [ -n "$1" ]; do terse=1;; --graphviz) graphviz=1;; + --sort) + sort=1;; *) - echo "Usage: tg [...] summary [-t | --graphviz]" >&2 + echo "Usage: tg [...] summary [-t | --sort | --graphviz]" >&2 exit 1;; esac done @@ -27,6 +30,12 @@ curname="$(git symbolic-ref HEAD | sed 's#^refs/\(heads\|top-bases\)/##')" ! [ -n "$terse" -a -n "$graphviz" ] || die "-t and --graphviz options are mutual exclusive" +! [ -n "$sort" -a -n "$graphviz" ] || + die "--sort and --graphviz options are mutual exclusive" + +! [ -n "$sort" -a -n "$terse" ] || + die "-t and --sort options are mutual exclusive" + if [ -n "$graphviz" ]; then cat <$tsort_input + exec 5<$tsort_input + rm $tsort_input +fi ## List branches @@ -61,13 +76,17 @@ git for-each-ref refs/top-bases | echo "$name" continue fi - if [ -n "$graphviz" ]; then + if [ -n "$graphviz" ] || [ -n "$sort" ]; then git cat-file blob "$name:.topdeps" | while read dep; do dep_is_tgish=true ref_exists "refs/top-bases/$dep" || dep_is_tgish=false if ! "$dep_is_tgish" || ! branch_annihilated $dep; then - echo "\"$name\" -> \"$dep\";" + if [ -n "$graphviz" ]; then + echo "\"$name\" -> \"$dep\";" + else + echo "$name $dep" >&4 + fi fi done continue @@ -111,4 +130,9 @@ if [ -n "$graphviz" ]; then echo '}' fi +if [ -n "$sort" ]; then + tsort <&5 +fi + + # vim:noet -- 2.30.2