Fix "git diff a..b" breakage
[gitweb.git] / git-prune.sh
index aa798073136b3512215f51fec5709e551d38ad30..c5a5d29aaacf753b70e715169cbb7f74f0193e4a 100755 (executable)
@@ -1,6 +1,7 @@
 #!/bin/sh
 
-. git-sh-setup || die "Not a git archive"
+USAGE='[-n] [--] [<head>...]'
+. git-sh-setup
 
 dryrun=
 echo=
@@ -9,14 +10,18 @@ do
     case "$1" in
     -n) dryrun=-n echo=echo ;;
     --) break ;;
-    -*) echo >&2 "usage: git-prune [ -n ] [ heads... ]"; exit 1 ;;
+    -*) usage ;;
     *)  break ;;
     esac
     shift;
 done
 
 sync
-git-fsck-objects --full --cache --unreachable "$@" |
+case "$#" in
+0) git-fsck-objects --full --cache --unreachable ;;
+*) git-fsck-objects --full --cache --unreachable $(git-rev-parse --all) "$@" ;;
+esac |
+
 sed -ne '/unreachable /{
     s/unreachable [^ ][^ ]* //
     s|\(..\)|\1/|p
@@ -28,10 +33,9 @@ sed -ne '/unreachable /{
 
 git-prune-packed $dryrun
 
-redundant=$(git-pack-redundant --all)
-if test "" != "$redundant"
+if redundant=$(git-pack-redundant --all 2>/dev/null) && test "" != "$redundant"
 then
-       if test "" = $dryrun
+       if test "" = "$dryrun"
        then
                echo "$redundant" | xargs rm -f
        else