X-Git-Url: http://git.pld-linux.org/?p=packages%2Frpm-build-tools.git;a=blobdiff_plain;f=purge-packages.sh;h=04158b699f0e1ff7ee9cad51e1fcc88bf55a6e67;hp=4b415c11163fa2159085d7af374b32ca61258d6f;hb=de49236;hpb=25e20df548cb8235e0ca882a61b638ee94cbf1ca diff --git a/purge-packages.sh b/purge-packages.sh index 4b415c1..04158b6 100755 --- a/purge-packages.sh +++ b/purge-packages.sh @@ -1,22 +1,32 @@ #!/bin/sh # Purges packages/ checkouts -# - if package has clean state, the dir is removed -# - otherwise git gc is called +# +# - if package has clean state, the dir is cleaned up (moved to purge dir) +# - otherwise git gc is called if CALL_GC=yes +# Stashes aside packages/ that do not have .git dir +# - these dirs are usually created by rpmbuild if Name does not match .spec file + set -e -CALL_GC='yes' +CALL_GC=${CALL_GC:-no} -topdir=$(rpm -E %_topdir) +topdir="${1:-$(rpm -E %_topdir)}" +topdir=$(readlink -f "$topdir") purgedir=$topdir/purged +stashdir=$topdir/stashed cd "$topdir" +echo "Purging in $topdir, press ENTER to continue" +read a + if [ -d "$purgedir" ]; then - echo >&2 "Previous pruge dir exists: $purgedir, remove it to resume" + echo >&2 "Previous pruge dir exists: $purgedir, remove it to continue" exit 1 fi install -d $purgedir for pkg in */.git; do + continue pkg=${pkg%/.git} cd "$pkg" purge='yes' @@ -31,7 +41,7 @@ for pkg in */.git; do $status EOF purge='no' - [ "$CALL_GC" = 'yes' ] && git gc + [ "$CALL_GC" != 'no' ] && git gc fi git show-ref --heads |\ { while read sha1 branch; do @@ -49,7 +59,7 @@ for pkg in */.git; do done if [ "$purge" = 'yes' ]; then cat <<-EOF - * Package $pkg - State clean. Removing + * Package $pkg - State clean. Purging EOF mv ../$pkg $purgedir fi } @@ -58,4 +68,25 @@ done rmdir --ignore-fail-on-non-empty $purgedir +# go over packages that do not have .git +if [ -d "$stashdir" ]; then + echo >&2 "Previous stash dir exists: $stashdir, remove it to continue" + exit 1 +fi +install -d $stashdir +stashdir=$(readlink -f $stashdir) +for pkg in */; do + # skip symlinks + test -L "${pkg%/}" && continue + # skip packages which do have .git + test -d "$pkg/.git" && continue + # skip if it's the stash dir itself + pkg=$(readlink -f $pkg) + test "$pkg" = "$stashdir" && continue + + echo "* Package $pkg does not have .git, stashing" + mv $pkg $stashdir +done +rmdir --ignore-fail-on-non-empty $stashdir + # vi:syntax=sh:ts=4:sw=4:noet