diff options
Diffstat (limited to 'git-prune.sh')
-rwxr-xr-x | git-prune.sh | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/git-prune.sh b/git-prune.sh new file mode 100755 index 0000000000..c5a5d29aaa --- /dev/null +++ b/git-prune.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +USAGE='[-n] [--] [<head>...]' +. git-sh-setup + +dryrun= +echo= +while case "$#" in 0) break ;; esac +do + case "$1" in + -n) dryrun=-n echo=echo ;; + --) break ;; + -*) usage ;; + *) break ;; + esac + shift; +done + +sync +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 +}' | { + cd "$GIT_OBJECT_DIRECTORY" || exit + xargs $echo rm -f + rmdir 2>/dev/null [0-9a-f][0-9a-f] +} + +git-prune-packed $dryrun + +if redundant=$(git-pack-redundant --all 2>/dev/null) && test "" != "$redundant" +then + if test "" = "$dryrun" + then + echo "$redundant" | xargs rm -f + else + echo rm -f "$redundant" + fi +fi |