From a1c2229e1a0d476fc02626f1326fa263955b17ee Mon Sep 17 00:00:00 2001
From: Olivier Berger <oberger@ouvaton.org>
Date: Sun, 21 Nov 2010 10:07:36 +0100
Subject: [PATCH] Proposed feature to address
 https://labs.riseup.net/code/issues/2492

---
 ChangeLog              |  3 +++
 handlers/dup.helper.in | 14 ++++++++++++--
 handlers/dup.in        | 25 +++++++++++++++++++++++++
 3 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 29ce38d6..8d2ed5cf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,9 @@ version 0.9.9 -- UNRELEASED
 	   (Closes Roundup bug #598)
 	 . Remove support for duplicity < 0.4.4. Even etch-backports has
 	   a newer one.
+   	 . Now support remove-all-but-n-full command for duplicity >=
+	   0.9.10 to allow removal of increments for older full backups
+           (Closes #2492)
 	ldap:
 	 . Fix reliance on bash for pipefail.
 	mysql:
diff --git a/handlers/dup.helper.in b/handlers/dup.helper.in
index 5cd9dc60..2594b0b1 100644
--- a/handlers/dup.helper.in
+++ b/handlers/dup.helper.in
@@ -124,6 +124,7 @@ do_dup_dest() {
         formItem "keep" "$dup_keep"
         formItem "incremental" "$dup_incremental"
         formItem "increments" "$dup_increments"
+        formItem "keepincroffulls" "$dup_keepincroffulls"
         formItem "bandwidthlimit" "$dup_bandwidth"
         formItem "sshoptions" "$dup_sshoptions"
       formDisplay
@@ -141,8 +142,9 @@ do_dup_dest() {
       dup_keep=${thereply[3]}
       dup_incremental=${thereply[4]}
       dup_increments=${thereply[5]}
-      dup_bandwidth=${thereply[6]}
-      dup_sshoptions=${thereply[7]}
+      dup_keepincroffulls=${thereply[6]}
+      dup_bandwidth=${thereply[7]}
+      dup_sshoptions=${thereply[8]}
 
    done
    set +o noglob
@@ -424,6 +426,14 @@ increments = $dup_increments
 #keep = yes
 keep = $dup_keep
 
+# for how many full backups do we keep their later increments ;
+# default is all (keep all increments).
+# increments for older full backups will be deleted : only the more
+# recent ones (count provided) will be kept
+#keepincrofulls = all
+#keepincrofulls = 6
+keepincrofulls = $dup_keepincroffulls
+
 # full destination URL, in duplicity format; if set, desturl overrides
 # sshoptions, destdir, desthost and destuser; it also disables testconnect and
 # bandwithlimit. For details, see duplicity manpage, section "URL FORMAT".
diff --git a/handlers/dup.in b/handlers/dup.in
index 1d345a3d..b58d34d8 100644
--- a/handlers/dup.in
+++ b/handlers/dup.in
@@ -26,6 +26,7 @@ setsection dest
 getconf incremental yes
 getconf increments 30
 getconf keep 60
+getconf keepincroffulls all
 getconf desturl
 getconf awsaccesskeyid
 getconf awssecretaccesskey
@@ -275,6 +276,30 @@ if [ "$keep" != "yes" ]; then
    fi
 fi
 
+# remove-all-inc-of-but-n-full : remove increments of older full backups : only keep latest ones
+if [ "$keep" != "yes" ]; then
+   if [ "$keepincroffulls" != "all" ]; then
+      if [ "$duplicity_major" -ge 0 -a "$duplicity_minor" -ge 9 -a "$duplicity_sub" -ge 10 ]; then
+         debug "$precmd duplicity remove-all-inc-of-but-n-full $keepincroffulls --force $execstr_options $execstr_serverpart"
+         if [ ! $test ]; then
+            export PASSPHRASE=$password
+            export FTP_PASSWORD=$ftp_password
+            output=`nice -n $nicelevel \
+               su -c \
+               "$precmd duplicity remove-all-inc-of-but-n-full $keepincroffulls --force $execstr_options $execstr_serverpart 2>&1"`
+            exit_code=$?
+            if [ $exit_code -eq 0 ]; then
+               debug $output
+               info "Duplicity remove-all-inc-of-but-n-full finished successfully."
+            else
+               debug $output
+               warning "Duplicity remove-all-inc-of-but-n-full failed."
+            fi
+         fi
+      fi
+   fi
+fi
+
 ### Backup command
 debug "duplicity $execstr_command $execstr_options $execstr_source --exclude '**' / $execstr_serverpart"
 if [ ! $test ]; then
-- 
GitLab