phase1: move cleanup.sh to shared script directory
[buildbot.git] / scripts / cleanup-phase1.sh
1 #!/bin/bash
2
3 export LC_ALL=C
4
5 master_url="$1"
6 current_slave="$2"
7 current_builder="$3"
8 current_mode="$4"
9
10 running_builders="$(wget -qO- "${master_url%/}/json/slaves/$current_slave?as_text=1" | sed -ne 's,^.*"builderName": "\(.*\)".*$,\1,p')"
11
12 is_running() {
13 local running_builder
14 for running_builder in $running_builders; do
15 if [ "${running_builder//\//_}" = "${1//\//_}" ]; then
16 return 0
17 fi
18 done
19 return 1
20 }
21
22 do_cleanup() {
23 printf "Cleaning up '$current_builder' work directory"
24
25 if [ -d .git ]; then
26 echo " using git"
27 git reset --hard HEAD
28 git clean -f -d -x
29 else
30 find . -mindepth 1 -maxdepth 1 | while read entry; do
31 rm -vrf "$entry" | while read entry2; do
32 case "$entry2" in *directory:*)
33 printf "."
34 esac
35 done
36 done
37 fi
38
39 echo ""
40 }
41
42 #
43 # Sanity check, current builder should be in running builders list
44 #
45
46 if ! is_running "$current_builder"; then
47 echo "Current builder '$current_builder' not found in current builders list, aborting cleanup."
48 exit 1
49 fi
50
51
52 #
53 # Clean up leftovers
54 #
55
56 if [ "$current_mode" = full ]; then
57 (
58 if ! flock -x -w 2700 200; then
59 echo "Unable to obtain exclusive lock, aborting cleanup."
60 exit 1
61 fi
62
63 for build_dir in ../*; do
64
65 build_dir="$(readlink -f "$build_dir")"
66
67 if [ -z "$build_dir" ] || [ ! -d "$build_dir/build/build_dir" ]; then
68 continue
69 fi
70
71 current_builder="${build_dir##*/}"
72
73 if is_running "$current_builder"; then
74 echo "Skipping currently active '$current_builder' work directory."
75 continue
76 fi
77
78 (
79 cd "$build_dir/build"
80
81 if [ -d build_dir ]; then
82 do_cleanup
83 else
84 echo "Skipping clean '$current_builder' work directory."
85 fi
86 )
87 done
88
89 ) 200>../cleanup.lock
90
91 #
92 # Clean up current build
93 #
94
95 else
96 if [ -d build ]; then (
97 cd build
98 do_cleanup
99 ); fi
100 fi
101
102 exit 0