0.7.1514 Nov 2017 14:25
New in v0.7.15 (2017/11/13)
* Fixed bug introduced in new megabackend.py where process_commandline()
takes a string not a list. Now it takes both.
* Updated web page for new megabackend requirements.
* Patched in lp: mterry/duplicity/more-decode-issues
- Here's some fixes for another couple UnicodeDecodeErrors.
- The duplicity/dup_time.py fixes when a user passes a utf8 date string (or a string with bogus
utf8 characters, but they have to really try to do that). This is bug 1334436.
- The bin/duplicity change from str(e) to util.uexc(e) fixes bug 1324188.
- The rest of the changes (util.exception_traceback and bin/duplicity changes to use it) are to
make the printing of exceptions prettier. Without this, if you see a French exception, you see
"accept xe9es" instead of "acceptées".
- You can test all of these changes in one simple line:
LANGUAGE=fr duplicity remove-older-than 'accept xffées'
* Fix backend.py to allow string, list, and tuple types to support megabackend.py.
* Fixed bug #1715650 with patch from Mattheww S
- Fix to make duplicity attempt a get first, then create, a container
in order to support container ACLs.
* Fixed bug #1714663 "Volume signed by XXXXXXXXXXXXXXXX, not XXXXXXXX"
- Normalized comparison length to min length of compared keys before comparison
- Avoids comparing mix of short, long, or fingerprint size keys.
* Merged in lp: mterry/duplicity/rename-dep
- Make rename command a dependency for LP build
* Fixed bug #1654756 with new b2backend.py module from Vincent Rouille
- Faster (big files are uploaded in chunks)
- Added upload progress reporting support
* Fixed bug #1448094 with patch from Tomáš Zvala
- Don't log incremental deletes for chains that have no incrementals
* Fixed bug #1724144 "--gpg-options unused with some commands"
- Add --gpg-options to get version run command
* Fixed bug #1720159 - Cannot allocate memory with large manifest file since 0.7.03
- filelist is not read if --file-changed option
0.7.1401 Sep 2017 06:05
New in v0.7.14 (2017/08/31)
* Merged in lp: dawgfoto/duplicity/skip_sync_collection_status
- collection-status should not sync metadata
- up-to-date local metadata is not needed as collection-status is
generated from remote file list
- syncing metadata might require to download several GBs
* Fixed slowness in 'collection-status' by basing the status on the
remote system only. The local cache is treated as empty.
* Fixed encrypted remote manifest handling to merely put out a non-fatal
error message and continue if the private key is not available.
* Patched in lp: mterry/duplicity/giobackend-display-name
- giobackend: handle a wider variety of gio backends by making less assumptions;
in particular, this fixes the google-drive: backend
* Fixed bug #1709047 with suggestion from Gary Hasson
- fixed so default was to use original filename
* Fixed PEP8 errors in bin/duplicity
* Merged in lp: mterry/duplicity/gio_child_for_display_name_0.7
- gio: be slightly more correct and get child GFiles based on display name
* Fixed bug #1711905 with suggestion from Schneider
- log.Warn was invoked with log.warn in webdavbackend.py
* Merged in lp: mterry/duplicity/gpg-tag-versions
- Support gpg versions numbers that have tags on them.
- This can happen if you build gpg from git trunk (e.g. 2.1.15-beta20). Or if you run
against the freedesktop flatpak runtime (e.g. 2.1.14-unknown).
* Fixed bug #1394386 with new module megabackend.py from Tomas Vondra
- uses megatools from https://megatools.megous.com/ instead of mega.py library
which has been deprecated
- fixed copyright and PEP8 issues
- replaced subprocess.call() with self.subprocess_popen() to standardize
* Fixed bug #1713640 with patch from Aleksandar Ivanisevic
- replace 2.7 syntax with 2.6 equivalent
* Fixed bug #1538333 Assertion error in manifest.py: assert filecount == ...
- Made sure to never pass .part files as true manifest files
- Changed assert to log.Error to warn about truncated/corrupt file
0.7.13.119 Jun 2017 08:05
New in v0.7.13.1 (2017/06/18)
* Fixed problem in dist/makedist when building on Mac where AppleDouble
files were being created in the tarball. See:
0.7.1313 Jun 2017 19:25
New in v0.7.13 (2017/06/12)
* Fixed bug #1680682 with patch supplied from Dave Allan
- Only specify --pinentry-mode=loopback when --use-agent is not specified
* Fixed man page that had 'cancel' instead of 'loopback' for pinentry mode
* Fixed bug #1684312 with suggestion from Wade Rossman
- Use shutil.copyfile instead of os.system('cp ...')
- Should reduce overhead of os.system() memory usage.
* Fixed bug #1320832 with suggestion from Oskar Wycislak
- Use chunks instead of reading it all in swiftbackend
* Fixed bug #1689632 with patch from Howard Kaye
- On MacOS, the tempfile.TemporaryFile call erroneously raises an
IOError exception saying that too many files are open. This causes
restores to fail randomly, after thousands of files have been restored.
* Fixed bug #1320641 and others regarding lockfile
- swap from lockfile to fasteners module
- use an fcntl() style lock for process lock of duplicity cache
- lockfile will now clear if duplicity is killed or crashes
* May have finally fixed bug #1556553, "Too many open files...".
- Applied patch from Howard Kaye, question #631423. The fix is to dup
the file descriptor, and then close the file in the deallocator
routine in the glue code. Duping the file lets the C code and the Python
code each close the file when they are done with it.
- Invalidated and removed the fix put in for bug #1320832.
- Caveat: long incremental chains will still eat up a large number of file
descriptors. It's a very risky practice, so I'm not inclined to fix it.
* Revisited bug #670891 with patch from Edgar Soldin
- Forced librsync.PatchedFile() to extract file object from TemporaryFile()
object when on Windows or Cygwin systems. This allows us to avoid the
problem of tmpfile() use which creates temp files in the wrong place.
- See discussion at https://bugs.launchpad.net/duplicity/+bug/670891
* Fix bug #1672540 with patch from Benoit Nadeau
- Rename would fail to move par files when moving across filesystems.
0.7.1222 Mar 2017 23:25
New in v0.7.12 (2017/03/21)
* Fixed bug #1623342 with patch supplied by Daniel Jakots
- Failing test on OpenBSD because tar/gtar not found
* Fixed bug #1654220 with patch supplied by Kenneth Newwood
- Duplicity fails on MacOS because GPG version parsing fails
* Fixed bug #1655268 "--gpg-binary option not working"
- If gpg binary is specified rebuild gpg profile using new binary location
* Fixed bug #1658283 "Duplicity 0.7.11 broken with GnuPG 2.0"
- Made gpg version check more robust than just major version
- Now use --pinentry-mode=loopback on gpg 2.1 and greater
- Removed check for non-Linux systems, a false problem
* Merged in lp: matthew-t-bentley/duplicity/duplicity
- Sets a user agent. Backblaze asked for this in case there are errors that originate
from the Duplicity B2 backend
- Only retrieves a new upload URL when the current one expires, to bring it in line
with their best practices for integrations: https://www.backblaze.com/b2/docs/integration_checklist.html
* Add detail about import exceptions in onedrivebackend.py
* Fixed bug #1657916 with patch supplied by Daniel Harvey
- B2 provider cannot handle two backups in the same bucket
* Fixed bug #1603704 with patch supplied by Maciej Bliziński
- Crash with UnicodeEncodeError
* Some fixes to gpg.py to handle gpg1 gpg2 gpg2.1 commandline issues
- --gpg-agent is optional on gpg1, but on gpg2 it is used automatically
- --pinentry-mode is not a valid opt until gpg2.1, so condition on that
* Fixed bug #1367675 - IMAP Backend does not work with Yahoo server
- added the split() as needed in 'nums=list 0 .strip().split(" ")'
- the other fixes mentioned in the bug report comments were already done
* Fixed bug #1671852 - Code regression caused by revision 1108
- change util.uexc() back to bare uexc()
* Fixed bug #1668750 - Don't mask backend errors
- added exception prints to module import errors
0.7.1101 Jan 2017 15:45
New in v0.7.11 (2016/12/31)
* Fixed bugs #815510 and #1615480
- Changed default --volsize to 200MB
* Merged in lp: mstoll-de/duplicity/duplicity
- Backblaze announced a new domain for the b2 api
* Merged in lp: aaron-whitehouse/duplicity/bug_1620085_exclude-if-present-locked-folder
- Fixes Bug #1620085: --exclude-if-present gives OSError looking for tag in locked folders
* Fixed bug #1623342 with patch from Daniel Jakots
- failing test on OpenBSD because tar/gtar not found
* Merged in lp: mwilck/duplicity/duplicity
- GPG: enable truly non-interactive operation with gpg2
- This patch fixes the IMO unexpected behavior that, when using GnuPG2, a pass phrase dialog always pops up for
saving backups. This is particularly annoying when trying to do unattended / fully automatic backups.
* Fixed bug #1621194 with code from Tornhoof
- Do backup to google drive working without a service account
* Fixed bug #1642098 - does not create PAR2 archives when '--par2-options' is used
- Missing space between par2-options plus default options
* Fix bug using 40-char sign keys, from Richard McGraw on mail list
- Remove truncation of argument and adjust comments
* Merged in lp: dernils/duplicity/robust-dropbox-backend
- Added new command line option --backend-retry-delay
that allows to determine the time that duplicity sleeps
before retrying after an error has occured.
- Added some robustness to dpbxbackend.py that ensures re-authentication
happens in case that a socket is changed (e.g. due to a forced reconnect
of a dynamic internet connection).
* Merged in lp: ed.so/duplicity/manpage.fixes
- Fix html output via rman on the website
* Merged in lp: horgh/duplicity/copy-symlink-targets-721599
- Add --copy-links to copy symlink contents, not just the link itself.
* Merged in lp: aaron-whitehouse/duplicity/Bug_1624725_files_within_folder_slash
- Fixed Bug #1624725, so that an include glob ending in "/" now includes folder contents (for globs with
and without spec
0.7.1022 Aug 2016 09:45
New in v0.7.10 (2016/08/20)
* Merged in lp: mwilck/duplicity/0.7-series
- Speedup of path_matches_glob() by about 8x. See
for more details.
* Remove -w from setsid in functional tests.
* Fixed conflict in merge from Martin Wilck and applied
- https://code.launchpad.net/ mwilck/duplicity/0.7-series/+merge/301492
- merge fixes setsid usage in functional testing.
* Fixed bug #1612472 with patch from David Cuthbert
- Restore from S3 fails with --with-prefix-archive if prefix includes '/'
* Merged in lp: arashad.ahamad/duplicity/duplicity_latest
- Changes for connecting to IBM Bluemix ObjectStorage. See man page.
* Merged in lp: fenisilius/duplicity/acd_init_mkdir
- Allow duplicity to create remote folder
0.7.0925 Jul 2016 22:25
New in v0.7.09 (2016/07/24)
* Fixed bug #1600692 with patch from Wolfgang Rohdewald
- Allow symlink to have optional trailing slash during verify.
* Merged in lp: aaron-whitehouse/duplicity/07-fix_deja_dup_error_on_locked_files
- Revert log.Error to log.Warn, as it was prior to the merge in rev 1224,
as this was affecting other applications (e.g. deja dup; Bug #1605939).
* Merged in lp: duplicity-team/duplicity/po-updates
0.7.0803 Jul 2016 16:45
New in v0.7.08 (2016/07/02)
* Merged in lp: noizyland/duplicity/fix_azurebackend_typo
- Fix typo in error handling code
* Merged in lp: ghoz/duplicity/swift-prefix
- adds the abiliy to use path in the swift backend, in order to have multiple
backups to the same container neatly organized.
* Fixed bug #1573957 with patches from Dmitry Nezhevenko
- upload last chunk with files_upload_session_finish to avoid extra request
- upload small files using non-chunked api
* Fixed bug #1586934 with patches from Dmitry Nezhevenko
- fixes error handling in wrapper
* Fixed bug #1586992 with patches from Dmitry Nezhevenko
- Patch adds _delete_list to Par2Backend. And _delete_list fallbacks to
_delete calls if wrapped backend has no _delete_list.
* Fixed bug #1589038 with patches from Malte Schröder
- Added ignore_case option to selection functions
* Merged in lp: mstoll-de/duplicity/b2-reauth
- Fixes bug #1588503 b2: large uploads fail due to expired auth token
* Merged in lp: aaron-whitehouse/duplicity/fix_pep8
- Fix PEP8 error in onedrivebackend.py (space before bracket)
* Fixed bug #822697 ssh-options not passed in rsync over ssh
- Added globals.ssh_options to rsync command line
* Increased default volume size to 200M, was 25M
* Fixed README-REPO to no longer mention 0.6-series
* Merged in lp: aaron-whitehouse/duplicity/fix_stat_errors
- Only give an error about not being able to access possibly locked file if
that file is supposed to be included or scanned (i.e. not excluded).
Fixes Bug #1089131
* Fixed bug #1594780 with patches from B. Reitsma
- Use re.finditer() to speed processing
* Merged in lp: aaron-whitehouse/duplicity/PEP8_W503_fixes
- Fix PEP8 W503 errors (line break before binary operator) and enable the
PEP8 test for this in test_code.CodeTest.
* Merged in lp: aaron-whitehouse/duplicity/PEP8_line_length
- Set line length error length to 120 (matching tox.ini) for PEP8 and
fixed E501(line too long) errors.
* Merged in lp: duplicity-team/du
0.7.07.121 Apr 2016 09:05
New in v0.7.07.1 (2016/04/19)
* Fixed bug #1568677 duplicity fails to use existing S3 bucket in boto backend
- bug introduced by incomplete fix of bug #1296793
- simplified setting of bucket locations
* Fixed bug #1569523 get_bucket unknown keyword location and my_location name error
- bug introduced in improper fix of bug #1568677
- gotta love those inconsistent APIs
* Fixed bug #1571134 incompatible with python-oauth2client version 2.x
and #1558155 PyDrive backend broken, needs update to oauth2client library
- used patch from https://bugs.debian.org/820725 but made changes
to allow the user to continue using the old version
* Fixed bug #1570293 duplicity is very slow due to excessive fsync
- removed flush() after write.
- revert to previous version
0.7.0711 Apr 2016 16:45
New in v0.7.07 (2016/04/10)
* Merged in lp: matthew-t-bentley/duplicity/b2
- Fix import and error typos.
- Allow multiple backups in the same bucket.
- Fixes bug #1523498.
- A couple fixes allowing multiple backups to be hosted in different
folders in the same bucket as well as some logging for -v9.
* Random stuff:
- remove RPM stuff from makedist
- have makedist pull directly from VCS, not local dir
- update po translation directory and build process
- clean up some odd error messages
- move Pep8 ignores to tox.ini
- supply correct path for pydevd under Mac
- fix some tests to run under Linux and Mac
* Partial fix for bug #1529606 - shell code injection in lftpbackend
- still need to fix the other backends that spawn shell commands
* Make test_restart compatible with both GNUtar and BSDtar
* Fix stupid issue with functional test path for duplicity
* Applied patch from shaochun to fix bug #1531154,
- --file-changed failed when file contains spaces
* Applied patch from abeverly to fix bug #1475890
- allow port to be specified along with hostname on S3
- adjusted help text and man page to reflect the change
* Undo changes to test_restart.py. GNU tar is needed.
* Fix minor pep8 nit in collections.py
* Applied changes from ralle-ubuntu to fix bug 1072130.
- duplicity does not support ftpes://
* Fixed bug #1296793 - Failed to create bucket
- use S3Connection.lookup() to check bucket exists
- skips Boto's Exception processing for this check
- dupe of bug #1507109 and bug #1537185
* Merged in lp: mifchip/duplicity/duplicity
- fix bug #1313964, absolute path doesn't work for FTP
* Merged in lp: fpytloun/duplicity/webdav-gssapi
- support GSSAPI authentication in webdav backend
* Add more pylint ignore warnings tags
* Adjust so test_restart.py can run on Mac as well
* Fix for bug #1538333 - assert filecount == len(self.files_changed)
- added flush after every write for all FileobjHooked files which
should prevent some errors when duplicity is forc
0.7.0608 Dec 2015 11:05
New in v0.7.06 (2015/12/07)
* Merged in lp: mnjul/duplicity/s3-infreq-access
- This adds support for AWS S3's newly announced Infrequent Access
storage class and is intended to implement Blueprint:
- A new command line option, --s3-use-ia, is added, and boto backend
will automatically use the correct storage class value depending on
whether --s3-use-rrs and --s3-use-ia is set. Command line parser will
prompt error if both --s3-use-ia and --s3-use-rrs are used together,
as they conflict with each other.
- The manpage has been updated giving a short explanation on the new
option. Its wording derives from Amazon's official announcement:
* The ptyprocess module no longer supports Python 2.6, so fix tox.ini to
use an older version. Make explicit environs for all tests.
* Upgrade to newest version of pep8 and pylint. Add three ignores
to test_pep8 and one to test_pylint to get the rest to pass. They
* Applied patch from Alexander Zangerl to update to changes in lockfile
API 0.9 and later. Updated README to notify users.
* Modded tox.ini to use the latest lockfile.
* Merged in lp: ed.so/duplicity/setup.shebang
- Having the python interpreter searched in the PATH is much more
flexible than the /usr/bin/python inserted into our scripts shebang
by setuptools. This patch prevents that. don't touch my shebang! :)
* Cleanup issues around Launchpad build, mainly lockfile = 0.9.
* Merged in lp: michal-s/duplicity/duplicity
- WindowsAzureMissingResourceError and WindowsAzureConflictError
changed due to SDK changes.
are all valid in our case.
* Reversed previous changes to lockfile. Now it will take any version
extant in the LP build repository. (PyPi is not avail in LP build).
* Merged in lp: ed.so/duplicity/tempfile.tempdir
- make sure packages using python's
0.7.0516 Sep 2015 10:45
New in v0.7.05 (2015/09/15)
* Merged in lp: aaron-whitehouse/duplicity/fix_patch_error
- Change use of mock.patch in unit tests to accommodate the obsolete
version of python-mock on the build server.
* Fixed Bug 1476019 S3 storage bucket not being automatically created
with patch from abeverley
* Merged in lp: aaron-whitehouse/duplicity/launchpad_tox_profile
- Add tox testing profile that mimics the packages installed on the
Launchpad build server, to reduce the likelihood of tests passing
our test suite, but failing on the build server (e.g. because of
the out-of-date mock version).
* Merged in lp: aaron-whitehouse/duplicity/disable_code_tests_for_lpbuildd
- Set RUN_CODE_TESTS to 0 for lpbuildd tox profile, reflecting its value
on the Launchpad build server (and therefore skipping PEP8, 2to3 and
pylint). More accurately reflects the system we are mimicking and saves
approximately 1 minute per test run.
* Fixed Bug 1438170 duplicity crashes on resume when using gpg-agent with
patch from Artur Bodera (abodera). Applied the same patch to incremental
resumes as well.
* Merged in lp: w.baranowski/duplicity/selection_debug
- This little patch logs debug messages concerning path selection process,
and so allows users to debug their include/exclude configuration.
* Merged in lp: germar/duplicity/par2removefix
- After reorganisation in revision 981 and the fix for bug #1406173 the
par2backend does not remove .par2 files anymore when removing
- This banch adds an unfiltered_list() method which is used in
delete() and delete_list()
* Updated man pages to reflect more contributors.
* Fix bug #1493573. Correct option typo in man page.
* Fix bug #1494228 CygWin: TypeError: basis_file must be a (true) file
- The problem that caused the change to tempfile.TemporaryFile was due
to the fact that os.tmpfile always creates its file in the system
temp directory, not in the directory specified. The fix applied was
to use os.tmpfile i
0.7.0403 Aug 2015 06:25
New in v0.7.04 (2015/08/02)
* Merged in lp: noizyland/duplicity/fix-progress
- Fixes bug 1264744. selection.filelist_globbing_get_sfs leaves the
filelist file object's position at the end of the file. When the
--progress option is used the filelists need to be read twice. On
the second read nothing is read from the file because file has
already been read and the position is EOF. This patch calls seek(0)
on the filelist to reset the position to BOF so that subsequent
read() calls will return data.
* Added pylint ignore error in webdavbackend.py.
* Merged in lp: bmerry/duplicity/pydrive-regular
- This implements the proposal made by somebody else
to allow the pydrive backend to work with a normal drive account instead
of a service account. It seems to be working for me: I was able to migrate
seamlessly from the gdocs backend. It's set up so that a service account
can still be used, depending on which environment variable is set.
The man page is updated to describe how to use the new functionality.
* Merged in lp: ed.so/duplicity/gdocs.pydrive
- make pydrive new gdocs default backend
- keep gdata backend as gdata+gdocs://
* Merged in lp: raymii/duplicity/fix-swiftbackend-max-10000-files-in-list
- Swiftclient by default returns at max 10000 files. By adding
full_listing=True we make sure all objects are returned.
* Fix a couple of PEP8 glitches.
* Fixed bug 791794 - description of --gpg-options is misleading, Simply
needed to add the '--' before the options as in "--opt1 --opt2=parm".
* Fixed bug 1465335 - pydrive still use files in trash can - with patch
from Kuang-che Wu to ignore trashed files.
* Fixed bug 1452263 - par2 option not working on small processors - with patch
0.7.0312 May 2015 22:45
New in v0.7.03 (2015/05/11)
* Merged in lp: aaron-whitehouse/duplicity/filelist_combine
- Merged globbing and non-globbing filelists to use the same code path
and all accept globbing characters. Added deprecation warning to the
--exclude-globbing-filelist and include-globbing-filelist options in
commandline.py and hid them from help output. Updated the manual
(and unit tests) accordingly.
- Note that this does trigger a change in behaviour for duplicity.
Previously, include patterns in include-filelist did not match files
in a directory that was included, so /usr/local in an include file
would not have matched /usr/local/doc. Now, this folder would be
included, as would occur if --include or the old
--include-globbing-filelist was used. Additional lines will therefore
need to be added to filelists to unambiguously exclude unwanted
subfolders, if this is intended.
- Mark --include-filelist-stdin and --exclude-fielist-stdin for
deprecation and hide from --help output.
* Fix bug 1432999 with hint from Antoine Afalo.
- '/'s at end of destination cause problems with onedrivebackend.
* Fix bug 1434702 with help from Robin Nehls
- incorrect response BackendException while downloading signatures file.
* Fix bug 1437789 with patch from pdf
- par2backend.py incorrect syntax in get()
* Merge in lp: stynor/duplicity/multi-backend
- A new backend that allows use of more than one backend stores (e.g. to
combine the available space from more than one cloud provider to make
a larger store available to duplicity).
* Move requirements section lower in manpage.
* Merge in lp: cemsbr/duplicity/duplicity
- Fix bug 1432229 in Copy.com backend:
Reply header has no content-type for JSON detection. Now, we also check
whether the content starts with ' '.
* Fixed bug 1444404 with patch from Samu Nuutamo
- rdiffdir patch crashes if a regular file is changed to a non-regular
file (symlink, fifo, ...)
* Fixed bug 1448249 and bug 1449151 thanks to David Coppit.
0.7.0215 Mar 2015 00:25
Add mapping of SWIFT_REGIONNAME to select region inside SWIFT when a
provider proposes more than one region.
Azure Backend examples had invalid underscores in the container names.
Fixed deprecated gdocs API usage.
Fixed some tabs/spaces problems that were causing install failures.
Fixed variable typo in commandline.py that was causing build fails.
Aligned commandline.py options and help display contents.
Changed --s3_multipart_max_timeout to --s3-multipart-max-timeout to be
consistent with commandline option naming conventions.
Add "--exclude-older-than" commandline option, that allows you to only
back up files with a modification date newer than a particular threshold.
Misc fixes for a few PEP8 issues.
Fixes for 2to3 issues.
Fix for --pydevd debug environment and location under Eclipse.
Fix for bug where scp was actually working as scp and not working with
rsync.net because of using extraneous test command in restricted shell.