summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/backup.scm41
-rw-r--r--gnu/packages/patches/borg-fix-archive-corruption-bug.patch68
3 files changed, 24 insertions, 86 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 2c4305d94c..346c8285e0 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -557,7 +557,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/binutils-ld-new-dtags.patch		\
   %D%/packages/patches/binutils-loongson-workaround.patch	\
   %D%/packages/patches/blast+-fix-makefile.patch		\
-  %D%/packages/patches/borg-fix-archive-corruption-bug.patch	\
   %D%/packages/patches/byobu-writable-status.patch		\
   %D%/packages/patches/cairo-CVE-2016-9082.patch			\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 5156ac9167..2fba1a9e76 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -468,18 +468,22 @@ detection, and lossless compression.")
 (define-public borg
   (package
     (name "borg")
-    (version "1.1.3")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "borgbackup" version))
-              (patches (search-patches "borg-fix-archive-corruption-bug.patch"))
-              (sha256
-               (base32
-                "1rvn8b6clzd1r317r9jkvk34r31risi0dxfjc7jffhnwasck4anc"))
-              (modules '((guix build utils)))
-              (snippet
-               '(for-each
-                  delete-file (find-files "borg" "^(c|h|p).*\\.c$")))))
+    (version "1.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "borgbackup" version))
+       (sha256
+        (base32 "1cicqwh85wfp65y00qaq6q4i4jcyy9b66qz5gpl80qc880wab912"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (for-each delete-file
+                     (find-files "borg" "^(c|h|p).*\\.c$"))
+           ;; Remove bundled shared libraries.
+           (with-directory-excursion "src/borg/algorithms"
+             (for-each delete-file-recursively
+                       (list "lz4" "zstd")))))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((srfi srfi-26) ; for cut
@@ -490,9 +494,11 @@ detection, and lossless compression.")
          (add-after 'unpack 'set-env
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((openssl (assoc-ref inputs "openssl"))
-                   (lz4 (assoc-ref inputs "lz4")))
+                   (lz4 (assoc-ref inputs "lz4"))
+                   (zstd (assoc-ref inputs "zstd")))
                (setenv "BORG_OPENSSL_PREFIX" openssl)
-               (setenv "BORG_LZ4_PREFIX" lz4)
+               (setenv "BORG_LIBLZ4_PREFIX" lz4)
+               (setenv "BORG_LIBZSTD_PREFIX" zstd)
                (setenv "PYTHON_EGG_CACHE" "/tmp")
                ;; The test 'test_return_codes[python]' fails when
                ;; HOME=/homeless-shelter.
@@ -544,8 +550,8 @@ detection, and lossless compression.")
     (native-inputs
      `(("python-cython" ,python-cython)
        ("python-setuptools-scm" ,python-setuptools-scm)
-       ;; Borg 1.0.8's test suite uses 'tmpdir_factory', which was introduced in
-       ;; pytest 2.8.
+       ;; Borg >=1.0.8's test suite uses 'tmpdir_factory', which was introduced
+       ;; in pytest 2.8.
        ("python-pytest" ,python-pytest-3.0)
        ;; For generating the documentation.
        ("python-sphinx" ,python-sphinx)
@@ -555,7 +561,8 @@ detection, and lossless compression.")
        ("lz4" ,lz4)
        ("openssl" ,openssl)
        ("python-llfuse" ,python-llfuse)
-       ("python-msgpack" ,python-msgpack)))
+       ("python-msgpack" ,python-msgpack)
+       ("zstd" ,zstd)))
     (synopsis "Deduplicated, encrypted, authenticated and compressed backups")
     (description "Borg is a deduplicating backup program.  Optionally, it
 supports compression and authenticated encryption.  The main goal of Borg is to
diff --git a/gnu/packages/patches/borg-fix-archive-corruption-bug.patch b/gnu/packages/patches/borg-fix-archive-corruption-bug.patch
deleted file mode 100644
index 0debf119be..0000000000
--- a/gnu/packages/patches/borg-fix-archive-corruption-bug.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-Fix a bug in `borg check --repair` that corrupts existing archives:
-
-https://github.com/borgbackup/borg/issues/3444
-
-Patches copied from upstream source repository:
-
-https://github.com/borgbackup/borg/commit/e09892caec8a63d59e909518c4e9c230dbd69774
-https://github.com/borgbackup/borg/commit/a68d28bfa4db30561150c83eb6a0dca5efa4d9e8
-
-From a68d28bfa4db30561150c83eb6a0dca5efa4d9e8 Mon Sep 17 00:00:00 2001
-From: Thomas Waldmann <tw@waldmann-edv.de>
-Date: Sat, 16 Dec 2017 01:11:40 +0100
-Subject: [PATCH 1/2] modify borg check unit test so it "hangs", see #3444
-
-it doesn't infinitely hang, but slows down considerably.
----
- src/borg/testsuite/archiver.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/borg/testsuite/archiver.py b/src/borg/testsuite/archiver.py
-index c7def2c7..b3383e97 100644
---- a/src/borg/testsuite/archiver.py
-+++ b/src/borg/testsuite/archiver.py
-@@ -3006,7 +3006,7 @@ def test_missing_file_chunk(self):
-     def test_missing_archive_item_chunk(self):
-         archive, repository = self.open_archive('archive1')
-         with repository:
--            repository.delete(archive.metadata.items[-5])
-+            repository.delete(archive.metadata.items[0])
-             repository.commit()
-         self.cmd('check', self.repository_location, exit_code=1)
-         self.cmd('check', '--repair', self.repository_location, exit_code=0)
--- 
-2.15.1
-
-
-From e09892caec8a63d59e909518c4e9c230dbd69774 Mon Sep 17 00:00:00 2001
-From: Thomas Waldmann <tw@waldmann-edv.de>
-Date: Sat, 16 Dec 2017 01:16:05 +0100
-Subject: [PATCH 2/2] check --repair: fix malfunctioning validator, fixes #3444
-
-the major problem was the ('path' in item) expression.
-the dict has bytes-typed keys there, so it never succeeded as it
-looked for a str key. this is a 1.1 regression, 1.0 was fine.
-
-the dict -> StableDict change is just for being more specific,
-the check triggered correctly as StableDict subclasses dict,
-it was just a bit too general.
----
- src/borg/archive.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/borg/archive.py b/src/borg/archive.py
-index 239d00b7..be086800 100644
---- a/src/borg/archive.py
-+++ b/src/borg/archive.py
-@@ -1457,7 +1457,7 @@ def robust_iterator(archive):
-             """
-             item_keys = frozenset(key.encode() for key in self.manifest.item_keys)
-             required_item_keys = frozenset(key.encode() for key in REQUIRED_ITEM_KEYS)
--            unpacker = RobustUnpacker(lambda item: isinstance(item, dict) and 'path' in item,
-+            unpacker = RobustUnpacker(lambda item: isinstance(item, StableDict) and b'path' in item,
-                                       self.manifest.item_keys)
-             _state = 0
- 
--- 
-2.15.1
-