AssertionError when one volume has been non-destructively decompressed
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Duplicity |
New
|
Wishlist
|
Unassigned |
Bug Description
When one volume of a backup repository has been decompressed (perhaps by an over-eager file manager application when a curious user has double-clicked on a compressed volume), leaving the original compressed file in place, duplicity raises an AssertionError when asked to operate on that collection.
Example:
$ cd /tmp
$ mkdir source backup
$ touch source/foo
$ duplicity full --no-encryption /tmp/source file:///tmp/backup/
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
--------------[ Backup Statistics ]--------------
StartTime 1501707218.27 (Wed Aug 2 21:53:38 2017)
EndTime 1501707218.27 (Wed Aug 2 21:53:38 2017)
ElapsedTime 0.00 (0.00 seconds)
SourceFiles 2
SourceFileSize 60 (60 bytes)
NewFiles 2
NewFileSize 60 (60 bytes)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 2
RawDeltaSize 0 (0 bytes)
TotalDestinatio
Errors 0
-------
$ FILE=$(echo backup/
$ gunzip -c "$FILE" > "${FILE%.gz}"
$ ls backup | cat
duplicity-
duplicity-
duplicity-
duplicity-
$ duplicity collection-status file:///tmp/backup
Synchronising remote metadata to local cache...
Copying duplicity-
Copying duplicity-
Traceback (most recent call last):
File "/usr/bin/
with_
File "/usr/bin/
fn()
File "/usr/bin/
do_
File "/usr/bin/
globals.
File "/usr/lib64/
self.
File "/usr/lib64/
add_to_sets(f)
File "/usr/lib64/
if set.add_
File "/usr/lib64/
(self.
AssertionError: ({1: 'duplicity-
$ rpm -q duplicity
duplicity-
$ sed 1q /usr/bin/duplicity
#!/usr/bin/env python2
$ type python2
python2 is /usr/bin/python2
$ rpm -qf /usr/bin/python2
python2-
Full -v9 output:
Using archive dir: /home/twaugh/
Using backup name: ba8d32ccb88d135
GPG binary is gpg, version 1.4.22
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Import of duplicity.
Main action: collection-status
Acquiring lockfile /home/twaugh/
=======
duplicity 0.7.13.1 (June 18, 2017)
Args: /usr/bin/duplicity collection-status -v9 file:///tmp/backup
Linux river 4.11.11-
/usr/bin/python2 2.7.13 (default, Jun 26 2017, 10:20:05)
[GCC 7.1.1 20170622 (Red Hat 7.1.1-3)]
=======
Local and Remote metadata are synchronized, no sync needed.
4 files exist on backend
3 files exist in cache
Extracting backup chains from list of files: [u'duplicity-
File duplicity-
Processing local manifest /home/twaugh/
Found manifest volume 1
Found 1 volumes in manifest
File duplicity-
File duplicity-
Ignoring file (rejected by backup set) 'duplicity-
Releasing lockfile /home/twaugh/
Using temporary directory /tmp/duplicity-
Releasing lockfile /home/twaugh/
Traceback (most recent call last):
File "/usr/bin/
with_
File "/usr/bin/
fn()
File "/usr/bin/
do_
File "/usr/bin/
globals.
File "/usr/lib64/
self.
File "/usr/lib64/
add_to_sets(f)
File "/usr/lib64/
if set.add_
File "/usr/lib64/
(self.
AssertionError: ({1: 'duplicity-
Releasing lockfile /home/twaugh/
Changed in duplicity: | |
importance: | Undecided → Wishlist |