summaryrefslogtreecommitdiffhomepage
path: root/etc/rotate_archives.sh
blob: f0bbe1009ffe6c6ea90b1a6e53c672f9894c94ef (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
56
57
#!/bin/sh

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.*		\
			${_build_dname}/*.zip		\
			${_build_dname}/*.zip.*); do
		if [ -e "${_dist_fname}" ]; then
			_dist_date="${_dist_fname#*@${_hostname}-}";
			_dist_date="${_dist_date%.tar.*}";
			_dist_date="${_dist_date%.zip}";
			_dist_date="${_dist_date%.zip.*}";
			_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;
};

set -o errexit -o noglob;
rotate_builds "${1}" "${2:-3}";

# vim:noexpandtab sw=8 ts=8