]> git.pld-linux.org Git - packages/rpm-build-tools.git/blob - purge-packages.sh
purge_packages: Check for changes not merged upstream
[packages/rpm-build-tools.git] / purge-packages.sh
1 #!/bin/sh
2 # Purges packages/ checkouts
3 # - if package has clean state, the dir is removed
4 # - otherwise git gc is called
5 set -e
6
7 topdir=$(rpm -E %_topdir)
8 purgedir=$topdir/purged
9 cd "$topdir"
10
11 if [ -d "$purgedir" ]; then
12         echo >&2 "Previous pruge dir exists: $purgedir, remove it to resume"
13         exit 1
14 fi
15
16 install -d $purgedir
17 for pkg in */.git; do
18         pkg=${pkg%/.git}
19         cd "$pkg"
20         purge='yes'
21
22         status=$(git status --porcelain)
23         stash=$(git stash list)
24
25         # FIXME: does not currently handle if some pushes are not made!
26         if [ -n "$status" ] || [ -n "$stash" ]; then
27                 cat <<-EOF
28                 * Package $pkg - Untracked files or stash not empty. Invoke gc
29                 $status
30                 EOF
31                 purge='no'
32                 git gc
33         fi
34         git show-ref --heads |\
35         { while read sha1 branch; do
36                 short_branch=${branch#refs/heads/}
37                 if ! upstream=$(git rev-parse -q --verify $short_branch@{u}) 2>/dev/null; then
38                         echo "* Package $pkg - Branch $short_branch has not defined upstream"
39                         purge='no'
40                         continue
41                 fi
42                 if [ -n "$(git rev-list "$upstream..$branch")" ]; then
43                         echo "* Package $pkg - Branch $short_branch is not fully merged to its upstream"
44                         purge='no'
45                         continue
46                 fi
47         done
48         if [ "$purge" = 'yes' ]; then
49                 cat <<-EOF
50                 * Package $pkg - State clean. Removing
51                 EOF
52                 mv ../$pkg $purgedir
53         fi }
54         cd ..
55 done
56
57 rmdir --ignore-fail-on-non-empty $purgedir
58
59 # vi:syntax=sh:ts=4:sw=4:noet
This page took 0.04847 seconds and 3 git commands to generate.