From 05a9f22b01029df29d8f120a4ae42a9e22bfa976 Mon Sep 17 00:00:00 2001 From: hygienic-books Date: Mon, 6 Mar 2023 02:40:16 +0100 Subject: [PATCH] feat(script): Implement retention for old snapshots (#1) --- pacman-zfs-snapshot.sh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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[@]}"