summaryrefslogtreecommitdiffhomepage
path: root/rotate_tarballs.sh
blob: f0b8181821aaba5c8d6181537daa5d0d4a502217 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/sh
#
set -o errexit -o noglob;

glob() { set +o noglob; echo ${@}; set -o noglob; };
map() { local _ifs="${IFS}" _sep="${1}"; shift; IFS="${_sep}"; echo "${*}"; IFS="${_ifs}"; };
rc() { echo "${@}"; "${@}"; };

rotate_build() {
	local _build_dname="${1}" _hostname="${2}" _limit="${3}";
	local _dist_dates="";
	for _dist_fname in $(glob			\
			${_build_dname}/*.tar.xz	\
			${_build_dname}/*.tar.xz.asc); do
		if [ -e "${_dist_fname}" ]; then
			_dist_date="${_dist_fname#*@${_hostname}-}";
			_dist_date="${_dist_date%.tar.xz*}";
			_dist_date="${_dist_date%-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]}";
			_dist_dates="${_dist_dates:+${_dist_dates} }${_dist_date}";
		fi;
	done;
	if [ -n "${_dist_dates}" ]; then
		rotate_build_dates "${_build_dname}" "${_dist_dates}" "${_limit}";
	fi;
};

rotate_build_dates() {
	local _build_dname="${1}" _dist_dates="${2}" _limit="${3}";
	local _dist_dates_count _dist_dates_count_limit="" _dist_fname="" _nl="
";	_dist_dates="$(map "${_nl}" ${_dist_dates} | sort | uniq)";
	_dist_dates_count="$(echo "${_dist_dates}" | wc -l)";
	if [ "${_dist_dates_count}" -gt "${_limit}" ]; then
		_dist_dates_count_limit=$((${_dist_dates_count}-${_limit}));
		_dist_dates="$(echo "${_dist_dates}" |\
				sed -n "1,${_dist_dates_count_limit}p")";
		for _dist_date in ${_dist_dates}; do
			for _dist_fname in $(glob	\
					${_build_dname}/*-${_dist_date}-*.tar.xz*); do
				rc rm -f "${_dist_fname}";
			done;
		done;
	fi;
};

rotate_builds() {
	local _build_dnames="${1}" _limit="${2}";
	local _hostname="$(hostname)";
	for _build_dname in ${_build_dnames}; do
		rotate_build "${_build_dname}" "${_hostname}" "${_limit}";
	done;
};

rotate_builds "${1}" "${2:-3}";

# vim:filetype=sh noexpandtab sw=8 ts=8