mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 15:36:20 -05:00
gnu: borg: Fix a data loss bug.
See <https://github.com/borgbackup/borg/issues/3444> for more information. * gnu/packages/patches/borg-fix-archive-corruption-bug.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/backup.scm (borg)[source]: Use it.
This commit is contained in:
parent
dafc3dafea
commit
e908a5af89
3 changed files with 70 additions and 0 deletions
|
@ -558,6 +558,7 @@ 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 \
|
||||
|
|
|
@ -470,6 +470,7 @@ (define-public borg
|
|||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "borgbackup" version))
|
||||
(patches (search-patches "borg-fix-archive-corruption-bug.patch"))
|
||||
(sha256
|
||||
(base32
|
||||
"1rvn8b6clzd1r317r9jkvk34r31risi0dxfjc7jffhnwasck4anc"))
|
||||
|
|
68
gnu/packages/patches/borg-fix-archive-corruption-bug.patch
Normal file
68
gnu/packages/patches/borg-fix-archive-corruption-bug.patch
Normal file
|
@ -0,0 +1,68 @@
|
|||
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
|
||||
|
Loading…
Reference in a new issue