# pro-archman # lib/garbage.sh # Functions for garbage collection # # Copyright (C) 2013 Patrick "P. J." McDermott # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . [ "x${_GARBAGE_SM+set}" = 'xset' ] && return 0 _GARBAGE_SM=1 use locale use output use dir collect_garbage() { local cur_time= local garbage= local gar_time= local dirs= local file= info_v "$(get_msg 'collecting_garbage')" # NB: The %s format conversion specifier is not specified by POSIX, but # it is supported by the GNU and BusyBox implementations of date. cur_time=$(date '+%s') for garbage in "${base_dir}/.db/garbage/"*; do if [ ! -f "${garbage}" ]; then continue fi gar_time=${garbage##*/} if [ ${cur_time} -lt ${gar_time} ]; then break fi while read -r dirs file; do info_v "$(get_msg 'collecting_garbage_file')" "${file}" rm -f "${base_dir}/${file}" while [ ${dirs} -gt 0 ]; do file="${file%/*}" try_rmdir "${base_dir}/${file}" dirs=$(($dirs - 1)) done done <<-EOF ${garbage} EOF rm -f "${garbage}" done } mark_pool_garbage() { local file="${1}" local time= info_v "$(get_msg 'marking_garbage_file')" "${file}" # NB: The %s format conversion specifier is not specified by POSIX, but # it is supported by the GNU and BusyBox implementations of date. time=$(date '+%s') time=$(($time + $conf_pool_gc_delay)) mkdir -p "${base_dir}/.db/garbage" printf '2 %s\n' "${file}" >>"${base_dir}/.db/garbage/${time}" }