# pro-archman # src/garbage.sh # Functions for garbage collection # # Copyright (C) 2013 Patrick "P. J." McDermott # # This file is part of the ProteanOS Archive Manager. # # The ProteanOS Archive Manager 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. # # The ProteanOS Archive Manager 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 the ProteanOS Archive Manager. If not, see # . 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 <"${garbage}" rm -f "${garbage}" done return 0 } 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}" return 0 }