]> git.pld-linux.org Git - packages/rpm-build-tools.git/blobdiff - purge-packages.sh
Release 2 (by relup.sh)
[packages/rpm-build-tools.git] / purge-packages.sh
index 90ac6665f03572635d15295e2e8b1a938bc82a52..04158b699f0e1ff7ee9cad51e1fcc88bf55a6e67 100755 (executable)
@@ -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=${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
This page took 0.03246 seconds and 4 git commands to generate.