* xz support (available in python 3.3+)
* add --no-increment option to avoid incremented version backups

diff -u ./subversion-1.14.5/tools/backup/hot-backup.py.in.orig
./subversion-1.14.5/tools/backup/hot-backup.py.in
--- ./subversion-1.14.5/tools/backup/hot-backup.py.in.orig      2025-11-18
13:12:03.909124112 -0700
+++ ./subversion-1.14.5/tools/backup/hot-backup.py.in   2025-11-18
13:12:32.105055197 -0700
@@ -54,6 +54,7 @@
 archive_map = {
   'gz'  : ".tar.gz",
   'bz2' : ".tar.bz2",
+  'xz' : ".tar.xz",
   'zip' : ".zip",
   'zip64' : ".zip"
   }
@@ -104,8 +105,10 @@
   --archive-type=FMT Create an archive of the backup. FMT can be one of:
                        bz2  : Creates a bzip2 compressed tar file.
                        gz   : Creates a gzip compressed tar file.
+                       xz   : Creates a xz compressed tar file.
                        zip  : Creates a compressed zip file.
                        zip64: Creates a zip64 file (can be > 2GB).
+  --no-increment     Do not create an incremented backup version if the
revision already exists.
   --num-backups=N    Number of prior backups to keep around (0 to keep all).
   --verify           Verify the backup.
   --help      -h     Print this help message and exit.
@@ -115,6 +118,7 @@

 try:
   opts, args = getopt.gnu_getopt(sys.argv[1:], "h?", ["archive-type=",
+                                                      "no-increment",
                                                       "num-backups=",
                                                       "verify",
                                                       "help"])
@@ -125,11 +129,14 @@
   sys.exit(2)

 archive_type = None
+no_increment = False
 verify_copy = False

 for o, a in opts:
   if o == "--archive-type":
     archive_type = a
+  elif o == "--no-increment":
+    no_increment = True
   elif o == "--num-backups":
     num_backups = int(a)
   elif o == "--verify":
@@ -138,7 +145,7 @@
     usage()
     sys.exit()

-if archive_type not in (None, 'bz2', 'gz', 'zip', 'zip64'):
+if archive_type not in (None, 'bz2', 'gz', 'xz', 'zip', 'zip64'):
   sys.stderr.write("ERROR: Bad --archive-type\n")
   usage(sys.stderr)
   sys.exit(2)
@@ -256,6 +263,10 @@
 directory_list = os.listdir(backup_dir)
 young_list = [x for x in directory_list if regexp.search(x)]
 if young_list:
+  if no_increment:
+    print(f"Backup of revision {youngest} already exists, not doing
incremented backup.")
+    sys.exit(0)
+
   young_list.sort(key = functools.cmp_to_key(comparator))
   increment = regexp.search(young_list.pop()).groupdict()['increment']
   if increment:
@@ -294,7 +305,7 @@
   err_msg = ""

   print("Archiving backup to '" + archive_path + "'...")
-  if archive_type == 'gz' or archive_type == 'bz2':
+  if archive_type in ('gz', 'bz2', 'xz'):
     try:
       import tarfile
       tar = tarfile.open(archive_path, 'w:' + archive_type)

PS - not subscribed so please cc me in replies.

FYI - zstd is in Python 3.14.

-- 
Orion Poplawski
he/him/his  - surely the least important thing about me
Manager of IT Systems                      720-772-5637
NWRA, Boulder Office                  FAX: 303-415-9702
3380 Mitchell Lane                       [email protected]
Boulder, CO 80301                 https://www.nwra.com/

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to