diff --git a/pacman-zfs-snapshot.sh b/pacman-zfs-snapshot.sh index 8d46284..49be235 100755 --- a/pacman-zfs-snapshot.sh +++ b/pacman-zfs-snapshot.sh @@ -212,6 +212,22 @@ function get_snaps_in_cur_sev () { printf -- '%s' "${snaps_in_cur_sev}" } +function do_retention () { + local snap_list snaps_done_by_us snaps_in_cur_sev snaps_limit oldest_snap + for successfully_snapped_dataset in "${successfully_snapped_datasets[@]}"; do + snaps_in_cur_sev="$(get_snaps_in_cur_sev "${successfully_snapped_dataset}")" + if [[ "${severity}" == "${snaps_important_suffix}" ]]; then + snaps_limit="${snaps_important_keep}" + else + snaps_limit="${snaps_trivial_keep}" + fi + while [[ "$(get_snaps_in_cur_sev "${successfully_snapped_dataset}" | wc -l)" -gt "${snaps_limit}" ]]; do + oldest_snap="$(get_snaps_in_cur_sev "${successfully_snapped_dataset}" | head -n1)" + zfs destroy "${oldest_snap}" + done + done +} + function main () { local pkgs_in_transaction pkgs_in_transaction=("${@}") @@ -245,7 +261,9 @@ function main () { local trimmed_pkg_list_oneline trim_pkg_list_oneline + local -a successfully_snapped_datasets do_snaps + do_retention } main "${pkgs[@]}"