chiark / gitweb /
branch_empty: use pretty_tree and therefore respect -i/-w
[topgit.git] / tg.sh
diff --git a/tg.sh b/tg.sh
index 72dc53418ade2674b4ea84e65b7f941f5f2e3bff..caf7d2836cc1db2e0269415aa224b3377c01d38c 100644 (file)
--- a/tg.sh
+++ b/tg.sh
@@ -18,21 +18,26 @@ die()
        exit 1
 }
 
-# cat_file "topic:file"
-# Like `git cat-file blob $1`, but topics '(i)' and '(w)' means index and worktree
+# cat_file TOPIC:PATH [FROM]
+# cat the file PATH from branch TOPIC when FROM is empty.
+# FROM can be -i or -w, than the file will be from the index or worktree,
+# respectively. The caller should than ensure that HEAD is TOPIC, to make sense.
 cat_file()
 {
-       arg="$1"
-       case "$arg" in
-       '(w):'*)
-               cat "${arg#(w):}"
+       path="$1"
+       case "${2-}" in
+       -w)
+               cat "$root_dir/${path#*:}"
                ;;
-       '(i):'*)
+       -i)
                # ':file' means cat from index
-               git cat-file blob "${arg#(i)}"
+               git cat-file blob ":${path#*:}"
+               ;;
+       '')
+               git cat-file blob "$path"
                ;;
        *)
-               git cat-file blob "$arg"
+               die "Wrong argument to cat_file: '$2'"
                ;;
        esac
 }
@@ -279,10 +284,10 @@ needs_update()
        recurse_deps branch_needs_update "$@"
 }
 
-# branch_empty NAME
+# branch_empty NAME [-i | -w]
 branch_empty()
 {
-       [ -z "$(git diff-tree "refs/top-bases/$1" "$1" -- | fgrep -v "  .top")" ]
+       [ "$(pretty_tree "$1" -b)" = "$(pretty_tree "$1" ${2-})" ]
 }
 
 # list_deps