From: Uwe Kleine-König Date: Wed, 25 Feb 2009 19:44:11 +0000 (+0100) Subject: [TOPGIT] allow working with annihilated branches X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=topgit.git;a=commitdiff_plain;h=4fe0a8e009776b8c66357f08ef8171bdc2c0f468;hp=991921b9e0009b6127e0c3d996c682bee555b99b [TOPGIT] allow working with annihilated branches If you decide that you want to drop a patch, you can just merge in its base with strategy "theirs". Then you have base=topic and so no .top* files any more. This patch fixes tg summary and the helper function recurse_deps() to handle these annihilated branches as if they don't exist and don't show up in .topdeps files. Signed-off-by: Uwe Kleine-König --- diff --git a/tg-summary.sh b/tg-summary.sh index 842d95a..50ee883 100644 --- a/tg-summary.sh +++ b/tg-summary.sh @@ -53,13 +53,22 @@ fi git for-each-ref refs/top-bases | while read rev type ref; do name="${ref#refs/top-bases/}" + if branch_annihilated "$name"; then + continue; + fi; + if [ -n "$terse" ]; then echo "$name" continue fi if [ -n "$graphviz" ]; then git cat-file blob "$name:.topdeps" | while read dep; do - echo "\"$name\" -> \"$dep\";" + 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\";" + fi done continue fi diff --git a/tg.sh b/tg.sh index ccb40cd..5bb2d0c 100644 --- a/tg.sh +++ b/tg.sh @@ -94,6 +94,16 @@ has_remote() [ -n "$base_remote" ] && ref_exists "remotes/$base_remote/$1" } +branch_annihilated() +{ + _name="$1"; + + # use the merge base in case the base is ahead. + mb="$(git merge-base "refs/top-bases/$_name" "$_name")"; + + test "$(git rev-parse "$mb^{tree}")" = "$(git rev-parse "$_name^{tree}")"; +} + # recurse_deps CMD NAME [BRANCHPATH...] # Recursively eval CMD on all dependencies of NAME. # CMD can refer to $_name for queried branch name, @@ -116,7 +126,12 @@ recurse_deps() if has_remote "top-bases/$_name"; then echo "refs/remotes/$base_remote/top-bases/$_name" >>"$_depsfile" fi - git cat-file blob "$_name:.topdeps" >>"$_depsfile" + + # if the branch was annihilated, there exists no .topdeps file + if ! branch_annihilated "$_name"; then + #TODO: handle nonexisting .topdeps? + git cat-file blob "$_name:.topdeps" >>"$_depsfile"; + fi; _ret=0 while read _dep; do