duplicity-team team mailing list archive
-
duplicity-team team
-
Mailing list archive
-
Message #04956
[Merge] lp:~ed.so/duplicity/remove_copyCom into lp:duplicity
edso has proposed merging lp:~ed.so/duplicity/remove_copyCom into lp:duplicity.
Commit message:
remove a small copy.com remainder in man page
Requested reviews:
duplicity-team (duplicity-team)
For more details, see:
https://code.launchpad.net/~ed.so/duplicity/remove_copyCom/+merge/363907
--
The attached diff has been truncated due to its size.
Your team duplicity-team is requested to review the proposed merge of lp:~ed.so/duplicity/remove_copyCom into lp:duplicity.
=== modified file 'CHANGELOG'
--- CHANGELOG 2019-02-25 16:30:59 +0000
+++ CHANGELOG 2019-03-04 12:09:45 +0000
@@ -1,3 +1,4 @@
+<<<<<<< TREE
New in v0.8.00 (2019/??/??)
---------------------------
* Merged in lp:~aaron-whitehouse/duplicity/remove-python26
@@ -128,46 +129,183 @@
- change util.uexc() back to bare uexc()
* Fixed bug #1668750 - Don't mask backend errors
- added exception prints to module import errors
+=======
+New in v0.7.19 (2019/??/??)
+-----------------------------
+* Fixed bug #1798206 and bug #1798504
+ - Made paramiko a global with import during __init__ so it would
+ not be loaded unless needed.
+* Merged in lp:~mterry/duplicity/pydrive-root-0.7
+ - Just a tiny fix to clean up the temporary file we create to find the root ID.
+ It's a little surprising for the user if they wind up with this file called
+ "i_am_in_root" that they don't know where it came from. Almost sounds like
+ they were hacked.
+
+
+New in v0.7.18.2 (2018/10/17)
+-----------------------------
+* Fixed bug #1788558 again
+ - If we get None for size skip check.
+
+
+New in v0.7.18.1 (2018/08/27)
+-----------------------------
+* Fixed bug #1788558
+ - Treat None as zero when printing log.
+* Revert fix for bug #1788599.
+ - Was causing problems with directory names
+
+
+New in v0.7.18 (2018/08/21)
+---------------------------
+* Fixed bug #1756550 Online html man page is showing a 0 byte file
+* Partial fix of bug #1734144 with patch from Joris van Eijden
+ - Note: this is really just a partial fix for now, since it only covers
+ the case where the local size does not yet match the remote size. A
+ case where -1 is the returned length is not fixed.
+ - Number of retries is now same as globals.num_retries.
+ - Added standoff delay of 0.5 sec per attempt.
+* Fixed bug #1764432 with patch from Robke Geenen
+ - Just join the parts together.
+* Fixed bug #1717935 with suggestion from strainu
+ - Use urllib.quote_plus() to properly quote pathnames passed via URL
+* Fixed bug #1780617 Test fail when GnuPG >= 2.2.8
+ - Relevant change in GnuPG 2.2.8: https://dev.gnupg.org/T3981
+ - Added '--ignore-mdc-error' to all gpg calls made.
+* Fixed bug #1785520 with patch from Chris Hunt
+ - Fix for B2 version 1.3.4 just released
+* Fix a 2to3 error in ssh_paramiko_backend.py
+
+
+New in v0.7.17 (2018/02/26)
+---------------------------
+* Removed changes made in bug #1044715 Provide a file history feature
+ - Changes required too much memory to carry in the manifest
+ - The option --file-changed in collection-status is now invalid
+ - This will close bugs: #1730451, #896728, #1526557, #1550176
+ - Starting a full backup will be needed to fully utilize this fix
+* Fix update of Launchpad Translations. Translations were not being picked
+ up on a daily basis and we got several months behind.
+
+
+New in v0.7.16 (2018/01/12)
+---------------------------
+* Fixed bug #1733057 AttributeError: 'GPGError' object has no attribute 'decode'
+ - Replaced call to util.ufn() with call to util.uexc(). Stupid typo!
+* More fixes for Unicode handling
+ - Default to 'utf-8' if sys.getfilesystemencoding() returns 'ascii' or None
+ - Fixed bug #1386373 with suggestion from Eugene Morozov
+* Patched in lp:~crosser/duplicity/fix-oauth-flow
+ - Fixed bug #1638236 "BackendException with oauth2client 4.0.0"
+* Patched in lp:~crosser/duplicity/dpbx-fix-file-listing
+ - Fixed bug #1639664 "Dropbox support needs to be updated for Dropbox SDK v7.1"
+* Patched in lp:~crosser/duplicity/fix-small-file-upload
+ - Fixed small file upload changes made in Dropbox SDK v7.1
+* Fix pylint error in webdavbackend.py
+
+
+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 Wolfgang Rohdewald
+ - 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 in collection-status not present
+ - This will keep memory usage lower in non collection-status operations
+* Fixed bug #1723890 with patch from Killian Lackhove
+ - Fixes error handling in pydrivebackend.py
+* Fixed bug #1730902 GPG Error Handling
+ - use util.ufn() not str() to handle encoding
+
+
+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 filelist
+ - Added unit test to make sure detection works
+ - Note: while this condition is serious, it will not affect the basic backup and restore
+ functions. Interactive options like --list-files-changed and --file-changed will not
+ work correctly for this backup set, so it is advised to run a full backup as soon as
+ possible after this error occurs.
+* Fixed bug #1638033 Remove leading slash on --file-to-restore
+ - code already used rstrip('/') so change to just strip('/')
+
+
+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:
+ https://superuser.com/questions/61185/why-do-i-get-files-like-foo-in-my-tarball-on-os-x
+
+
+New in v0.7.13 (2017/06/12)
+---------------------------
+>>>>>>> MERGE-SOURCE
* 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.
-* Merged in lp:~dernils/duplicity/testing
- - Fixed minor stuff in requirements.txt.
- - Added a Dockerfile for testing.
- - Minor changes to README files.
- - Added README-TESTING with some information on testing.
-* Merged in lp:~dernils/duplicity/documentation
- - Minor changes to README-REPO, README-TESTING
- - Also redo the changes to requirements.txt and Dockerfile
-* Merged in lp:~dawgfoto/duplicity/replicate
- - Add replicate command to replicate a backup (or backup
- sets older than a given time) to another backend, leveraging
- duplicity's backend and compression/encryption infrastructure.
-* Fixed some incoming PyLint and PEP-8 errors.
-* Merged in lp:~marix/duplicity/add-azure-arguments
- - Using the Azure backend to store large amounts of data we found that
- performance is sub-optimal. The changes on this branch add command line
- parameters to fine-tune some parameters of the Azure storage library,
- allowing to push write performance towards Azure above 1 Gb/s for large
- back-ups. If a user does not provide the parameters the defaults of the
- Azure storage library will continue to be used.
-* Replace incoming non-ASCII chars in commandline.py
-* bzr does not honor perms so fix the perms at the start of the testing and
- avoid annoying error regarding testing/gnupg having too lenient perms
-* Merged in lp:~dernils/duplicity/DockerfileConvenience
- - Added a few tools to the Dockerfile that make life easier
* Fixed bug #1320832 with suggestion from Oskar Wycislak
- Use chunks instead of reading it all in swiftbackend
-* Merged in lp:~dernils/duplicity/DockerfileConvenience
- - Add a few files that are the beginning of further infrastructure based
- on docker. It contains a Dockerfile for a simple ftp server (used for
- backend testing) and a setup script that can be used to set up the
- complete test environment.
-* Moved Dockerfile for duplicitytest into testinfrastructure/duplicity_test
-* Moved some things around in testing/infrastructure to clean up
* 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
@@ -176,17 +314,6 @@
- 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
-* Merged in lp:~aaron-whitehouse/duplicity/tox_pylint_fixes
- - Changes needed to run-tests without pylint E0401(import-error) errors
-* Merged in lp:~xlucas/duplicity/swift-storage-policies
- - This brings support for Swift storage policies: when using a Swift
- backend, you can specify the policy containers should be operating on.
- - This is similar to AWS Cloud Storage classes (ia, rrs, glacier and so on).
-* Merged in lp:~dernils/duplicity/Dockerfile
- - Added another backend to the docker test infrastructure, updated the setup
- for testing and updated the documentation.
-* Merged in lp:~dernils/duplicity/Dockerfile
- - Now have subnet name and IP of the subnet for testing as a variable.
* 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
@@ -203,19 +330,13 @@
* Fix bug #1672540 with patch from Benoit Nadeau
- Rename would fail to move par files when moving across filesystems.
- Patch uses shutil.move() to do the rename instead.
-* Merged in lp:~dernils/duplicity/docker-compose
- - Test Infrastructure now utilizing docker-compose
-* Merged in lp:~aaron-whitehouse/duplicity/08-fix-man-verify
- - Fix description of --verify and --compare-data in the man page. Now
- clarifies that verify compares the restored files to hashes stored at
- backup date, while --compare-data compares restored files to files
- in target_path.
* Fixed bug #1265765 with patches from Matthias Larisch and Edgar Soldin
- SSH Paramiko backend now uses BufferedFile implementation to enable
collecting the entire list of files on the backend.
* Copy.com is gone so remove copycombackend.py.
* Merged in lp:~xlucas/duplicity/swift-multibackend-bug
- Fix a bug when swift backend is used in a multibackend configuration.
+<<<<<<< TREE
* Fixed problem in dist/makedist when building on Mac where AppleDouble
files were being created in the tarball. See:
https://superuser.com/questions/61185/why-do-i-get-files-like-foo-in-my-tarball-on-os-x
@@ -404,6 +525,116 @@
(Hot,Cool,Archive) used for uploaded files.
* Merged in lp:~vam9/duplicity/0.8-series-s3-kms-support
- Added s3 kms server side encryption support with kms-grants support.
+=======
+* Merged in lp:~duplicity-team/duplicity/po-updates
+
+
+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
+
+
+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 special characters). This preserves the behaviour that an expression ending in "/" only
+ matches a folder, but now the contents of any matching folder is included.
+* Fix problem with gpg2 in yakety and zesty
+* Fix Bug #1642813 with patch from Ravi
+ - If stat() returns None, don't attempt to set perms.
+* Merged in lp:~breunigs/duplicity/amazondrive3
+ - As reported on the mailinglist, if a space is entered while duplicity asks for the URL, it fails.
+ Since all important spaces are URL encoded anyway, this should be fine even if there are spaces in
+ the URL at all. I also patched it in the onedrive backend, because it must have similar issues.
+* Prep for 0.7.11
+
+
+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
+ https://code.launchpad.net/~mwilck/duplicity/0.7-series/+merge/301332
+ 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
+
+
+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
+>>>>>>> MERGE-SOURCE
New in v0.7.08 (2016/07/02)
@@ -444,6 +675,7 @@
- Set line length error length to 120 (matching tox.ini) for PEP8 and
fixed E501(line too long) errors.
* Merged in lp:~duplicity-team/duplicity/po-updates
+<<<<<<< TREE
* Merged in lp:~aaron-whitehouse/duplicity/08-unicode
- Many strings have been changed to unicode for better handling of international
characters and to make the transition to Python 3 significantly easier, primarily
@@ -463,6 +695,10 @@
they were hacked.
* Fixed bug #1817375 with hint from mgorse
- Added 'global pexpect' at end of imports
+=======
+* Fix bug using 40-char sign keys, from Richard McGraw on mail list
+ - Remove truncation of argument and adjust comments
+>>>>>>> MERGE-SOURCE
New in v0.7.07.1 (2016/04/19)
@@ -480,6 +716,9 @@
* Fixed bug #1570293 duplicity is very slow due to excessive fsync
- removed flush() after write.
- revert to previous version
+* 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).
New in v0.7.07 (2016/04/10)
@@ -732,9 +971,6 @@
* Merged in lp:~ed.so/duplicity/gpg.binary
- new parameter --gpg-binary allows user to point to a different gpg binary,
not necessarily in path
-* Merged in lp:~ed.so/duplicity/gpg.binary
- - new parameter --gpg-binary allows user to point to a different gpg binary,
- not necessarily in path
* Merged in lp:~aaron-whitehouse/duplicity/fix_POTFILES.in_and_run-tests
- Fixed two filename references in po/POTFILES.in, a mistake which crept in in
rev 1093 and caused testing/run-tests to fail with "IndexError: list index
=== modified file 'Changelog.GNU'
--- Changelog.GNU 2019-02-25 16:30:59 +0000
+++ Changelog.GNU 2019-03-04 12:09:45 +0000
@@ -1,3 +1,4 @@
+<<<<<<< TREE
2019-02-25 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Merged in lp:~mgorse/duplicity/0.8-series
@@ -333,43 +334,271 @@
- giobackend: handle a wider variety of gio backends by making less assumptions;
in particular, this fixes the google-drive: backend
+=======
+2019-02-25 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Merged in lp:~mterry/duplicity/pydrive-root-0.7
+ - Just a tiny fix to clean up the temporary file we create to find the root ID.
+ It's a little surprising for the user if they wind up with this file called
+ "i_am_in_root" that they don't know where it came from. Almost sounds like
+ they were hacked.
+
+2018-10-17 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1798206 and bug #1798504
+ - Made paramiko a global with import during __init__ so it would
+ not be loaded unless needed.
+
+2018-10-17 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Prep for 0.7.18.2
+
+2018-08-27 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1788558 again
+ - If we get None for size skip check.
+
+2018-08-27 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Prep for 0.7.18.1
+
+2018-08-26 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1788558
+ - Treat None as zero when printing log.
+ * Revert fix for bug #1788599.
+ - Was causing problems with directory names
+
+2018-08-21 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fix a 2to3 error in ssh_paramiko_backend.py
+ * Merged in lp:~duplicity-team/duplicity/po-updates
+ * Prep for 0.7.18
+
+2018-08-11 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1785520 with patch from Chris Hunt
+ - Fix for B2 version 1.3.4 just released
+
+2018-07-08 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1780617 Test fail when GnuPG >= 2.2.8
+ - Relevant change in GnuPG 2.2.8: https://dev.gnupg.org/T3981
+ - Added '--ignore-mdc-error' to all gpg calls made.
+
+2018-05-07 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1717935 with suggestion from strainu
+ - Use urllib.quote_plus() to properly quote pathnames passed via URL
+
+2018-05-01 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * More fixes for bug #1734144
+ - Number of retries is now same as globals.num_retries.
+ - Added standoff delay of 0.5 sec per attempt.
+ * Fixed bug #1764432 with patch from Robke Geenen
+ - Just join the parts together.
+
+2018-04-04 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Partial fix of bug #1734144 with patch from Joris van Eijden
+ - Note: this is really just a partial fix for now, since it only covers
+ the case where the local size does not yet match the remote size. A
+ case where -1 is the returned length is not fixed.
+
+2018-03-17 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1756550 Online html man page is showing a 0 byte file
+
+2018-02-26 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fix update of Launchpad Translations. Translations were not being picked
+ up on a daily basis and we got several months behind.
+ * Prep for 0.7.17
+
+2018-02-01 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Removed changes made in bug #1044715 Provide a file history feature
+ - Changes required too much memory to carry in the manifest
+ - The option --file-changed in collection-status is now invalid
+ - This will close bugs: #1730451, #896728, #1526557, #1550176
+ - Starting a full backup will be needed to fully utilize this fix
+
+2018-01-12 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fix pylint error in webdavbackend.py
+ * Prep for 0.7.16
+
+2017-11-28 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Patched in lp:~crosser/duplicity/fix-small-file-upload
+ - Fixed small file upload changes made in Dropbox SDK v7.1
+
+2017-11-25 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Patched in lp:~crosser/duplicity/fix-oauth-flow
+ - Fixed bug #1638236 "BackendException with oauth2client 4.0.0"
+ * Patched in lp:~crosser/duplicity/dpbx-fix-file-listing
+ - Fixed bug #1639664 "Dropbox support needs to be updated for Dropbox SDK v7.1"
+
+2017-11-23 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * More fixes for Unicode handling
+ - Default to 'utf-8' if sys.getfilesystemencoding() returns 'ascii' or None
+ - Fixed bug #1386373 with suggestion from Eugene Morozov
+
+2017-11-18 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1733057 AttributeError: 'GPGError' object has no attribute 'decode'
+ - Replaced call to util.ufn() with call to util.uexc(). Stupid typo!
+
+2017-11-09 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Prep for 0.7.15
+
+2017-11-09 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1730902 GPG Error Handling
+ - use util.ufn() not str() to handle encoding
+
+2017-11-01 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1723890 with patch from Killian Lackhove
+ - Fixes error handling in pydrivebackend.py
+
+2017-10-31 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1720159 - Cannot allocate memory with large manifest file since 0.7.03
+ - filelist is not read if --file-changed option in collection-status not present
+ - This will keep memory usage lower in non collection-status operations
+
+2017-10-26 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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
+
+2017-10-16 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Fixed bug #1654756 with new b2backend.py module from Vincent Rouille
+ - Faster (big files are uploaded in chunks)
+ - Added upload progress reporting support
+
+2017-10-12 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Merged in lp:~mterry/duplicity/rename-dep
+ - Make rename command a dependency for LP build
+
+2017-09-22 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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.
+
+2017-09-13 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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.
+
+2017-09-07 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Merged 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.
+
+2017-09-06 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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.
+
+2017-08-31 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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 filelist
+ - Added unit test to make sure detection works
+ - Note: while this condition is serious, it will not affect the basic backup and restore
+ functions. Interactive options like --list-files-changed and --file-changed will not
+ work correctly for this backup set, so it is advised to run a full backup as soon as
+ possible after this error occurs.
+ * Fixed bug #1638033 Remove leading slash on --file-to-restore
+ - code already used rstrip('/') so change to just strip('/')
+ * Prep for 0.7.14
+
+2017-08-29 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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
+
+2017-08-28 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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).
+
+2017-08-15 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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
+
+2017-08-06 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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
+
+>>>>>>> MERGE-SOURCE
2017-07-20 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed encrypted remote manifest handling to merely put out a non-fatal
error message and continue if the private key is not available.
-2017-07-19 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+2017-07-18 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed slowness in 'collection-status' by basing the status on the
remote system only. The local cache is treated as empty.
2017-07-11 Kenneth Loafman <kenneth@xxxxxxxxxxx>
- * Patched in lp:~dawgfoto/duplicity/skip_sync_collection_status
+ * 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
-2017-06-30 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~xlucas/duplicity/multibackend-prefix-affinity
- - Support prefix affinity in multibackend.
- * Merged in lp:~xlucas/duplicity/pca-backend
- - Add support for OVH Public Cloud Archive backend.
- * Fixed PEP8 and 2to3 issues.
-
-2017-06-23 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~dawgfoto/duplicity/replicate
- - Add integration test for newly added replicate command.
- - Also see https://code.launchpad.net/~dawgfoto/duplicity/replicate/+merge/322836.
-
-2017-06-19 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+2017-06-18 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed problem in dist/makedist when building on Mac where AppleDouble
files were being created in the tarball. See:
https://superuser.com/questions/61185/why-do-i-get-files-like-foo-in-my-tarball-on-os-x
+ * Prep for 0.17.13.1
+
+2017-06-10 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Merged in lp:~duplicity-team/duplicity/po-updates
+ * Prep for 0.7.13
2017-06-10 Kenneth Loafman <kenneth@xxxxxxxxxxx>
@@ -380,19 +609,6 @@
* Merged in lp:~xlucas/duplicity/swift-multibackend-bug
- Fix a bug when swift backend is used in a multibackend configuration.
-2017-06-04 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~aaron-whitehouse/duplicity/08-fix-man-verify
- - Fix description of --verify and --compare-data in the man page. Now
- clarifies that verify compares the restored files to hashes stored at
- backup date, while --compare-data compares restored files to files
- in target_path.
-
-2017-06-03 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~dernils/duplicity/docker-compose
- - Test Infrastructure now utilizing docker-compose
-
2017-06-02 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fix bug #1672540 with patch from Benoit Nadeau
@@ -418,26 +634,6 @@
- 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.
-2017-05-15 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~dernils/duplicity/Dockerfile
- - Now have subnet name and IP of the subnet for testing as a variable.
-
-2017-05-14 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~xlucas/duplicity/swift-storage-policies
- - This brings support for Swift storage policies: when using a Swift
- backend, you can specify the policy containers should be operating on.
- - This is similar to AWS Cloud Storage classes (ia, rrs, glacier and so on).
- * Merged in lp:~dernils/duplicity/Dockerfile
- - Added another backend to the docker test infrastructure, updated the setup
- for testing and updated the documentation.
-
-2017-05-12 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~aaron-whitehouse/duplicity/tox_pylint_fixes
- - Changes needed to run-tests without pylint E0401(import-error) errors
-
2017-05-11 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed bug #1320641 and others regarding lockfile
@@ -452,53 +648,12 @@
IOError exception saying that too many files are open. This causes
restores to fail randomly, after thousands of files have been restored.
-2017-05-06 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~dernils/duplicity/DockerfileConvenience
- - Add a few files that are the beginning of further infrastructure based
- on docker. It contains a Dockerfile for a simple ftp server (used for
- backend testing) and a setup script that can be used to set up the
- complete test environment.
- * Moved Dockerfile for duplicitytest into testinfrastructure/duplicity_test
- * Moved some things around in testing/infrastructure to clean up
-
-2017-05-05 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~dernils/duplicity/DockerfileConvenience
- - Added a few tools to the Dockerfile that make life easier
+2017-05-07 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
* Fixed bug #1320832 with suggestion from Oskar Wycislak
- Use chunks instead of reading it all in swiftbackend
-2017-05-04 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~dawgfoto/duplicity/replicate
- - Add replicate command to replicate a backup (or backup
- sets older than a given time) to another backend, leveraging
- duplicity's backend and compression/encryption infrastructure.
- * Fixed some incoming PyLint and PEP-8 errors.
- * Merged in lp:~marix/duplicity/add-azure-arguments
- - Using the Azure backend to store large amounts of data we found that
- performance is sub-optimal. The changes on this branch add command line
- parameters to fine-tune some parameters of the Azure storage library,
- allowing to push write performance towards Azure above 1 Gb/s for large
- back-ups. If a user does not provide the parameters the defaults of the
- Azure storage library will continue to be used.
- * Replace incoming non-ASCII chars in commandline.py
- * bzr does not honor perms so fix the perms at the start of the testing and
- avoid annoying error regarding testing/gnupg having too lenient perms
-
-2017-04-23 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~dernils/duplicity/testing
- - Fixed minor stuff in requirements.txt.
- - Added a Dockerfile for testing.
- - Minor changes to README files.
- - Added README-TESTING with some information on testing.
- * Merged in lp:~dernils/duplicity/documentation
- - Minor changes to README-REPO, README-TESTING
- - Also redo the changes to requirements.txt and Dockerfile
-
-2017-04-22 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+2017-04-20 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed bug #1680682 with patch supplied from Dave Allan
- Only specify --pinentry-mode=loopback when --use-agent is not specified
@@ -507,6 +662,10 @@
- Use shutil.copyfile instead of os.system('cp ...')
- Should reduce overhead of os.system() memory usage.
+2017-03-21 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Prep for 0.7.12
+
2017-03-13 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed bug #1668750 - Don't mask backend errors
@@ -517,55 +676,22 @@
* Fixed bug #1671852 - Code regression caused by revision 1108
- change util.uexc() back to bare uexc()
-2017-03-05 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in p:~aaron-whitehouse/duplicity/pep8_E402_fixes
- - Fixed PEP8 errors: E402 module level import not at top of file
-
-2017-03-02 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~benoit.bertholon/duplicity/duplicity
- - Use the globals.archive_dir variable to store only a string
- in the case of a path, uses globals.archive_dir_path
-
2017-02-21 Kenneth Loafman <kenneth@xxxxxxxxxxx>
- * Merged in lp:~marix/duplicity/azure-storage-0.30.0-plus
- - This makes the Azure backend compatible with version 0.30.0 and up of the
- underlying azure-storage package.
- * Merged in lp:~marix/duplicity/azure-storage-sas
- - This branch adds support for Shared Access Signature to the Azure backend
- which allows to run Duplicity with a minimal set of permissions.
- * Merged in lp:~aaron-whitehouse/duplicity/pep8_test_fixes
- - Fix PEP-8 testing by moving to using pycodestyle library.
- - Temporarily add ignores to allow these tests to pass.
- - Fix E305 PEP8 errors: expected 2 blank lines after class or function definition, found 1.
- * Merged in lp:~benoit.bertholon/duplicity/duplicity
- - Fixes bug #1666194 - ProcessCommandLine function called twice fail and arglist argument not used
- * Fixed variable name change in last merge which broke a bunch of tests
- - Changed archive_dir_root back to archive_dir
* 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
-2017-02-12 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~aaron-whitehouse/duplicity/08-python-futurize-stage-1
- - Made many of the safer changes for improved Python 3 support (python-future's futurize -stage1)
- without functional change to the code (and leaving the isinstance(s, types.StringType) tests unchanged).
- - Created Python 2/3 compatible tests for int and long.
- - Update setup.py to show only Python 2.7 support.
-
2017-02-11 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* 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
2017-02-08 Kenneth Loafman <kenneth@xxxxxxxxxxx>
- * Merged in lp:~aaron-whitehouse/duplicity/08-refactor-unit-test-globmatch
- - Rename path_matches_glob_fn to select_fn_from_glob, as this more accurately reflects the return value.
- - Significantly refactored unit/test_globmatch.py to make this cleaner and clearer.
* Fixed bug #1657916 with patch supplied by Daniel Harvey
- B2 provider cannot handle two backups in the same bucket
@@ -573,13 +699,6 @@
* Add detail about import exceptions in onedrivebackend.py
-2017-01-30 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~aaron-whitehouse/duplicity/08-merge-glob-parsers
- - Use a single code path for glob strings whether or not these contain special
- characters/wildcards (glob_get_normal_sf) and remove glob_get_filename_sf and glob_get_tuple_sf.
- - Remove run-tests-ve as this was identical to run-tests.
-
2017-01-24 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Merged in lp:~matthew-t-bentley/duplicity/duplicity
@@ -588,6 +707,13 @@
- 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
+2017-01-21 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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
+
2017-01-19 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed bug #1655268 "--gpg-binary option not working"
@@ -599,13 +725,10 @@
- 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
- * Merged in lp:~aaron-whitehouse/duplicity/0-8-merge_selection_tests
- - Merge in TestExcludeIfPresent from 0.7-series, which tests the behaviour of
- duplicity's --exclude-if-present option.
- - Move and rename TestTrailingSlash2 test (was duplicate name) as in 0.7-series.
- - Fix PEP error on adbackend.py.
- - Add jottalib as a tox dep to fix pylint error.
- - Remove unnecessary skipUnless Linux as per 0.7-series.
+
+2016-12-31 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Prep for 0.7.11
2016-12-29 Kenneth Loafman <kenneth@xxxxxxxxxxx>
@@ -616,9 +739,8 @@
Since all important spaces are URL encoded anyway, this should be fine even if there are spaces in
the URL at all. I also patched it in the onedrive backend, because it must have similar issues.
-2016-12-25 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+2016-12-24 Kenneth Loafman <kenneth@xxxxxxxxxxx>
- * Fix some issues with testing on MacOS
* Fix problem with gpg2 in yakety and zesty
2016-12-11 Kenneth Loafman <kenneth@xxxxxxxxxxx>
@@ -652,21 +774,10 @@
* Fixed bug #1642098 - does not create PAR2 archives when '--par2-options' is used
- Missing space between par2-options plus default options
-2016-11-07 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~breunigs/duplicity/amazondrive2
- - Fixed variable renaming issue
-
2016-11-01 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed bug #1621194 with code from Tornhoof
- Do backup to google drive working without a service account
- * Merged in lp:~havard/duplicity/jottacloudbackend
- - Adds support for a new backend, jottacloud.com, using the scheme `jottacloud:/<folder>`.
- - Reverse-engineered library, `jottalib`: http://github.com/havardgulldahl/jottalib
- - Here's how you set up jottalib https://github.com/havardgulldahl/jottalib/wiki
- * Merged in lp:~breunigs/duplicity/amazondrive
- - Provide a native backend for AmazonDrive
2016-10-22 Kenneth Loafman <kenneth@xxxxxxxxxxx>
@@ -680,6 +791,11 @@
* Fixed bug #1623342 with patch from Daniel Jakots
- failing test on OpenBSD because tar/gtar not found
+2016-09-06 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * 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
+
2016-08-22 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed bugs #815510 and #1615480
@@ -687,6 +803,10 @@
* Merged in lp:~mstoll-de/duplicity/duplicity
- Backblaze announced a new domain for the b2 api
+2016-08-20 Kenneth Loafman <kenneth@xxxxxxxxxxx>
+
+ * Prep for 0.7.10
+
2016-08-18 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Merged in lp:~fenisilius/duplicity/acd_init_mkdir
@@ -707,27 +827,24 @@
2016-07-28 Kenneth Loafman <kenneth@xxxxxxxxxxx>
- * Merged in lp:~mwilck/duplicity/duplicity
+ * Merged in lp:~mwilck/duplicity/0.7-series
- Speedup of path_matches_glob() by about 8x. See
- https://code.launchpad.net/~mwilck/duplicity/duplicity/+merge/301268
+ https://code.launchpad.net/~mwilck/duplicity/0.7-series/+merge/301332
for more details.
+ * Remove -w from setsid in functional tests.
2016-07-24 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* 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).
+ * Prep for 0.7.09
2016-07-20 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Fixed bug #1600692 with patch from Wolfgang Rohdewald
- Allow symlink to have optional trailing slash during verify.
-2016-07-03 Kenneth Loafman <kenneth@xxxxxxxxxxx>
-
- * Merged in lp:~aaron-whitehouse/duplicity/remove-python26
- - Remove Python 2.6 support references and tests.
-
2016-07-02 Kenneth Loafman <kenneth@xxxxxxxxxxx>
* Merged in lp:~aaron-whitehouse/duplicity/PEP8_W503_fixes
=== modified file 'README'
--- README 2018-10-07 11:54:04 +0000
+++ README 2019-03-04 12:09:45 +0000
@@ -19,7 +19,11 @@
REQUIREMENTS:
+<<<<<<< TREE
* Python v2.7
+=======
+ * Python v2.6 or later
+>>>>>>> MERGE-SOURCE
* librsync v0.9.6 or later
* GnuPG for encryption
* fasteners 0.14.1 or later for concurrency locking
@@ -34,6 +38,7 @@
* Python development files, normally found in module 'python-dev'.
* librsync development files, normally found in module 'librsync-dev'.
+ * internationalization tools, normally found in module 'intltool'.
A NOTE ON GnuPGInterface.py AND MULTIPLE GPG PROCESSES:
=== modified file 'README-REPO'
--- README-REPO 2017-07-11 14:55:38 +0000
+++ README-REPO 2019-03-04 12:09:45 +0000
@@ -26,3 +26,56 @@
or
PYTHONPATH=$DUP_ROOT bin/rdiffdir
+
+-----------------------
+Running the unit tests:
+-----------------------
+
+To run all tests:
+cd testing; ./run-tests
+
+You can run specific tests using:
+tox -- -s [folder].[folder].[file].[class].[test]
+For example:
+tox -- -s testing.unit.test_selection
+or:
+tox -- -s testing.unit.test_selection.MatchingTest.test_tuple_include
+
+Note: some tests require rdiff and pylint to be installed on the system for
+them to pass.
+
+Please run all tests on your branch (run-tests) before proposing a merge, to
+ensure that all tests pass. The decorator @unittest.expectedFailure can be used
+to commit a known-failing test case without breaking the test suite, for
+example to exhibit the behaviour in a bug report before it has been fixed:
+
+if sys.version_info < (2, 7):
+ import unittest2 as unittest
+else:
+ import unittest
+
+
+class TestClass(unittest.TestCase):
+ """Test class to show expectedFailure"""
+
+ @unittest.expectedFailure
+ def test_expected_failure(self):
+ """Test behaviour of expectedFailure"""
+ self.assertEqual(1, 2)
+
+-----------------------------------------
+Testing against multiple Python versions:
+-----------------------------------------
+
+Duplicity currently supports Python versions v2.6 or later. Duplicity uses tox
+to make it easy to test your code against multiple Python versions. Running
+tests using the commands above will automatically test code against both
+Python v2.6 and v2.7, if you have both installed on your system. It will also
+test against the versions of dependencies used by the Launchpad build system.
+You can test against a single environment, e.g.
+tox -e py26
+for example if you are working on fixing a bug, but please do a full run-tests
+before submitting a merge request.
+
+For instructions on installing Python v2.6 on newer versions of Ubuntu, see
+https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes
=== removed file 'README-TESTING'
--- README-TESTING 2017-05-14 07:17:59 +0000
+++ README-TESTING 1970-01-01 00:00:00 +0000
@@ -1,138 +0,0 @@
-# Testing duplicty
-
-## Introduction
-Duplicitys test concept bases on unit test.
-All tests are contained in the /testing folder of the main repository.
-
-As to see in the following sketch, there are several levels of testing duplicity and each can be used directly.
-
- ┌─────────────────────┐
- │ docker image │
- ├─────────────────────┴────┐
- │ │
- │ ┌──────────────────┐ │
- │ │ tox │ │
- │ └──────────────────┘ │
- │ │ │
- │ ▼ │
- │ ┌──────────────────┐ │
- │ │ unittests │ │
- │ └──────────────────┘ │
- │ │ │
- │ ▼ │
- │ ┌──────────────────┐ │
- │ │ duplicity │ │
- │ └──────────────────┘ │
- │ │
- └──────────────────────────┘
-1. Testing directly using __setup.py__
-Assuming that your machine has all the required dependencies installed, you can start all the unit tests by simply typing
-
-‘setup.py test‘
-
-2. Using __tox__
-Tox is a generic virtualenv management and test command line tool that is used for checking your package installs correctly with different Python versions and interpreters. It
-runs the tests in each of the environments that are configured in the tox.ini file (see root folder of the repository)
-
-Duplicity uses tox to make it easy to test your code against multiple
-environments. Running tests using the commands above will automatically test
-code against different supported environments, including the versions of
-dependencies used by the Launchpad build system.
-
-A tox run can be started simply by typing
-
-‘tox‘
-
-from the main duplicity folder.
-
-You can run specific tests using:
-‘tox -- -s [folder].[folder].[file].[class].[test]‘
-For example:
-‘tox -- -s testing.unit.test_selection‘
-or:
-‘tox -- -s testing.unit.test_selection.MatchingTest.test_tuple_include‘
-
-You can test against a single environment, e.g.
-‘tox -e py27‘
-for example if you are working on fixing a bug, but please do a full run-tests
-before submitting a merge request.
-
-Note: some tests require rdiff and pylint to be installed on the system for
-them to pass.
-
-Please run all tests on your branch (run-tests) before proposing a merge, to
-ensure that all tests pass. The decorator @unittest.expectedFailure can be used
-to commit a known-failing test case without breaking the test suite, for
-example to exhibit the behaviour in a bug report before it has been fixed.
-
-3. Via a __docker__ image
-Testing on a developer's machine can be tricky. Testing duplicity requires a set of dependencies being installed and reacts sensitiviely to changes of the local python configuration. In order to make sure that such interactions do not pose any influence on executing the tests, docker is the technology of choice.
-Along with the tests, a docker image has been created (cf. Dockerfile in root folder of repo) that ensure the following things:
-- It bases on a clean Ubunut 16.04
-- It installs all the required packages that are needed for testing
-- It then branches the repository of duplicty to the folder /duplicty/testing within the docker image
-- And installs all the required python packages (as defined in the requirements.txt)
-Therewith, the docker image provides a clean and reproducible environment for executing the tests of duplicty.
-In order to get hands on the docker image you simply:
-1) Install Docker on your machine (https://docs.docker.com/engine/installation/)
-2) Start the image docker run -it dernils/duplicitytest /bin/bash (if you did not use the image before, it will be downloaded automatically)
-3) At the prompt of the docker image type:
-‘cd /testing‘
-‘tox‘
-to start a run of the test cases.
-
-## Dependencies for testing
-If you should prefer to execute the tests locally without using docker, the Dockerfile that is checked into the root folder of the repository contains useful information. It contains a section marked "The following packages are needed for testing duplicity". Within this section all dependencies that need to be installed on a machine to execute the test cases are identified.
-
-## Working with test coverage
-Python makes it easy to determine, how well the tests cover the source code.
-
-You first run the tests __under observation__ of the coverage script:
-‘coverage run setup.py test‘
-After that, a report can be generated by the use of the command:
-‘coverage html --omit="testing/*,/usr/*"‘
-
-The report will be generated and stored in the folder htmlcov.
-
-## The wider picture - supporting containers for testing
-Testing duplicity invokes backends. The backends are the places where the backup data is actually stored (e.g. an ftp server). In order to have the highest degree of control over the testing process, backends that can be set up locally are also operated in separated docker containers. The whole test infrastructure is shown in the following picture.
-
-┌─────────────────────┐ ┌──────────────────────────────────────────┐
-│docker image │ │docker image │
-│dernils/duplicitytest│ │dernils/duplicity_testinfrastructure_ssh │
-├─────────────────────┴────┐ ├──────────────────────────────────────────┴──┐
-│ │ │ │
-│ ┌──────────────────┐ │ │ ┌──────────────────┐ │
-│ │ tox │ │ ┌──┼──▶│ sshd │ │
-│ └──────────────────┘ │ │ │ └──────────────────┘ │
-│ │ │ │ │ │
-│ ▼ │ │ └─────────────────────────────────────────────┘
-│ ┌──────────────────┐ │ │ ┌──────────────────────────────────────────┐
-│ │ unittests │ │ │ │docker image │
-│ └──────────────────┘ │ │ │dernils/duplicity_testinfrastructure_ftp │
-│ │ │ │ ├──────────────────────────────────────────┴──┐
-│ ▼ │ │ │ │
-│ ┌──────────────────┐ │ │ │ ┌──────────────────┐ │
-│ │ duplicity │◀───┼─┴──┼──▶│ pure-ftpd │ │
-│ └──────────────────┘ │ │ └──────────────────┘ │
-│ │ │ │ │
-└────────────┼─────────────┘ └─────────────────────────────────────────────┘
- │
- │
- │
- └────────────┐
- │
- Internet .─────────┼─────────.
- _.────' │ `─────.
- _.─' │ `──.
- ,' ▼ `.
- ; ┌──────────────────┐ :
- : │ Dropbox │ ;
- ╲ └──────────────────┘ ╱
- `. ,'
- `──. _.─'
- `─────. _.────'
- `─────────────────'
-
-The docker images that contain the test infrastructure are defined in the folder /testing/infrastructure. There is a build script to compile the Dockerfile into actual images (build-duplicitiy-test.sh). However, as all images are also published on the docker hub, it is not necessary to build the images before starting testing. Testing can directly be started by using the script setup.sh. If the required docker images are not yet existing, locally, they will be downloaded by Docker.
-
=== modified file 'bin/duplicity'
--- bin/duplicity 2018-11-29 19:00:15 +0000
+++ bin/duplicity 2019-03-04 12:09:45 +0000
@@ -27,6 +27,7 @@
# Please send mail to me or the mailing list if you find bugs or have
# any suggestions.
+<<<<<<< TREE
from builtins import filter
from builtins import next
from builtins import map
@@ -34,21 +35,33 @@
from builtins import object
import duplicity.errors
import copy
+=======
+>>>>>>> MERGE-SOURCE
import gzip
import os
+import sys
+import time
+import types
+import traceback
import platform
+import statvfs
+import resource
import re
+<<<<<<< TREE
import resource
from os import statvfs
import sys
+=======
+>>>>>>> MERGE-SOURCE
import threading
-import time
-import traceback
-import types
+from datetime import datetime
import fasteners
-from datetime import datetime
-from duplicity import asyncscheduler
+from duplicity import log
+log.setup()
+
+import duplicity.errors
+
from duplicity import collections
from duplicity import commandline
from duplicity import diffdir
@@ -57,17 +70,23 @@
from duplicity import file_naming
from duplicity import globals
from duplicity import gpg
-from duplicity import log
from duplicity import manifest
from duplicity import patchdir
from duplicity import path
-from duplicity import progress
from duplicity import robust
from duplicity import tempdir
+from duplicity import asyncscheduler
from duplicity import util
-
+from duplicity import progress
+
+
+<<<<<<< TREE
if u'--pydevd' in sys.argv or os.getenv(u'PYDEVD', None):
import pydevd # pylint: disable=import-error
+=======
+if '--pydevd' in sys.argv or os.getenv('PYDEVD', None):
+ import pydevd # @UnresolvedImport
+>>>>>>> MERGE-SOURCE
pydevd.settrace()
# In a dev environment the path is screwed so fix it.
base = sys.path.pop(0)
@@ -75,8 +94,6 @@
base = os.path.sep.join(base)
sys.path.insert(0, base)
-log.setup()
-
# If exit_val is not None, exit with given value at end.
exit_val = None
@@ -317,10 +334,31 @@
return start_index, start_block, end_index, end_block
def validate_block(orig_size, dest_filename):
+<<<<<<< TREE
info = backend.query_info([dest_filename])[dest_filename]
size = info[u'size']
if size is None:
return # error querying file
+=======
+ """
+ Compare the remote size to the local one to ensure the transfer went
+ through.
+ Try to get the remote size 3 times because some systems take a little
+ time before they report the size accurately.
+ """
+ for attempt in range(0, globals.num_retries):
+ info = backend.query_info([dest_filename])[dest_filename]
+ size = info['size']
+ if size == orig_size:
+ break
+ if size is None:
+ return
+ log.Notice(_("Remote filesize %d for %s does not match local size %d, retrying.") %
+ (0 if size is None else size,
+ util.escape(dest_filename),
+ orig_size))
+ time.sleep(1 + (attempt * 0.5))
+>>>>>>> MERGE-SOURCE
if size != orig_size:
code_extra = u"%s %d %d" % (util.escape(dest_filename), orig_size, size)
log.FatalError(_(u"File %s was corrupted during upload.") % util.fsdecode(dest_filename),
@@ -465,7 +503,6 @@
# Upload the collection summary.
# bytes_written += write_manifest(mf, backup_type, backend)
- mf.set_files_changed_info(diffdir.stats.get_delta_entries_file())
return bytes_written
@@ -474,7 +511,7 @@
u"""
Return a fileobj opened for writing, save results as manifest
- Save manifest in globals.archive_dir_path gzipped.
+ Save manifest in globals.archive_dir gzipped.
Save them on the backend encrypted as needed.
@type man_type: string
@@ -494,7 +531,7 @@
manifest=True,
encrypted=globals.encryption)
- fh = dup_temp.get_fileobj_duppath(globals.archive_dir_path,
+ fh = dup_temp.get_fileobj_duppath(globals.archive_dir,
part_man_filename,
perm_man_filename,
remote_man_filename)
@@ -524,7 +561,7 @@
remote_sig_filename = file_naming.get(sig_type, encrypted=globals.encryption,
gzipped=globals.compression)
- fh = dup_temp.get_fileobj_duppath(globals.archive_dir_path,
+ fh = dup_temp.get_fileobj_duppath(globals.archive_dir,
part_sig_filename,
perm_sig_filename,
remote_sig_filename,
@@ -533,8 +570,13 @@
def full_backup(col_stats):
+<<<<<<< TREE
u"""
Do full backup of directory to backend, using archive_dir_path
+=======
+ """
+ Do full backup of directory to backend, using archive_dir
+>>>>>>> MERGE-SOURCE
@type col_stats: CollectionStatus object
@param col_stats: collection status
@@ -622,8 +664,13 @@
def incremental_backup(sig_chain):
+<<<<<<< TREE
u"""
Do incremental backup of directory to backend, using archive_dir_path
+=======
+ """
+ Do incremental backup of directory to backend, using archive_dir
+>>>>>>> MERGE-SOURCE
@rtype: void
@return: void
@@ -836,6 +883,7 @@
def check_signature():
u"""Thunk run when closing volume file"""
actual_sig = fileobj.fileobj.get_signature()
+<<<<<<< TREE
actual_sig = u"None" if actual_sig is None else actual_sig
sign_key = globals.gpg_profile.sign_key
sign_key = u"None" if sign_key is None else sign_key
@@ -843,6 +891,15 @@
if actual_sig[ofs:] != sign_key[ofs:]:
log.FatalError(_(u"Volume was signed by key %s, not %s") %
(actual_sig[ofs:], sign_key[ofs:]),
+=======
+ actual_sig = "None" if actual_sig is None else actual_sig
+ sign_key = globals.gpg_profile.sign_key
+ sign_key = "None" if sign_key is None else sign_key
+ ofs = -min(len(actual_sig), len(sign_key))
+ if actual_sig[ofs:] != sign_key[ofs:]:
+ log.FatalError(_("Volume was signed by key %s, not %s") %
+ (actual_sig[ofs:], sign_key[ofs:]),
+>>>>>>> MERGE-SOURCE
log.ErrorCode.unsigned_volume)
fileobj.addhook(check_signature)
@@ -907,7 +964,7 @@
col_stats.backend.delete(ext_remote)
for fn in ext_local:
try:
- globals.archive_dir_path.append(fn).delete()
+ globals.archive_dir.append(fn).delete()
except Exception:
pass
else:
@@ -1011,6 +1068,7 @@
_(u"Rerun command with --force option to actually delete."))
+<<<<<<< TREE
def replicate():
u"""
Replicate backup files from one remote to another, possibly encrypting or adding parity.
@@ -1127,6 +1185,8 @@
globals.backend.close()
+=======
+>>>>>>> MERGE-SOURCE
def sync_archive():
u"""
Synchronize local archive manifest file and sig chains to remote archives.
@@ -1199,7 +1259,7 @@
return (pr, loc_name, fn)
def remove_local(fn):
- del_name = globals.archive_dir_path.append(fn).name
+ del_name = globals.archive_dir.append(fn).name
log.Notice(_(u"Deleting local %s (not authoritative at backend).") %
util.fsdecode(del_name))
@@ -1266,14 +1326,14 @@
else:
gpg.GzipWriteFile(src_iter, tdp.name, size=sys.maxsize)
tdp.setdata()
- tdp.move(globals.archive_dir_path.append(loc_name))
+ tdp.move(globals.archive_dir.append(loc_name))
# get remote metafile list
remlist = globals.backend.list()
remote_metafiles, ignored, rem_needpass = get_metafiles(remlist)
# get local metafile list
- loclist = globals.archive_dir_path.listdir()
+ loclist = globals.archive_dir.listdir()
local_metafiles, local_partials, loc_needpass = get_metafiles(loclist)
# we have the list of metafiles on both sides. remote is always
@@ -1496,7 +1556,11 @@
# determine what action we're performing and process command line
action = commandline.ProcessCommandLine(sys.argv[1:])
+<<<<<<< TREE
globals.lockpath = os.path.join(globals.archive_dir_path.name, b"lockfile")
+=======
+ globals.lockpath = os.path.join(globals.archive_dir.name, "lockfile")
+>>>>>>> MERGE-SOURCE
globals.lockfile = fasteners.process_lock.InterProcessLock(globals.lockpath)
log.Debug(_(u"Acquiring lockfile %s") % globals.lockpath)
if not globals.lockfile.acquire(blocking=False):
@@ -1527,12 +1591,16 @@
check_resources(action)
# check archive synch with remote, fix if needed
+<<<<<<< TREE
if action not in [u"collection-status", u"replicate"]:
+=======
+ if action not in ["collection-status"]:
+>>>>>>> MERGE-SOURCE
sync_archive()
# get current collection status
col_stats = collections.CollectionsStatus(globals.backend,
- globals.archive_dir_path,
+ globals.archive_dir,
action).set_values()
while True:
@@ -1563,7 +1631,7 @@
log.Notice(_(u"Cleaning up previous partial %s backup set, restarting." % action))
last_backup.delete()
col_stats = collections.CollectionsStatus(globals.backend,
- globals.archive_dir_path,
+ globals.archive_dir,
action).set_values()
continue
break
@@ -1592,12 +1660,18 @@
verify(col_stats)
elif action == u"list-current":
list_current(col_stats)
+<<<<<<< TREE
elif action == u"collection-status":
if not globals.file_changed:
log.PrintCollectionStatus(col_stats, True)
else:
log.PrintCollectionFileChangedStatus(col_stats, globals.file_changed, True)
elif action == u"cleanup":
+=======
+ elif action == "collection-status":
+ log.PrintCollectionStatus(col_stats, True)
+ elif action == "cleanup":
+>>>>>>> MERGE-SOURCE
cleanup(col_stats)
elif action == u"remove-old":
remove_old(col_stats)
@@ -1605,8 +1679,11 @@
remove_all_but_n_full(col_stats)
elif action == u"sync":
sync_archive()
+<<<<<<< TREE
elif action == u"replicate":
replicate()
+=======
+>>>>>>> MERGE-SOURCE
else:
assert action == u"inc" or action == u"full", action
# the passphrase for full and inc is used by --sign-key
@@ -1665,8 +1742,13 @@
finally:
tempdir.default().cleanup()
+<<<<<<< TREE
if __name__ == u"__main__":
+=======
+
+if __name__ == "__main__":
+>>>>>>> MERGE-SOURCE
try:
# import cProfile
@@ -1703,8 +1785,13 @@
# For gpg errors, don't show an ugly stack trace by
# default. But do with sufficient verbosity.
util.release_lockfile()
+<<<<<<< TREE
log.Info(_(u"GPG error detail: %s")
% util.exception_traceback())
+=======
+ log.Info(_("GPG error detail: %s")
+ % util.exception_traceback())
+>>>>>>> MERGE-SOURCE
log.FatalError(u"%s: %s" % (e.__class__.__name__, e.args[0]),
log.ErrorCode.gpg_failed,
e.__class__.__name__)
@@ -1713,8 +1800,13 @@
util.release_lockfile()
# For user errors, don't show an ugly stack trace by
# default. But do with sufficient verbosity.
+<<<<<<< TREE
log.Info(_(u"User error detail: %s")
% util.exception_traceback())
+=======
+ log.Info(_("User error detail: %s")
+ % util.exception_traceback())
+>>>>>>> MERGE-SOURCE
log.FatalError(u"%s: %s" % (e.__class__.__name__, util.uexc(e)),
log.ErrorCode.user_error,
e.__class__.__name__)
@@ -1723,15 +1815,24 @@
util.release_lockfile()
# For backend errors, don't show an ugly stack trace by
# default. But do with sufficient verbosity.
+<<<<<<< TREE
log.Info(_(u"Backend error detail: %s")
% util.exception_traceback())
+=======
+ log.Info(_("Backend error detail: %s")
+ % util.exception_traceback())
+>>>>>>> MERGE-SOURCE
log.FatalError(u"%s: %s" % (e.__class__.__name__, util.uexc(e)),
log.ErrorCode.user_error,
e.__class__.__name__)
except Exception as e:
util.release_lockfile()
+<<<<<<< TREE
if u"Forced assertion for testing" in util.uexc(e):
+=======
+ if "Forced assertion for testing" in util.uexc(e):
+>>>>>>> MERGE-SOURCE
log.FatalError(u"%s: %s" % (e.__class__.__name__, util.uexc(e)),
log.ErrorCode.exception,
e.__class__.__name__)
=== modified file 'bin/duplicity.1'
--- bin/duplicity.1 2019-01-26 16:36:27 +0000
+++ bin/duplicity.1 2019-03-04 12:09:45 +0000
@@ -21,7 +21,7 @@
source_url target_directory
.B duplicity collection-status
-.I [options] [--file-changed <relpath>]
+.I [options]
target_url
.B duplicity list-current-files
@@ -48,10 +48,6 @@
.I [options] [--force] [--extra-clean]
target_url
-.B duplicity replicate
-.I [options] [--time time]
-source_url target_url
-
.SH DESCRIPTION
Duplicity incrementally backs up files and folders into
tar-format volumes encrypted with GnuPG and places them to a
@@ -168,28 +164,23 @@
.TP
.BI "verify " "[--compare-data] [--time <time>] [--file-to-restore <rel_path>] <url> <local_path>"
-Verify tests the integrity of the backup archives at the remote location by downloading each file
-and checking both that it can restore the archive and that the restored file matches the signature
-of that file stored in the backup, i.e. compares the archived file with its hash value from archival
-time. Verify does not actually restore and will not overwrite any local files. Duplicity
-will exit with a non-zero error level if any files do not match the signature stored in the archive
-for that file. On verbosity level 4 or higher, it will log a message for each file that differs
-from the stored signature. Files must be downloaded to the local machine in order to compare them.
-Verify does not compare the backed-up version of the file to the current local copy of the files
-unless the --compare-data option is used (see below).
+Restore backup contents temporarily file by file and compare against the local path's contents.
+duplicity will exit with a non-zero error level if any files are different.
+On verbosity level info (4) or higher, a message for each file that has
+changed will be logged.
.br
The
.I --file-to-restore
option restricts verify to that file or folder.
The
.I --time
-option allows to select a backup to verify.
+option allows to select a backup to verify against.
The
.I --compare-data
option enables data comparison (see below).
.TP
-.BI "collection-status " "[--file-changed <relpath>]" "<url>"
+.BI "collection-status " "<url>"
Summarize the status of the backup repository by printing the chains
and sets found, and the number of volumes in each.
@@ -252,19 +243,6 @@
.I --force
will be needed to delete the files instead of just listing them.
-.TP
-.BI "replicate " "[--time time] <source_url> <target_url>"
-Replicate backup sets from source to target backend. Files will be
-(re)-encrypted and (re)-compressed depending on normal backend
-options. Signatures and volumes will not get recomputed, thus options like
-.BI --volsize
-or
-.BI --max-blocksize
-have no effect.
-When
-.I --time time
-is given, only backup sets older than time will be replicated.
-
.SH OPTIONS
.TP
@@ -349,14 +327,8 @@
.TP
.BI --compare-data
-Enable data comparison of regular files on action verify. This conducts a
-verify as described above to verify the integrity of the backup archives,
-but additionally compares restored files to those in target_directory.
-Duplicity will not replace any files in target_directory. Duplicity will
-exit with a non-zero error level if the files do not correctly verify or
-if any files from the archive differ from those in target_directory. On
-verbosity level 4 or higher, it will log a message for each file that
-differs from its equivalent in target_directory.
+Enable data comparison of regular files on action verify.
+This is disabled by default for performance reasons.
.TP
.BI --copy-links
@@ -465,15 +437,6 @@
argument for more information.
.TP
-.BI "--file-changed " path
-This option may be given in collection-status mode, causing only
-.I path
-status to be collect instead of the entire contents of the backup archive.
-.I path
-should be given relative to the root of the directory backed up.
-
-
-.TP
.BI "--file-prefix, --file-prefix-manifest, --file-prefix-archive, --file-prefix-signature
Adds a prefix to all files, manifest files, archive files, and/or signature files.
@@ -816,6 +779,7 @@
when uploading to S3 to ensure you kill connections to slow S3 endpoints.
.TP
+<<<<<<< TREE
.BI "--azure-blob-tier"
Standard storage tier used for backup files (Hot|Cool|Archive).
@@ -839,6 +803,8 @@
blob size exceeds 64MB. The default values is 2.
.TP
+=======
+>>>>>>> MERGE-SOURCE
.BI "--scp-command " command
.B (only ssh pexpect backend with --use-scp enabled)
The
@@ -948,13 +914,6 @@
.BR "A NOTE ON SSL CERTIFICATE VERIFICATION" .
.TP
-.BI --swift-storage-policy
-Use this storage policy when operating on Swift containers.
-.br
-See also
-.BR "A NOTE ON SWIFT (OPENSTACK OBJECT STORAGE) ACCESS" .
-
-.TP
.BI "--tempdir " directory
Use this existing directory for duplicity temporary files instead of
the system default, which is usually the /tmp directory. This option
@@ -1093,15 +1052,6 @@
Formats of each of the URL schemes follow:
.PP
-.B "Amazon Drive Backend"
-.PP
-.RS
-ad://some_dir
-.PP
-See also
-.B "A NOTE ON AMAZON DRIVE"
-.RE
-.PP
.BR "Azure"
.PP
.RS
@@ -1266,15 +1216,6 @@
.B "A NOTE ON SWIFT (OPENSTACK OBJECT STORAGE) ACCESS"
.RE
.PP
-.BR "Public Cloud Archive" " (OVH)"
-.PP
-.RS
-pca://container_name[/prefix]
-.PP
-See also
-.B "A NOTE ON PCA ACCESS"
-.RE
-.PP
.B "Tahoe-LAFS"
.PP
.RS
@@ -1584,25 +1525,6 @@
which aren't followed by 'foo'. However, it wouldn't match /home even
if /home/ben/1234567 existed.
-.SH A NOTE ON AMAZON DRIVE
-.IP 1.
-The API Keys used for Amazon Drive have not been granted production limits.
-Amazon do not say what the development limits are and are not replying to
-to requests to whitelist duplicity. A related tool, acd_cli, was demoted to
-development limits, but continues to work fine except for cases of excessive
-usage. If you experience throttling and similar issues with Amazon Drive using
-this backend, please report them to the mailing list.
-.IR
-.IP 2.
-If you previously used the
-.BI acd+acdcli
-backend, it is strongly recommended to update to the
-.BI ad
-backend instead, since it interfaces directly with Amazon Drive. You will need
-to setup the OAuth once again, but can otherwise keep your backups and config.
-.IR
-.RE
-
.SH A NOTE ON AZURE ACCESS
The Azure backend requires the Microsoft Azure Storage SDK for Python to be
installed on the system.
@@ -1610,13 +1532,9 @@
.B REQUIREMENTS
above.
-It uses environment variables for authentification:
+It uses two environment variables for authentification:
.BR AZURE_ACCOUNT_NAME " (required),"
-.BR AZURE_ACCOUNT_KEY " (optional),
-.BR AZURE_SHARED_ACCESS_SIGNATURE " (optional)."
-One of
-.BR AZURE_ACCOUNT_KEY " or"
-.BR AZURE_SHARED_ACCESS_SIGNATURE " is required."
+.BR AZURE_ACCOUNT_KEY " (required)"
A container name must be a valid DNS name, conforming to the following naming
rules:
@@ -1753,13 +1671,8 @@
.SH A NOTE ON FILENAME PREFIXES
-Filename prefixes can be used in
-.B "multi backend "
-with
-.B "mirror "
-mode to define affinity rules. They can also be used in conjunction with
-S3 lifecycle rules to transition archive files to Glacier, while keeping
-metadata (signature and manifest files) on S3.
+Filename prefixes can be used in conjunction with S3 lifecycle rules to transition
+archive files to Glacier, while keeping metadata (signature and manifest files) on S3.
Duplicity does not require access to archive files except when restoring from backup.
@@ -1876,8 +1789,7 @@
"name" : "FOO",
"value" : "bar"
}
- ],
- "prefixes": ["prefix1_", "prefix2_"]
+ ]
},
{
"url": "file:///path/to/dir"
@@ -2093,40 +2005,6 @@
.B SWIFT_AUTHVERSION
is unspecified, it will default to version 1.
-.SH A NOTE ON PCA ACCESS
-PCA is a long-term data archival solution by OVH. It runs a slightly modified
-version of Openstack Swift introducing latency in the data retrieval process.
-It is a good pick for a
-.BR "multi backend "
-configuration where receiving volumes while an other backend is used to store
-manifests and signatures.
-
-.br
-The backend requires python-switclient to be installed on the system.
-python-keystoneclient is also needed to interact with OpenStack's Keystone
-Identity service.
-See
-.B REQUIREMENTS
-above.
-
-It uses following environment variables for authentification:
-.BR PCA_USERNAME " (required),"
-.BR PCA_PASSWORD " (required),"
-.BR PCA_AUTHURL " (required),"
-.BR PCA_USERID " (optional),"
-.BR PCA_TENANTID " (optional, but either the tenant name or tenant id must be supplied)"
-.BR PCA_REGIONNAME " (optional),"
-.BR PCA_TENANTNAME " (optional, but either the tenant name or tenant id must be supplied)"
-
-If the user was previously authenticated, the following environment
-variables can be used instead:
-.BR PCA_PREAUTHURL " (required),"
-.BR PCA_PREAUTHTOKEN " (required)"
-
-If
-.B PCA_AUTHVERSION
-is unspecified, it will default to version 2.
-
.SH A NOTE ON MEDIAFIRE BACKEND
This backend requires
.B mediafire
@@ -2237,13 +2115,6 @@
Some backends also require additional components (probably available as packages for your specific platform):
.TP
-.BR "Amazon Drive backend"
-.B python-requests
-- http://python-requests.org
-.br
-.B python-requests-oauthlib
-- https://github.com/requests/requests-oauthlib
-.TP
.BR "azure backend" " (Azure Blob Storage Service)"
.B Microsoft Azure Storage SDK for Python
- https://pypi.python.org/pypi/azure-storage/
@@ -2260,10 +2131,6 @@
.B Dropbox Python SDK
- https://www.dropbox.com/developers/reference/sdk
.TP
-.BR "copy backend" " (Copy.com)"
-.B python-urllib3
-- https://github.com/shazow/urllib3
-.TP
.BR "gdocs gdata backend" " (legacy Google Docs backend)"
.B Google Data APIs Python Client Library
- http://code.google.com/p/gdata-python-client/
=== modified file 'debian/control'
=== renamed file 'docs/Makefile' => 'docs/Makefile.THIS'
=== removed directory 'docs/_static'
=== removed directory 'docs/_templates'
=== renamed file 'docs/conf.py' => 'docs/conf.py.THIS'
=== removed file 'docs/duplicity.asyncscheduler.rst'
--- docs/duplicity.asyncscheduler.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.asyncscheduler.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.asyncscheduler module
-===============================
-
-.. automodule:: duplicity.asyncscheduler
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backend.rst'
--- docs/duplicity.backend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backend module
-========================
-
-.. automodule:: duplicity.backend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.azurebackend.rst'
--- docs/duplicity.backends.azurebackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.azurebackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.azurebackend module
-======================================
-
-.. automodule:: duplicity.backends.azurebackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.b2backend.rst'
--- docs/duplicity.backends.b2backend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.b2backend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.b2backend module
-===================================
-
-.. automodule:: duplicity.backends.b2backend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.botobackend.rst'
--- docs/duplicity.backends.botobackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.botobackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.botobackend module
-=====================================
-
-.. automodule:: duplicity.backends.botobackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.cfbackend.rst'
--- docs/duplicity.backends.cfbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.cfbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.cfbackend module
-===================================
-
-.. automodule:: duplicity.backends.cfbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.dpbxbackend.rst'
--- docs/duplicity.backends.dpbxbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.dpbxbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.dpbxbackend module
-=====================================
-
-.. automodule:: duplicity.backends.dpbxbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.gdocsbackend.rst'
--- docs/duplicity.backends.gdocsbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.gdocsbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.gdocsbackend module
-======================================
-
-.. automodule:: duplicity.backends.gdocsbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.giobackend.rst'
--- docs/duplicity.backends.giobackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.giobackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.giobackend module
-====================================
-
-.. automodule:: duplicity.backends.giobackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.hsibackend.rst'
--- docs/duplicity.backends.hsibackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.hsibackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.hsibackend module
-====================================
-
-.. automodule:: duplicity.backends.hsibackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.hubicbackend.rst'
--- docs/duplicity.backends.hubicbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.hubicbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.hubicbackend module
-======================================
-
-.. automodule:: duplicity.backends.hubicbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.imapbackend.rst'
--- docs/duplicity.backends.imapbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.imapbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.imapbackend module
-=====================================
-
-.. automodule:: duplicity.backends.imapbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.lftpbackend.rst'
--- docs/duplicity.backends.lftpbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.lftpbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.lftpbackend module
-=====================================
-
-.. automodule:: duplicity.backends.lftpbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.localbackend.rst'
--- docs/duplicity.backends.localbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.localbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.localbackend module
-======================================
-
-.. automodule:: duplicity.backends.localbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.mediafirebackend.rst'
--- docs/duplicity.backends.mediafirebackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.mediafirebackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.mediafirebackend module
-==========================================
-
-.. automodule:: duplicity.backends.mediafirebackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.megabackend.rst'
--- docs/duplicity.backends.megabackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.megabackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.megabackend module
-=====================================
-
-.. automodule:: duplicity.backends.megabackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.multibackend.rst'
--- docs/duplicity.backends.multibackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.multibackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.multibackend module
-======================================
-
-.. automodule:: duplicity.backends.multibackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.ncftpbackend.rst'
--- docs/duplicity.backends.ncftpbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.ncftpbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.ncftpbackend module
-======================================
-
-.. automodule:: duplicity.backends.ncftpbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.onedrivebackend.rst'
--- docs/duplicity.backends.onedrivebackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.onedrivebackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.onedrivebackend module
-=========================================
-
-.. automodule:: duplicity.backends.onedrivebackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.par2backend.rst'
--- docs/duplicity.backends.par2backend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.par2backend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.par2backend module
-=====================================
-
-.. automodule:: duplicity.backends.par2backend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.pydrivebackend.rst'
--- docs/duplicity.backends.pydrivebackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.pydrivebackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.pydrivebackend module
-========================================
-
-.. automodule:: duplicity.backends.pydrivebackend
- :members:
- :undoc-members:
- :show-inheritance:
=== renamed file 'docs/duplicity.backends.pyrax_identity.hubic.rst' => 'docs/duplicity.backends.pyrax_identity.hubic.rst.THIS'
=== renamed file 'docs/duplicity.backends.pyrax_identity.rst' => 'docs/duplicity.backends.pyrax_identity.rst.THIS'
=== renamed file 'docs/duplicity.backends.rst' => 'docs/duplicity.backends.rst.THIS'
=== removed file 'docs/duplicity.backends.rsyncbackend.rst'
--- docs/duplicity.backends.rsyncbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.rsyncbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.rsyncbackend module
-======================================
-
-.. automodule:: duplicity.backends.rsyncbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== renamed file 'docs/duplicity.backends.ssh_paramiko_backend.rst' => 'docs/duplicity.backends.ssh_paramiko_backend.rst.THIS'
=== renamed file 'docs/duplicity.backends.ssh_pexpect_backend.rst' => 'docs/duplicity.backends.ssh_pexpect_backend.rst.THIS'
=== removed file 'docs/duplicity.backends.swiftbackend.rst'
--- docs/duplicity.backends.swiftbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.swiftbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.swiftbackend module
-======================================
-
-.. automodule:: duplicity.backends.swiftbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.sxbackend.rst'
--- docs/duplicity.backends.sxbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.sxbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.sxbackend module
-===================================
-
-.. automodule:: duplicity.backends.sxbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.tahoebackend.rst'
--- docs/duplicity.backends.tahoebackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.tahoebackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.tahoebackend module
-======================================
-
-.. automodule:: duplicity.backends.tahoebackend
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.backends.webdavbackend.rst'
--- docs/duplicity.backends.webdavbackend.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.backends.webdavbackend.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.backends.webdavbackend module
-=======================================
-
-.. automodule:: duplicity.backends.webdavbackend
- :members:
- :undoc-members:
- :show-inheritance:
=== renamed file 'docs/duplicity.cached_ops.rst' => 'docs/duplicity.cached_ops.rst.THIS'
=== removed file 'docs/duplicity.collections.rst'
--- docs/duplicity.collections.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.collections.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.collections module
-============================
-
-.. automodule:: duplicity.collections
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.commandline.rst'
--- docs/duplicity.commandline.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.commandline.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.commandline module
-============================
-
-.. automodule:: duplicity.commandline
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.diffdir.rst'
--- docs/duplicity.diffdir.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.diffdir.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.diffdir module
-========================
-
-.. automodule:: duplicity.diffdir
- :members:
- :undoc-members:
- :show-inheritance:
=== renamed file 'docs/duplicity.dup_temp.rst' => 'docs/duplicity.dup_temp.rst.THIS'
=== renamed file 'docs/duplicity.dup_threading.rst' => 'docs/duplicity.dup_threading.rst.THIS'
=== renamed file 'docs/duplicity.dup_time.rst' => 'docs/duplicity.dup_time.rst.THIS'
=== removed file 'docs/duplicity.errors.rst'
--- docs/duplicity.errors.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.errors.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.errors module
-=======================
-
-.. automodule:: duplicity.errors
- :members:
- :undoc-members:
- :show-inheritance:
=== renamed file 'docs/duplicity.file_naming.rst' => 'docs/duplicity.file_naming.rst.THIS'
=== removed file 'docs/duplicity.filechunkio.rst'
--- docs/duplicity.filechunkio.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.filechunkio.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.filechunkio module
-============================
-
-.. automodule:: duplicity.filechunkio
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.globals.rst'
--- docs/duplicity.globals.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.globals.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.globals module
-========================
-
-.. automodule:: duplicity.globals
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.globmatch.rst'
--- docs/duplicity.globmatch.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.globmatch.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.globmatch module
-==========================
-
-.. automodule:: duplicity.globmatch
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.gpg.rst'
--- docs/duplicity.gpg.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.gpg.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.gpg module
-====================
-
-.. automodule:: duplicity.gpg
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.gpginterface.rst'
--- docs/duplicity.gpginterface.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.gpginterface.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.gpginterface module
-=============================
-
-.. automodule:: duplicity.gpginterface
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.lazy.rst'
--- docs/duplicity.lazy.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.lazy.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.lazy module
-=====================
-
-.. automodule:: duplicity.lazy
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.librsync.rst'
--- docs/duplicity.librsync.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.librsync.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.librsync module
-=========================
-
-.. automodule:: duplicity.librsync
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.log.rst'
--- docs/duplicity.log.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.log.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.log module
-====================
-
-.. automodule:: duplicity.log
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.manifest.rst'
--- docs/duplicity.manifest.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.manifest.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.manifest module
-=========================
-
-.. automodule:: duplicity.manifest
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.patchdir.rst'
--- docs/duplicity.patchdir.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.patchdir.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.patchdir module
-=========================
-
-.. automodule:: duplicity.patchdir
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.path.rst'
--- docs/duplicity.path.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.path.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.path module
-=====================
-
-.. automodule:: duplicity.path
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.progress.rst'
--- docs/duplicity.progress.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.progress.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.progress module
-=========================
-
-.. automodule:: duplicity.progress
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.robust.rst'
--- docs/duplicity.robust.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.robust.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.robust module
-=======================
-
-.. automodule:: duplicity.robust
- :members:
- :undoc-members:
- :show-inheritance:
=== renamed file 'docs/duplicity.rst' => 'docs/duplicity.rst.THIS'
=== removed file 'docs/duplicity.selection.rst'
--- docs/duplicity.selection.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.selection.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.selection module
-==========================
-
-.. automodule:: duplicity.selection
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.statistics.rst'
--- docs/duplicity.statistics.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.statistics.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.statistics module
-===========================
-
-.. automodule:: duplicity.statistics
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.tarfile.rst'
--- docs/duplicity.tarfile.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.tarfile.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.tarfile module
-========================
-
-.. automodule:: duplicity.tarfile
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.tempdir.rst'
--- docs/duplicity.tempdir.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.tempdir.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.tempdir module
-========================
-
-.. automodule:: duplicity.tempdir
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/duplicity.util.rst'
--- docs/duplicity.util.rst 2018-07-24 16:17:12 +0000
+++ docs/duplicity.util.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-duplicity.util module
-=====================
-
-.. automodule:: duplicity.util
- :members:
- :undoc-members:
- :show-inheritance:
=== renamed file 'docs/index.rst' => 'docs/index.rst.THIS'
=== renamed file 'docs/make.bat' => 'docs/make.bat.THIS'
=== renamed file 'docs/testing.functional.rst' => 'docs/testing.functional.rst.THIS'
=== renamed file 'docs/testing.functional.test_badupload.rst' => 'docs/testing.functional.test_badupload.rst.THIS'
=== renamed file 'docs/testing.functional.test_cleanup.rst' => 'docs/testing.functional.test_cleanup.rst.THIS'
=== renamed file 'docs/testing.functional.test_final.rst' => 'docs/testing.functional.test_final.rst.THIS'
=== renamed file 'docs/testing.functional.test_log.rst' => 'docs/testing.functional.test_log.rst.THIS'
=== renamed file 'docs/testing.functional.test_rdiffdir.rst' => 'docs/testing.functional.test_rdiffdir.rst.THIS'
=== renamed file 'docs/testing.functional.test_restart.rst' => 'docs/testing.functional.test_restart.rst.THIS'
=== renamed file 'docs/testing.functional.test_selection.rst' => 'docs/testing.functional.test_selection.rst.THIS'
=== renamed file 'docs/testing.functional.test_verify.rst' => 'docs/testing.functional.test_verify.rst.THIS'
=== removed file 'docs/testing.overrides.gettext.rst'
--- docs/testing.overrides.gettext.rst 2018-07-24 16:17:12 +0000
+++ docs/testing.overrides.gettext.rst 1970-01-01 00:00:00 +0000
@@ -1,7 +0,0 @@
-testing.overrides.gettext module
-================================
-
-.. automodule:: testing.overrides.gettext
- :members:
- :undoc-members:
- :show-inheritance:
=== removed file 'docs/testing.overrides.rst'
--- docs/testing.overrides.rst 2018-07-24 16:17:12 +0000
+++ docs/testing.overrides.rst 1970-01-01 00:00:00 +0000
@@ -1,17 +0,0 @@
-testing.overrides package
-=========================
-
-Submodules
-----------
-
-.. toctree::
-
- testing.overrides.gettext
-
-Module contents
----------------
-
-.. automodule:: testing.overrides
- :members:
- :undoc-members:
- :show-inheritance:
=== renamed file 'docs/testing.rst' => 'docs/testing.rst.THIS'
=== renamed file 'docs/testing.test_code.rst' => 'docs/testing.test_code.rst.THIS'
=== removed file 'docs/testing.unit.rst'
--- docs/testing.unit.rst 2018-07-24 16:17:12 +0000
+++ docs/testing.unit.rst 1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-testing.unit package
-====================
-
-Submodules
-----------
-
-.. toctree::
-
- testing.unit.test_backend
- testing.unit.test_backend_instance
- testing.unit.test_collections
- testing.unit.test_diffdir
- testing.unit.test_dup_temp
- testing.unit.test_dup_time
- testing.unit.test_file_naming
- testing.unit.test_globmatch
- testing.unit.test_gpg
- testing.unit.test_gpginterface
- testing.unit.test_lazy
- testing.unit.test_manifest
- testing.unit.test_patchdir
- testing.unit.test_path
- testing.unit.test_selection
- testing.unit.test_statistics
- testing.unit.test_tarfile
- testing.unit.test_tempdir
-
-Module contents
----------------
-
-.. automodule:: testing.unit
- :members:
- :undoc-members:
- :show-inheritance:
=== renamed file 'docs/testing.unit.test_backend.rst' => 'docs/testing.unit.test_backend.rst.THIS'
=== renamed file 'docs/testing.unit.test_backend_instance.rst' => 'docs/testing.unit.test_backend_instance.rst.THIS'
=== renamed file 'docs/testing.unit.test_collections.rst' => 'docs/testing.unit.test_collections.rst.THIS'
=== renamed file 'docs/testing.unit.test_diffdir.rst' => 'docs/testing.unit.test_diffdir.rst.THIS'
=== renamed file 'docs/testing.unit.test_dup_temp.rst' => 'docs/testing.unit.test_dup_temp.rst.THIS'
=== renamed file 'docs/testing.unit.test_dup_time.rst' => 'docs/testing.unit.test_dup_time.rst.THIS'
=== renamed file 'docs/testing.unit.test_file_naming.rst' => 'docs/testing.unit.test_file_naming.rst.THIS'
=== renamed file 'docs/testing.unit.test_globmatch.rst' => 'docs/testing.unit.test_globmatch.rst.THIS'
=== renamed file 'docs/testing.unit.test_gpg.rst' => 'docs/testing.unit.test_gpg.rst.THIS'
=== renamed file 'docs/testing.unit.test_gpginterface.rst' => 'docs/testing.unit.test_gpginterface.rst.THIS'
=== renamed file 'docs/testing.unit.test_lazy.rst' => 'docs/testing.unit.test_lazy.rst.THIS'
=== renamed file 'docs/testing.unit.test_manifest.rst' => 'docs/testing.unit.test_manifest.rst.THIS'
=== renamed file 'docs/testing.unit.test_patchdir.rst' => 'docs/testing.unit.test_patchdir.rst.THIS'
=== renamed file 'docs/testing.unit.test_path.rst' => 'docs/testing.unit.test_path.rst.THIS'
=== renamed file 'docs/testing.unit.test_selection.rst' => 'docs/testing.unit.test_selection.rst.THIS'
=== renamed file 'docs/testing.unit.test_statistics.rst' => 'docs/testing.unit.test_statistics.rst.THIS'
=== renamed file 'docs/testing.unit.test_tarfile.rst' => 'docs/testing.unit.test_tarfile.rst.THIS'
=== renamed file 'docs/testing.unit.test_tempdir.rst' => 'docs/testing.unit.test_tempdir.rst.THIS'
=== modified file 'duplicity/_librsyncmodule.c'
--- duplicity/_librsyncmodule.c 2018-12-05 03:48:47 +0000
+++ duplicity/_librsyncmodule.c 2019-03-04 12:09:45 +0000
@@ -330,7 +330,7 @@
fd = dup(fd);
if (fd == -1) {
char buf[256];
- (void)strerror_r(errno, buf, sizeof(buf));
+ strerror_r(errno, buf, sizeof(buf));
PyErr_SetString(PyExc_TypeError, buf);
return NULL;
}
=== modified file 'duplicity/backend.py'
--- duplicity/backend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backend.py 2019-03-04 12:09:45 +0000
@@ -455,8 +455,13 @@
else:
return commandline
+<<<<<<< TREE
def __subprocess_popen(self, args):
u"""
+=======
+ def __subprocess_popen(self, args):
+ """
+>>>>>>> MERGE-SOURCE
For internal use.
Execute the given command line, interpreted as a shell command.
Returns int Exitcode, string StdOut, string StdErr
@@ -480,6 +485,7 @@
Raise a BackendException on failure.
"""
+<<<<<<< TREE
import shlex
if isinstance(commandline, (list, tuple)):
@@ -493,6 +499,21 @@
log.Info(_(u"Reading results of '%s'") % logstr)
result, stdout, stderr = self.__subprocess_popen(args)
+=======
+ import shlex
+
+ if isinstance(commandline, (types.ListType, types.TupleType)):
+ logstr = ' '.join(commandline)
+ args = commandline
+ else:
+ logstr = commandline
+ args = shlex.split(commandline)
+
+ logstr = self.munge_password(logstr)
+ log.Info(_("Reading results of '%s'") % logstr)
+
+ result, stdout, stderr = self.__subprocess_popen(args)
+>>>>>>> MERGE-SOURCE
if result != 0:
try:
ignores = self.popen_breaks[args[0]]
@@ -500,8 +521,13 @@
u""" ignore a predefined set of error codes """
return 0, u'', u''
except (KeyError, ValueError):
+<<<<<<< TREE
raise BackendException(u"Error running '%s': returned %d, with output:\n%s" %
(logstr, result, stdout.decode() + u'\n' + stderr.decode()))
+=======
+ raise BackendException("Error running '%s': returned %d, with output:\n%s" %
+ (logstr, result, stdout + '\n' + stderr))
+>>>>>>> MERGE-SOURCE
return result, stdout, stderr
@@ -573,7 +599,11 @@
# There shouldn't be any encoding errors for files we care
# about, since duplicity filenames are ascii. But user files
# may be in the same directory. So just replace characters.
+<<<<<<< TREE
return util.fsencode(filename)
+=======
+ return filename.encode(globals.fsencoding, 'replace')
+>>>>>>> MERGE-SOURCE
else:
return filename
=== modified file 'duplicity/backends/_cf_pyrax.py'
--- duplicity/backends/_cf_pyrax.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/_cf_pyrax.py 2019-03-04 12:09:45 +0000
@@ -71,6 +71,7 @@
self.client_exc = pyrax.exceptions.ClientException
self.nso_exc = pyrax.exceptions.NoSuchObject
+<<<<<<< TREE
# query rackspace for the specified container name
try:
@@ -90,6 +91,27 @@
u"You may be using a read-only user that can view but not create containers.\n" +
u"Please check your credentials and permissions.",
log.ErrorCode.backend_permission_denied)
+=======
+
+ # query rackspace for the specified container name
+ try:
+ self.container = pyrax.cloudfiles.get_container(container)
+ except pyrax.exceptions.Forbidden as e:
+ log.FatalError("%s : %s \n" % (e.__class__.__name__, util.uexc(e)) +
+ "Container may exist, but access was denied.\n" +
+ "If this container exists, please check its X-Container-Read/Write headers.\n" +
+ "Otherwise, please check your credentials and permissions.",
+ log.ErrorCode.backend_permission_denied)
+ except pyrax.exceptions.NoSuchContainer as e:
+ try:
+ self.container = pyrax.cloudfiles.create_container(container)
+ except pyrax.exceptions.Forbidden as e:
+ log.FatalError("%s : %s \n" % (e.__class__.__name__, util.uexc(e)) +
+ "Container does not exist, but creation was denied.\n" +
+ "You may be using a read-only user that can view but not create containers.\n" +
+ "Please check your credentials and permissions.",
+ log.ErrorCode.backend_permission_denied)
+>>>>>>> MERGE-SOURCE
def _error_code(self, operation, e):
if isinstance(e, self.nso_exc):
=== added file 'duplicity/backends/acdclibackend.py.OTHER'
--- duplicity/backends/acdclibackend.py.OTHER 1970-01-01 00:00:00 +0000
+++ duplicity/backends/acdclibackend.py.OTHER 2019-03-04 12:09:45 +0000
@@ -0,0 +1,151 @@
+# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
+#
+# Copyright 2015 Stefan Breunig <stefan-duplicity@xxxxxxxxxxx>
+# Copyright 2015 Malay Shah <malays@xxxxxxxxx>
+# Based on the backend ncftpbackend.py
+#
+# This file is part of duplicity.
+#
+# Duplicity is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# Duplicity is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with duplicity; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os.path
+import urllib
+import string
+import json
+
+import duplicity.backend
+from duplicity import globals
+from duplicity import log
+from duplicity.errors import * # @UnusedWildImport
+from duplicity import tempdir
+
+
+class ACDBackend(duplicity.backend.Backend):
+ acd_cmd = 'acd_cli'
+ """Connect to remote store using acd_cli"""
+ def __init__(self, parsed_url):
+ duplicity.backend.Backend.__init__(self, parsed_url)
+
+ # we expect an error return, so go low-level and ignore it
+ try:
+ p = os.popen(self.acd_cmd + " version")
+ fout = p.read()
+ ret = p.close()
+ except Exception:
+ pass
+ # the expected error is 0
+ if ret is not None:
+ log.FatalError(self.acd_cmd + " not found: Please install acd_cli",
+ log.ErrorCode.backend_not_found)
+
+ self.parsed_url = parsed_url
+ self.url_string = duplicity.backend.strip_auth_from_url(self.parsed_url)
+
+ # Use an explicit directory name.
+ if self.url_string[-1] != '/':
+ self.url_string += '/'
+
+ self.subprocess_popen(self.acd_cmd + " sync")
+
+ # Initialize remote directory
+ remote_path = urllib.unquote(self.parsed_url.path.replace('///', '/')).rstrip()
+ commandline = self.acd_cmd + " ls '%s'" % (remote_path)
+ try:
+ self.subprocess_popen(commandline)
+ except BackendException as e:
+ if e.code == 50: # Remote directory not there, create a new one
+ commandline = self.acd_cmd + " mkdir '%s'" % remote_path
+ self.subprocess_popen(commandline)
+
+ def _put(self, source_path, remote_filename=None):
+ """Transfer source_path to remote_filename"""
+ if not remote_filename:
+ remote_filename = source_path.get_filename()
+
+ # WORKAROUND for acd_cli: cannot specify remote filename
+ # Link tmp file to the desired remote filename locally and upload
+ remote_path = urllib.unquote(self.parsed_url.path.replace('///', '/'))
+ local_real_duplicity_file = os.path.join(os.path.dirname(source_path.name), remote_filename.rstrip())
+
+ deleteFile = False
+ if(source_path.name != local_real_duplicity_file):
+ try:
+ os.symlink(source_path.name, local_real_duplicity_file)
+ deleteFile = True
+ except IOError as e:
+ log.FatalError("Unable to copy " + source_path.name + " to " + local_real_duplicity_file)
+
+ commandline = self.acd_cmd + " upload --force --overwrite '%s' '%s'" % \
+ (local_real_duplicity_file, remote_path)
+
+ try:
+ l = self.subprocess_popen(commandline)
+ finally:
+ if (deleteFile):
+ try:
+ os.remove(local_real_duplicity_file)
+ except OSError as e:
+ log.FatalError("Unable to remove file %s" % e)
+
+ def _get(self, remote_filename, local_path):
+ """Get remote filename, saving it to local_path"""
+ remote_path = os.path.join(urllib.unquote(self.parsed_url.path.replace('///', '/')), remote_filename).rstrip()
+ local_dir = os.path.dirname(local_path.name)
+ local_filename = os.path.basename(local_path.name)
+ commandline = self.acd_cmd + " download '%s' '%s'" % \
+ (remote_path, local_dir)
+ l = self.subprocess_popen(commandline)
+
+ # Keep the remote filename and move the file over
+ try:
+ os.rename(os.path.join(local_dir, remote_filename), local_path.name)
+ except IOError as e:
+ log.FatalError("Unable to move file %s" % e)
+
+ local_path.setdata()
+ if not local_path.exists():
+ raise BackendException("File %s not found" % local_path.name)
+
+ def _query(self, remote_filename):
+ remote_path = os.path.join(urllib.unquote(self.parsed_url.path.replace('///', '/')), remote_filename).rstrip()
+ commandline = self.acd_cmd + " metadata '%s'" % remote_path
+ node = self.subprocess_popen(commandline)
+ if (node[0] == 0 and node[1]):
+ try:
+ size = json.loads(node[1])['contentProperties']['size']
+ return {'size': size}
+ except ValueError as e:
+ raise BackendException('Malformed JSON: expected "contentProperties->size" member in %s' % node[1])
+ return {'size': -1}
+
+ def _list(self):
+ """List files in directory"""
+ def dir_split(str):
+ if (str):
+ return str.split()[2]
+ else:
+ return None
+ commandline = self.acd_cmd + " ls '%s'" % self.parsed_url.path.replace('///', '/')
+ l = self.subprocess_popen(commandline)
+ return [x for x in map(dir_split, l[1].split('\n')) if x]
+
+ def _delete(self, remote_filename):
+ """Delete remote_filename"""
+ remote_file_path = os.path.join(urllib.unquote(self.parsed_url.path.replace('///', '/')),
+ remote_filename).rstrip()
+ commandline = self.acd_cmd + " rm '%s'" % (remote_file_path)
+ self.subprocess_popen(commandline)
+
+duplicity.backend.register_backend("acd+acdcli", ACDBackend)
=== renamed file 'duplicity/backends/adbackend.py' => 'duplicity/backends/adbackend.py.THIS'
=== modified file 'duplicity/backends/azurebackend.py'
--- duplicity/backends/azurebackend.py 2019-01-01 21:36:27 +0000
+++ duplicity/backends/azurebackend.py 2019-03-04 12:09:45 +0000
@@ -23,7 +23,6 @@
import os
import duplicity.backend
-from duplicity import globals
from duplicity import log
from duplicity.errors import BackendException
@@ -46,11 +45,15 @@
self.AzureConflictError = azure.WindowsAzureConflictError
else:
# v1.0.0 and above
+<<<<<<< TREE
import azure.storage.blob
if hasattr(azure.storage.blob, u'BlobService'):
from azure.storage.blob import BlobService
else:
from azure.storage.blob.blockblobservice import BlockBlobService as BlobService
+=======
+ from azure.storage.blob import BlobService
+>>>>>>> MERGE-SOURCE
self.AzureMissingResourceError = azure.common.AzureMissingResourceHttpError
self.AzureConflictError = azure.common.AzureConflictHttpError
except ImportError as e:
@@ -58,7 +61,15 @@
Azure backend requires Microsoft Azure Storage SDK for Python (https://pypi.python.org/pypi/azure-storage/).
Exception: %s""" % str(e))
+ if 'AZURE_ACCOUNT_NAME' not in os.environ:
+ raise BackendException('AZURE_ACCOUNT_NAME environment variable not set.')
+ if 'AZURE_ACCOUNT_KEY' not in os.environ:
+ raise BackendException('AZURE_ACCOUNT_KEY environment variable not set.')
+ self.blob_service = BlobService(account_name=os.environ['AZURE_ACCOUNT_NAME'],
+ account_key=os.environ['AZURE_ACCOUNT_KEY'])
+
# TODO: validate container name
+<<<<<<< TREE
self.container = parsed_url.path.lstrip(u'/')
if u'AZURE_ACCOUNT_NAME' not in os.environ:
@@ -104,6 +115,9 @@
self.blob_service._BLOB_MAX_CHUNK_DATA_SIZE = globals.azure_max_block_size
def _create_container(self):
+=======
+ self.container = parsed_url.path.lstrip('/')
+>>>>>>> MERGE-SOURCE
try:
self.blob_service.create_container(self.container, fail_on_exist=True)
except self.AzureConflictError:
@@ -115,11 +129,15 @@
log.ErrorCode.connection_failed)
def _put(self, source_path, remote_filename):
+<<<<<<< TREE
kwargs = {}
if globals.azure_max_connections:
kwargs[u'max_connections'] = globals.azure_max_connections
+=======
+>>>>>>> MERGE-SOURCE
# https://azure.microsoft.com/en-us/documentation/articles/storage-python-how-to-use-blob-storage/#upload-a-blob-into-a-container
+<<<<<<< TREE
try:
self.blob_service.create_blob_from_path(self.container, remote_filename, source_path.name, **kwargs)
except AttributeError: # Old versions use a different method name
@@ -134,6 +152,10 @@
except AttributeError: # might not be available in old API
pass
+=======
+ self.blob_service.put_block_blob_from_path(self.container, remote_filename, source_path.name)
+
+>>>>>>> MERGE-SOURCE
def _get(self, remote_filename, local_path):
# https://azure.microsoft.com/en-us/documentation/articles/storage-python-how-to-use-blob-storage/#download-blobs
self.blob_service.get_blob_to_path(self.container, remote_filename, local_path.name)
@@ -156,16 +178,24 @@
def _query(self, filename):
prop = self.blob_service.get_blob_properties(self.container, filename)
+<<<<<<< TREE
try:
info = {u'size': int(prop.properties.content_length)}
except AttributeError:
# old versions directly returned the properties
info = {u'size': int(prop[u'content-length'])}
return info
+=======
+ return {'size': int(prop['content-length'])}
+>>>>>>> MERGE-SOURCE
def _error_code(self, operation, e):
if isinstance(e, self.AzureMissingResourceError):
return log.ErrorCode.backend_not_found
+<<<<<<< TREE
duplicity.backend.register_backend(u'azure', AzureBackend)
+=======
+duplicity.backend.register_backend('azure', AzureBackend)
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/b2backend.py'
--- duplicity/backends/b2backend.py 2018-12-27 16:43:07 +0000
+++ duplicity/backends/b2backend.py 2019-03-04 12:09:45 +0000
@@ -27,11 +27,15 @@
from builtins import object
import os
import hashlib
+<<<<<<< TREE
from urllib.parse import quote_plus # pylint: disable=import-error
+=======
+>>>>>>> MERGE-SOURCE
import duplicity.backend
from duplicity.errors import BackendException, FatalBackendException
from duplicity import log
+<<<<<<< TREE
from duplicity import progress
@@ -50,6 +54,30 @@
def __exit__(self, exc_type, exc_val, exc_tb):
pass
+=======
+from duplicity import progress
+
+
+def progress_listener_factory():
+ u"""
+ Returns progress instance suitable for passing to b2.api.B2Api
+ methods.
+ """
+ class B2ProgressListener(b2.progress.AbstractProgressListener):
+ def __init__(self):
+ super(B2ProgressListener, self).__init__()
+
+ def set_total_bytes(self, total_byte_count):
+ self.total_byte_count = total_byte_count
+
+ def bytes_completed(self, byte_count):
+ progress.report_transfer(byte_count, self.total_byte_count)
+
+ def close(self):
+ super(B2ProgressListener, self).close()
+ return B2ProgressListener()
+
+>>>>>>> MERGE-SOURCE
class B2Backend(duplicity.backend.Backend):
u"""
@@ -62,6 +90,7 @@
"""
duplicity.backend.Backend.__init__(self, parsed_url)
+<<<<<<< TREE
# Import B2 API
try:
global b2
@@ -77,6 +106,24 @@
self.parsed_url.hostname = u'B2'
account_id = parsed_url.username
+=======
+ # Import B2 API
+ try:
+ global b2
+ import b2
+ import b2.api
+ import b2.account_info
+ import b2.download_dest
+ import b2.file_version
+ import b2.progress
+ except ImportError:
+ raise BackendException('B2 backend requires B2 Python APIs (pip install b2)')
+
+ self.service = b2.api.B2Api(b2.account_info.InMemoryAccountInfo())
+ self.parsed_url.hostname = 'B2'
+
+ account_id = parsed_url.username
+>>>>>>> MERGE-SOURCE
account_key = self.get_password()
self.url_parts = [
@@ -86,13 +133,23 @@
self.username = self.url_parts.pop(0)
bucket_name = self.url_parts.pop(0)
else:
+<<<<<<< TREE
raise BackendException(u"B2 requires a bucket name")
self.path = u"".join([url_part + u"/" for url_part in self.url_parts])
self.service.authorize_account(u'production', account_id, account_key)
log.Log(u"B2 Backend (path= %s, bucket= %s, minimum_part_size= %s)" %
(self.path, bucket_name, self.service.account_info.get_minimum_part_size()), log.INFO)
+=======
+ raise BackendException("B2 requires a bucket name")
+ self.path = "".join([url_part + "/" for url_part in self.url_parts])
+ self.service.authorize_account('production', account_id, account_key)
+
+ log.Log("B2 Backend (path= %s, bucket= %s, minimum_part_size= %s)" %
+ (self.path, bucket_name, self.service.account_info.get_minimum_part_size()), log.INFO)
+>>>>>>> MERGE-SOURCE
try:
+<<<<<<< TREE
self.bucket = self.service.get_bucket_by_name(bucket_name)
log.Log(u"Bucket found", log.INFO)
except b2.exception.NonExistentBucket:
@@ -101,23 +158,46 @@
self.bucket = self.service.create_bucket(bucket_name, u'allPrivate')
except:
raise FatalBackendException(u"Bucket cannot be created")
+=======
+ self.bucket = self.service.get_bucket_by_name(bucket_name)
+ log.Log("Bucket found", log.INFO)
+ except b2.exception.NonExistentBucket:
+ try:
+ log.Log("Bucket not found, creating one", log.INFO)
+ self.bucket = self.service.create_bucket(bucket_name, 'allPrivate')
+ except:
+ raise FatalBackendException("Bucket cannot be created")
+>>>>>>> MERGE-SOURCE
def _get(self, remote_filename, local_path):
u"""
Download remote_filename to local_path
"""
+<<<<<<< TREE
log.Log(u"Get: %s -> %s" % (self.path + remote_filename, local_path.name), log.INFO)
self.bucket.download_file_by_name(quote_plus(self.path + remote_filename),
b2.download_dest.DownloadDestLocalFile(local_path.name))
+=======
+ log.Log("Get: %s -> %s" % (self.path + remote_filename, local_path.name), log.INFO)
+ self.bucket.download_file_by_name(self.path + remote_filename,
+ b2.download_dest.DownloadDestLocalFile(local_path.name))
+>>>>>>> MERGE-SOURCE
def _put(self, source_path, remote_filename):
u"""
Copy source_path to remote_filename
"""
+<<<<<<< TREE
log.Log(u"Put: %s -> %s" % (source_path.name, self.path + remote_filename), log.INFO)
self.bucket.upload_local_file(source_path.name, quote_plus(self.path + remote_filename),
content_type=u'application/pgp-encrypted',
progress_listener=B2ProgressListener())
+=======
+ log.Log("Put: %s -> %s" % (source_path.name, self.path + remote_filename), log.INFO)
+ self.bucket.upload_local_file(source_path.name, self.path + remote_filename,
+ content_type='application/pgp-encrypted',
+ progress_listener=progress_listener_factory())
+>>>>>>> MERGE-SOURCE
def _list(self):
u"""
@@ -130,14 +210,21 @@
u"""
Delete filename from remote server
"""
+<<<<<<< TREE
log.Log(u"Delete: %s" % self.path + filename, log.INFO)
file_version_info = self.file_info(quote_plus(self.path + filename))
self.bucket.delete_file_version(file_version_info.id_, file_version_info.file_name)
+=======
+ log.Log("Delete: %s" % self.path + filename, log.INFO)
+ file_version_info = self.file_info(self.path + filename)
+ self.bucket.delete_file_version(file_version_info.id_, file_version_info.file_name)
+>>>>>>> MERGE-SOURCE
def _query(self, filename):
u"""
Get size info of filename
"""
+<<<<<<< TREE
log.Log(u"Query: %s" % self.path + filename, log.INFO)
file_version_info = self.file_info(quote_plus(self.path + filename))
return {u'size': file_version_info.size
@@ -153,3 +240,20 @@
duplicity.backend.register_backend(u"b2", B2Backend)
+=======
+ log.Log("Query: %s" % self.path + filename, log.INFO)
+ file_version_info = self.file_info(self.path + filename)
+ return {'size': file_version_info.size
+ if file_version_info is not None and file_version_info.size is not None else -1}
+
+ def file_info(self, filename):
+ response = self.bucket.list_file_names(filename, 1)
+ for entry in response['files']:
+ file_version_info = b2.file_version.FileVersionInfoFactory.from_api_response(entry)
+ if file_version_info.file_name == filename:
+ return file_version_info
+ raise BackendException('File not found')
+
+
+duplicity.backend.register_backend("b2", B2Backend)
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/dpbxbackend.py'
--- duplicity/backends/dpbxbackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/dpbxbackend.py 2019-03-04 12:09:45 +0000
@@ -45,7 +45,21 @@
from duplicity import log, globals
from duplicity import progress
from duplicity.errors import BackendException
+<<<<<<< TREE
from duplicity.globals import num_retries
+=======
+import os
+import sys
+import traceback
+import urllib
+import re
+
+from dropbox import Dropbox
+from dropbox.exceptions import AuthError, BadInputError, ApiError
+from dropbox.files import UploadSessionCursor, CommitInfo, WriteMode, \
+ GetMetadataError, DeleteError, UploadSessionLookupError, ListFolderError
+from dropbox.oauth import DropboxOAuth2FlowNoRedirect
+>>>>>>> MERGE-SOURCE
from requests.exceptions import ConnectionError
import duplicity.backend
@@ -164,12 +178,23 @@
print(u'-' * 72)
auth_code = input(u"Enter the authorization code here: ").strip()
try:
+<<<<<<< TREE
log.Debug(u'dpbx,auth_flow.finish(%s)' % auth_code)
authresult = auth_flow.finish(auth_code)
+=======
+ log.Debug('dpbx,auth_flow.finish(%s)' % auth_code)
+ authresult = auth_flow.finish(auth_code)
+>>>>>>> MERGE-SOURCE
except Exception as e:
+<<<<<<< TREE
raise BackendException(u'dpbx: Unable to obtain access token: %s' % e)
log.Info(u"dpbx: Authentication successfull")
self.save_access_token(authresult.access_token)
+=======
+ raise BackendException('dpbx: Unable to obtain access token: %s' % e)
+ log.Info("dpbx: Authentication successfull")
+ self.save_access_token(authresult.access_token)
+>>>>>>> MERGE-SOURCE
def login(self):
if self.load_access_token() is None:
@@ -403,10 +428,17 @@
# Do a long listing to avoid connection reset
if not self.user_authenticated():
self.login()
+<<<<<<< TREE
remote_dir = u'/' + urllib.parse.unquote(self.parsed_url.path.lstrip(u'/')).rstrip()
log.Debug(u'dpbx.files_list_folder(%s)' % remote_dir)
+=======
+ remote_dir = '/' + urllib.unquote(self.parsed_url.path.lstrip('/')).rstrip()
+
+ log.Debug('dpbx.files_list_folder(%s)' % remote_dir)
+>>>>>>> MERGE-SOURCE
res = []
+<<<<<<< TREE
try:
resp = self.api_client.files_list_folder(remote_dir)
log.Debug(u'dpbx.list(%s): %s' % (remote_dir, resp))
@@ -422,6 +454,23 @@
log.Debug(u'dpbx.list(%s): ignore missing folder (%s)' % (remote_dir, e))
else:
raise
+=======
+ try:
+ resp = self.api_client.files_list_folder(remote_dir)
+ log.Debug('dpbx.list(%s): %s' % (remote_dir, resp))
+
+ while True:
+ res.extend([entry.name for entry in resp.entries])
+ if not resp.has_more:
+ break
+ resp = self.api_client.files_list_folder_continue(resp.cursor)
+ except ApiError as e:
+ if (isinstance(e.error, ListFolderError) and e.error.is_path() and
+ e.error.get_path().is_not_found()):
+ log.Debug('dpbx.list(%s): ignore missing folder (%s)' % (remote_dir, e))
+ else:
+ raise
+>>>>>>> MERGE-SOURCE
# Warn users of old version dpbx about automatically renamed files
self.check_renamed_files(res)
=== modified file 'duplicity/backends/gdocsbackend.py'
--- duplicity/backends/gdocsbackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/gdocsbackend.py 2019-03-04 12:09:45 +0000
@@ -193,7 +193,13 @@
# Done!
return result
+<<<<<<< TREE
u""" gdata is an alternate way to access gdocs, currently 05/2015 lacking OAuth support """
duplicity.backend.register_backend(u'gdata+gdocs', GDocsBackend)
duplicity.backend.uses_netloc.extend([u'gdata+gdocs'])
+=======
+""" gdata is an alternate way to access gdocs, currently 05/2015 lacking OAuth support """
+duplicity.backend.register_backend('gdata+gdocs', GDocsBackend)
+duplicity.backend.uses_netloc.extend(['gdata+gdocs'])
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/giobackend.py'
--- duplicity/backends/giobackend.py 2018-07-23 14:55:39 +0000
+++ duplicity/backends/giobackend.py 2019-03-04 12:09:45 +0000
@@ -143,8 +143,13 @@
self.__copy_file(source_file, target_file)
def _get(self, filename, local_path):
+<<<<<<< TREE
from gi.repository import Gio # @UnresolvedImport # pylint: disable=import-error
source_file = self.remote_file.get_child_for_display_name(filename)
+=======
+ from gi.repository import Gio # @UnresolvedImport
+ source_file = self.remote_file.get_child_for_display_name(filename)
+>>>>>>> MERGE-SOURCE
target_file = Gio.File.new_for_path(local_path.name)
self.__copy_file(source_file, target_file)
@@ -169,11 +174,22 @@
target_file.delete(None)
def _query(self, filename):
+<<<<<<< TREE
from gi.repository import Gio # @UnresolvedImport # pylint: disable=import-error
target_file = self.remote_file.get_child_for_display_name(filename)
+=======
+ from gi.repository import Gio # @UnresolvedImport
+ target_file = self.remote_file.get_child_for_display_name(filename)
+>>>>>>> MERGE-SOURCE
info = target_file.query_info(Gio.FILE_ATTRIBUTE_STANDARD_SIZE,
Gio.FileQueryInfoFlags.NONE, None)
+<<<<<<< TREE
return {u'size': info.get_size()}
duplicity.backend.register_backend_prefix(u'gio', GIOBackend)
+=======
+ return {'size': info.get_size()}
+
+duplicity.backend.register_backend_prefix('gio', GIOBackend)
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/hsibackend.py'
--- duplicity/backends/hsibackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/hsibackend.py 2019-03-04 12:09:45 +0000
@@ -65,6 +65,11 @@
commandline = u'%s "rm %s%s"' % (hsi_command, self.remote_prefix, filename)
self.subprocess_popen(commandline)
+<<<<<<< TREE
duplicity.backend.register_backend(u"hsi", HSIBackend)
duplicity.backend.uses_netloc.extend([u'hsi'])
+=======
+duplicity.backend.register_backend("hsi", HSIBackend)
+duplicity.backend.uses_netloc.extend(['hsi'])
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/hubicbackend.py'
--- duplicity/backends/hubicbackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/hubicbackend.py 2019-03-04 12:09:45 +0000
@@ -64,5 +64,9 @@
self.nso_exc = pyrax.exceptions.NoSuchObject
self.container = pyrax.cloudfiles.create_container(container)
+<<<<<<< TREE
duplicity.backend.register_backend(u"cf+hubic", HubicBackend)
+=======
+duplicity.backend.register_backend("cf+hubic", HubicBackend)
+>>>>>>> MERGE-SOURCE
=== renamed file 'duplicity/backends/jottacloudbackend.py' => 'duplicity/backends/jottacloudbackend.py.THIS'
=== modified file 'duplicity/backends/lftpbackend.py'
--- duplicity/backends/lftpbackend.py 2019-02-21 21:42:26 +0000
+++ duplicity/backends/lftpbackend.py 2019-03-04 12:09:45 +0000
@@ -205,6 +205,7 @@
)
log.Debug(u"CMD: %s" % commandline)
_, l, e = self.subprocess_popen(commandline)
+<<<<<<< TREE
log.Debug(u"STDERR:\n"
u"%s" % (e))
log.Debug(u"STDOUT:\n"
@@ -232,4 +233,32 @@
u'lftp+sftp',
u'lftp+webdav', u'lftp+webdavs',
u'lftp+http', u'lftp+https']
+=======
+ log.Debug("STDERR:\n"
+ "%s" % (e))
+ log.Debug("STDOUT:\n"
+ "%s" % (l))
+
+duplicity.backend.register_backend("ftp", LFTPBackend)
+duplicity.backend.register_backend("ftps", LFTPBackend)
+duplicity.backend.register_backend("fish", LFTPBackend)
+duplicity.backend.register_backend("ftpes", LFTPBackend)
+
+duplicity.backend.register_backend("lftp+ftp", LFTPBackend)
+duplicity.backend.register_backend("lftp+ftps", LFTPBackend)
+duplicity.backend.register_backend("lftp+fish", LFTPBackend)
+duplicity.backend.register_backend("lftp+ftpes", LFTPBackend)
+duplicity.backend.register_backend("lftp+sftp", LFTPBackend)
+duplicity.backend.register_backend("lftp+webdav", LFTPBackend)
+duplicity.backend.register_backend("lftp+webdavs", LFTPBackend)
+duplicity.backend.register_backend("lftp+http", LFTPBackend)
+duplicity.backend.register_backend("lftp+https", LFTPBackend)
+
+duplicity.backend.uses_netloc.extend(['ftp', 'ftps', 'fish', 'ftpes',
+ 'lftp+ftp', 'lftp+ftps',
+ 'lftp+fish', 'lftp+ftpes',
+ 'lftp+sftp',
+ 'lftp+webdav', 'lftp+webdavs',
+ 'lftp+http', 'lftp+https']
+>>>>>>> MERGE-SOURCE
)
=== modified file 'duplicity/backends/localbackend.py'
--- duplicity/backends/localbackend.py 2018-07-23 14:55:39 +0000
+++ duplicity/backends/localbackend.py 2019-03-04 12:09:45 +0000
@@ -71,7 +71,13 @@
target_file = self.remote_pathdir.append(filename)
target_file.setdata()
size = target_file.getsize() if target_file.exists() else -1
+<<<<<<< TREE
return {u'size': size}
duplicity.backend.register_backend(u"file", LocalBackend)
+=======
+ return {'size': size}
+
+duplicity.backend.register_backend("file", LocalBackend)
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/megabackend.py'
--- duplicity/backends/megabackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/megabackend.py 2019-03-04 12:09:45 +0000
@@ -34,6 +34,7 @@
def __init__(self, parsed_url):
duplicity.backend.Backend.__init__(self, parsed_url)
+<<<<<<< TREE
# ensure all the necessary megatools binaries exist
self._check_binary_exists(u'megals')
self._check_binary_exists(u'megamkdir')
@@ -61,7 +62,37 @@
def _check_binary_exists(self, cmd):
u'checks that a specified command exists in the current path'
+=======
+ # ensure all the necessary megatools binaries exist
+ self._check_binary_exists('megals')
+ self._check_binary_exists('megamkdir')
+ self._check_binary_exists('megaget')
+ self._check_binary_exists('megaput')
+ self._check_binary_exists('megarm')
+
+ # store some basic info
+ self._hostname = parsed_url.hostname
+
+ if parsed_url.password is None:
+ self._megarc = os.getenv('HOME') + '/.megarc'
+ else:
+ self._megarc = False
+ self._username = parsed_url.username
+ self._password = self.get_password()
+
+ # remote folder (Can we assume /Root prefix?)
+ self._root = '/Root'
+ self._folder = self._root + '/' + parsed_url.path[1:]
+
+ # make sure the remote folder exists (the whole path)
+ self._makedir_recursive(parsed_url.path[1:].split('/'))
+
+ def _check_binary_exists(self, cmd):
+ 'checks that a specified command exists in the current path'
+
+>>>>>>> MERGE-SOURCE
try:
+<<<<<<< TREE
# ignore the output, we only need the return code
subprocess.check_output([u'which', cmd])
except Exception as e:
@@ -90,10 +121,45 @@
self._make_dir(p)
except:
pass
+=======
+ # ignore the output, we only need the return code
+ subprocess.check_output(['which', cmd])
+ except Exception as e:
+ raise BackendException("command '%s' not found, make sure megatools are installed" % (cmd,))
+
+ def _makedir(self, path):
+ 'creates a remote directory'
+
+ if self._megarc:
+ cmd = ['megamkdir', '--config', self._megarc, path]
+ else:
+ cmd = ['megamkdir', '-u', self._username, '-p', self._password, path]
+
+ self.subprocess_popen(cmd)
+
+ def _makedir_recursive(self, path):
+ 'creates a remote directory (recursively the whole path), ingores errors'
+
+ print ("mkdir: %s" % ('/'.join(path),))
+
+ p = self._root
+
+ for folder in path:
+ p = p + '/' + folder
+ try:
+ self._make_dir(p)
+ except:
+ pass
+>>>>>>> MERGE-SOURCE
def _put(self, source_path, remote_filename):
+<<<<<<< TREE
u'uploads file to Mega (deletes it first, to ensure it does not exist)'
+=======
+ 'uploads file to Mega (deletes it first, to ensure it does not exist)'
+
+>>>>>>> MERGE-SOURCE
try:
self.delete(remote_filename)
except Exception:
@@ -102,16 +168,29 @@
self.upload(local_file=source_path.get_canonical(), remote_file=remote_filename)
def _get(self, remote_filename, local_path):
+<<<<<<< TREE
u'downloads file from Mega'
self.download(remote_file=remote_filename, local_file=local_path.name)
+=======
+ 'downloads file from Mega'
+
+ self.download(remote_file=remote_filename, local_file=local_path.name)
+>>>>>>> MERGE-SOURCE
def _list(self):
+<<<<<<< TREE
u'list files in the backup folder'
return self.folder_contents(files_only=True)
+=======
+ 'list files in the backup folder'
+
+ return self.folder_contents(files_only=True)
+>>>>>>> MERGE-SOURCE
def _delete(self, filename):
+<<<<<<< TREE
u'deletes remote '
self.delete(remote_file=filename)
@@ -178,3 +257,71 @@
duplicity.backend.register_backend(u'mega', MegaBackend)
duplicity.backend.uses_netloc.extend([u'mega'])
+=======
+ 'deletes remote '
+
+ self.delete(remote_file=filename)
+
+ def folder_contents(self, files_only=False):
+ 'lists contents of a folder, optionally ignoring subdirectories'
+
+ print ("megals: %s" % (self._folder,))
+
+ if self._megarc:
+ cmd = ['megals', '--config', self._megarc, self._folder]
+ else:
+ cmd = ['megals', '-u', self._username, '-p', self._password, self._folder]
+
+ files = subprocess.check_output(cmd)
+ files = files.strip().split('\n')
+
+ # remove the folder name, including the path separator
+ files = [f[len(self._folder) + 1:] for f in files]
+
+ # optionally ignore entries containing path separator (i.e. not files)
+ if files_only:
+ files = [f for f in files if '/' not in f]
+
+ return files
+
+ def download(self, remote_file, local_file):
+
+ print ("megaget: %s" % (remote_file,))
+
+ if self._megarc:
+ cmd = ['megaget', '--config', self._megarc, '--no-progress',
+ '--path', local_file, self._folder + '/' + remote_file]
+ else:
+ cmd = ['megaget', '-u', self._username, '-p', self._password, '--no-progress',
+ '--path', local_file, self._folder + '/' + remote_file]
+
+ self.subprocess_popen(cmd)
+
+ def upload(self, local_file, remote_file):
+
+ print ("megaput: %s" % (remote_file,))
+
+ if self._megarc:
+ cmd = ['megaput', '--config', self._megarc, '--no-progress',
+ '--path', self._folder + '/' + remote_file, local_file]
+ else:
+ cmd = ['megaput', '-u', self._username, '-p', self._password, '--no-progress',
+ '--path', self._folder + '/' + remote_file, local_file]
+
+ self.subprocess_popen(cmd)
+
+ def delete(self, remote_file):
+
+ print ("megarm: %s" % (remote_file,))
+
+ if self._megarc:
+ cmd = ['megarm', '--config', self._megarc, self._folder + '/' + remote_file]
+ else:
+ cmd = ['megarm', '-u', self._username, '-p', self._password, self._folder + '/' + remote_file]
+
+ self.subprocess_popen(cmd)
+
+
+duplicity.backend.register_backend('mega', MegaBackend)
+duplicity.backend.uses_netloc.extend(['mega'])
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/multibackend.py'
--- duplicity/backends/multibackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/multibackend.py 2019-03-04 12:09:45 +0000
@@ -44,7 +44,6 @@
# the stores we are managing
__stores = []
- __affinities = {}
# Set of known query paramaters
__knownQueryParameters = frozenset([
@@ -188,6 +187,7 @@
store = duplicity.backend.get_backend(url)
self.__stores.append(store)
+<<<<<<< TREE
# Prefix affinity
if u'prefixes' in config:
@@ -201,11 +201,14 @@
else:
self.__affinities[prefix] = [store]
+=======
+>>>>>>> MERGE-SOURCE
# store_list = store.list()
# log.Log(_("MultiBackend: at init, store %s has %s files")
# % (url, len(store_list)),
# log.INFO)
+<<<<<<< TREE
def _eligible_stores(self, filename):
if self.__affinities:
matching_prefixes = [k for k in list(self.__affinities.keys()) if filename.startswith(k)]
@@ -217,23 +220,21 @@
# No affinity rule or no matching store for that prefix
return self.__stores
+=======
+>>>>>>> MERGE-SOURCE
def _put(self, source_path, remote_filename):
# Store an indication of whether any of these passed
passed = False
-
- # Eligibile stores for this action
- stores = self._eligible_stores(remote_filename)
-
# Mirror mode always starts at zero
if self.__mode == u'mirror':
self.__write_cursor = 0
first = self.__write_cursor
while True:
- store = stores[self.__write_cursor]
+ store = self.__stores[self.__write_cursor]
try:
next = self.__write_cursor + 1
- if (next > len(stores) - 1):
+ if (next > len(self.__stores) - 1):
next = 0
log.Log(_(u"MultiBackend: _put: write to store #%s (%s)")
% (self.__write_cursor, store.backend.parsed_url.url_string),
@@ -274,9 +275,7 @@
# before finally giving up). So we need to get the list first
# before we try to fetch
# ENHANCEME: maintain a cached list for each store
- stores = self._eligible_stores(remote_filename)
-
- for s in stores:
+ for s in self.__stores:
list = s.list()
if remote_filename in list:
s.get(remote_filename, local_path)
@@ -307,16 +306,13 @@
def _delete(self, filename):
# Store an indication on whether any passed
passed = False
-
- stores = self._eligible_stores(filename)
-
# since the backend operations will be retried, we can't
# simply try to get from the store, if not found, move to the
# next store (since each failure will be retried n times
# before finally giving up). So we need to get the list first
# before we try to delete
# ENHANCEME: maintain a cached list for each store
- for s in stores:
+ for s in self.__stores:
list = s.list()
if filename in list:
s._do_delete(filename)
@@ -333,5 +329,9 @@
log.ERROR)
# raise BackendException("failed to delete")
+<<<<<<< TREE
duplicity.backend.register_backend(u'multi', MultiBackend)
+=======
+duplicity.backend.register_backend('multi', MultiBackend)
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/ncftpbackend.py'
--- duplicity/backends/ncftpbackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/ncftpbackend.py 2019-03-04 12:09:45 +0000
@@ -122,6 +122,11 @@
(self.flags, filename, self.url_string)
self.subprocess_popen(commandline)
+<<<<<<< TREE
duplicity.backend.register_backend(u"ncftp+ftp", NCFTPBackend)
duplicity.backend.uses_netloc.extend([u'ncftp+ftp'])
+=======
+duplicity.backend.register_backend("ncftp+ftp", NCFTPBackend)
+duplicity.backend.uses_netloc.extend(['ncftp+ftp'])
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/onedrivebackend.py'
--- duplicity/backends/onedrivebackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/onedrivebackend.py 2019-03-04 12:09:45 +0000
@@ -348,5 +348,9 @@
def _retry_cleanup(self):
self.initialize_oauth2_session()
+<<<<<<< TREE
duplicity.backend.register_backend(u'onedrive', OneDriveBackend)
+=======
+duplicity.backend.register_backend('onedrive', OneDriveBackend)
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/par2backend.py'
--- duplicity/backends/par2backend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/par2backend.py 2019-03-04 12:09:45 +0000
@@ -218,5 +218,9 @@
def close(self):
self.wrapped_backend._close()
+<<<<<<< TREE
backend.register_backend_prefix(u'par2', Par2Backend)
+=======
+backend.register_backend_prefix('par2', Par2Backend)
+>>>>>>> MERGE-SOURCE
=== renamed file 'duplicity/backends/pcabackend.py' => 'duplicity/backends/pcabackend.py.THIS'
=== modified file 'duplicity/backends/pydrivebackend.py'
--- duplicity/backends/pydrivebackend.py 2019-02-24 15:09:46 +0000
+++ duplicity/backends/pydrivebackend.py 2019-03-04 12:09:45 +0000
@@ -93,8 +93,13 @@
else:
file_in_root = self.drive.CreateFile({u'title': u'i_am_in_root'})
file_in_root.Upload()
+<<<<<<< TREE
parent_folder_id = file_in_root[u'parents'][0][u'id']
file_in_root.Delete()
+=======
+ parent_folder_id = file_in_root['parents'][0]['id']
+ file_in_root.Delete()
+>>>>>>> MERGE-SOURCE
# Fetch destination folder entry and create hierarchy if required.
folder_names = string.split(parsed_url.path, u'/')
@@ -215,11 +220,19 @@
return log.ErrorCode.backend_permission_denied
return log.ErrorCode.backend_error
+<<<<<<< TREE
duplicity.backend.register_backend(u'pydrive', PyDriveBackend)
u""" pydrive is an alternate way to access gdocs """
duplicity.backend.register_backend(u'pydrive+gdocs', PyDriveBackend)
u""" register pydrive as the default way to access gdocs """
duplicity.backend.register_backend(u'gdocs', PyDriveBackend)
+=======
+duplicity.backend.register_backend('pydrive', PyDriveBackend)
+""" pydrive is an alternate way to access gdocs """
+duplicity.backend.register_backend('pydrive+gdocs', PyDriveBackend)
+""" register pydrive as the default way to access gdocs """
+duplicity.backend.register_backend('gdocs', PyDriveBackend)
+>>>>>>> MERGE-SOURCE
duplicity.backend.uses_netloc.extend([u'pydrive', u'pydrive+gdocs', u'gdocs'])
=== modified file 'duplicity/backends/rsyncbackend.py'
--- duplicity/backends/rsyncbackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/rsyncbackend.py 2019-03-04 12:09:45 +0000
@@ -155,6 +155,11 @@
util.ignore_missing(os.unlink, file)
os.rmdir(dir)
+<<<<<<< TREE
duplicity.backend.register_backend(u"rsync", RsyncBackend)
duplicity.backend.uses_netloc.extend([u'rsync'])
+=======
+duplicity.backend.register_backend("rsync", RsyncBackend)
+duplicity.backend.uses_netloc.extend(['rsync'])
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/ssh_paramiko_backend.py'
--- duplicity/backends/ssh_paramiko_backend.py 2018-12-23 16:52:31 +0000
+++ duplicity/backends/ssh_paramiko_backend.py 2019-03-04 12:09:45 +0000
@@ -103,8 +103,13 @@
"""
def missing_host_key(self, client, hostname, key):
fp = hexlify(key.get_fingerprint())
+<<<<<<< TREE
fingerprint = u':'.join(a + b for a, b in list(zip(fp[::2], fp[1::2])))
question = u"""The authenticity of host '%s' can't be established.
+=======
+ fingerprint = ':'.join(a + b for a, b in list(zip(fp[::2], fp[1::2])))
+ question = """The authenticity of host '%s' can't be established.
+>>>>>>> MERGE-SOURCE
%s key fingerprint is %s.
Are you sure you want to continue connecting (yes/no)? """ % (hostname,
key.get_name().upper(),
=== modified file 'duplicity/backends/ssh_pexpect_backend.py'
--- duplicity/backends/ssh_pexpect_backend.py 2019-02-25 16:30:59 +0000
+++ duplicity/backends/ssh_pexpect_backend.py 2019-03-04 12:09:45 +0000
@@ -297,7 +297,13 @@
commandline = (u"%s %s %s" % (self.sftp_command, globals.ssh_options, self.host_string))
self.run_sftp_command(commandline, commands)
+<<<<<<< TREE
duplicity.backend.register_backend(u"pexpect+sftp", SSHPExpectBackend)
duplicity.backend.register_backend(u"pexpect+scp", SSHPExpectBackend)
duplicity.backend.uses_netloc.extend([u'pexpect+sftp', u'pexpect+scp'])
+=======
+duplicity.backend.register_backend("pexpect+sftp", SSHPExpectBackend)
+duplicity.backend.register_backend("pexpect+scp", SSHPExpectBackend)
+duplicity.backend.uses_netloc.extend(['pexpect+sftp', 'pexpect+scp'])
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/swiftbackend.py'
--- duplicity/backends/swiftbackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/swiftbackend.py 2019-03-04 12:09:45 +0000
@@ -22,7 +22,6 @@
import os
import duplicity.backend
-from duplicity import globals
from duplicity import log
from duplicity import util
from duplicity.errors import BackendException
@@ -112,9 +111,12 @@
else:
self.prefix = u''
+<<<<<<< TREE
policy = globals.swift_storage_policy
policy_header = u'X-Storage-Policy'
+=======
+>>>>>>> MERGE-SOURCE
container_metadata = None
try:
self.conn = Connection(**conn_kwargs)
@@ -129,15 +131,17 @@
if container_metadata is None:
log.Info(u"Creating container %s" % self.container)
try:
- headers = dict([[policy_header, policy]]) if policy else None
- self.conn.put_container(self.container, headers=headers)
+ self.conn.put_container(self.container)
except Exception as e:
log.FatalError(u"Container creation failed: %s %s"
% (e.__class__.__name__, str(e)),
log.ErrorCode.connection_failed)
+<<<<<<< TREE
elif policy and container_metadata[policy_header.lower()] != policy:
log.FatalError(u"Container '%s' exists but its storage policy is '%s' not '%s'."
% (self.container, container_metadata[policy_header.lower()], policy))
+=======
+>>>>>>> MERGE-SOURCE
def _error_code(self, operation, e):
if isinstance(e, self.resp_exc):
=== modified file 'duplicity/backends/sxbackend.py'
--- duplicity/backends/sxbackend.py 2018-07-23 14:55:39 +0000
+++ duplicity/backends/sxbackend.py 2019-03-04 12:09:45 +0000
@@ -49,5 +49,9 @@
commandline = u"sxrm {0}/{1}".format(self.url_string, filename)
self.subprocess_popen(commandline)
+<<<<<<< TREE
duplicity.backend.register_backend(u"sx", SXBackend)
+=======
+duplicity.backend.register_backend("sx", SXBackend)
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/tahoebackend.py'
--- duplicity/backends/tahoebackend.py 2018-11-29 19:00:15 +0000
+++ duplicity/backends/tahoebackend.py 2019-03-04 12:09:45 +0000
@@ -73,7 +73,13 @@
return output.split(b'\n') if output else []
def _delete(self, filename):
+<<<<<<< TREE
self.run(u"tahoe", u"rm", self.get_remote_path(filename))
duplicity.backend.register_backend(u"tahoe", TAHOEBackend)
+=======
+ self.run("tahoe", "rm", self.get_remote_path(filename))
+
+duplicity.backend.register_backend("tahoe", TAHOEBackend)
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/backends/webdavbackend.py'
--- duplicity/backends/webdavbackend.py 2018-12-23 16:52:31 +0000
+++ duplicity/backends/webdavbackend.py 2019-03-04 12:09:45 +0000
@@ -260,11 +260,19 @@
try:
return self.get_kerberos_authorization()
except ImportError:
+<<<<<<< TREE
log.Warn(_(u"python-kerberos needed to use kerberos \
+=======
+ log.Warn(_("python-kerberos needed to use kerberos \
+>>>>>>> MERGE-SOURCE
authorization, falling back to basic auth."))
return self.get_basic_authorization()
except Exception as e:
+<<<<<<< TREE
log.Warn(_(u"Kerberos authorization failed: %s.\
+=======
+ log.Warn(_("Kerberos authorization failed: %s.\
+>>>>>>> MERGE-SOURCE
Falling back to basic auth.") % e)
return self.get_basic_authorization()
elif token.lower() == u'basic':
@@ -277,9 +285,15 @@
return urllib2.parse_keqv_list(urllib2.parse_http_list(challenge_string))
def get_kerberos_authorization(self):
+<<<<<<< TREE
import kerberos # pylint: disable=import-error
_, ctx = kerberos.authGSSClientInit(u"HTTP@%s" % self.conn.host)
kerberos.authGSSClientStep(ctx, u"")
+=======
+ import kerberos # pylint: disable=import-error
+ _, ctx = kerberos.authGSSClientInit("HTTP@%s" % self.conn.host)
+ kerberos.authGSSClientStep(ctx, "")
+>>>>>>> MERGE-SOURCE
tgt = kerberos.authGSSClientResponse(ctx)
return u'Negotiate %s' % tgt
@@ -287,8 +301,13 @@
u"""
Returns the basic auth header
"""
+<<<<<<< TREE
auth_string = u'%s:%s' % (self.username, self.password)
return u'Basic %s' % base64.encodestring(auth_string).strip()
+=======
+ auth_string = '%s:%s' % (self.username, self.password)
+ return 'Basic %s' % "".join(base64.encodestring(auth_string).split())
+>>>>>>> MERGE-SOURCE
def get_digest_authorization(self, path):
u"""
@@ -474,9 +493,17 @@
if response:
response.close()
+<<<<<<< TREE
duplicity.backend.register_backend(u"http", WebDAVBackend)
duplicity.backend.register_backend(u"https", WebDAVBackend)
duplicity.backend.register_backend(u"webdav", WebDAVBackend)
duplicity.backend.register_backend(u"webdavs", WebDAVBackend)
duplicity.backend.uses_netloc.extend([u'http', u'https', u'webdav', u'webdavs'])
+=======
+duplicity.backend.register_backend("http", WebDAVBackend)
+duplicity.backend.register_backend("https", WebDAVBackend)
+duplicity.backend.register_backend("webdav", WebDAVBackend)
+duplicity.backend.register_backend("webdavs", WebDAVBackend)
+duplicity.backend.uses_netloc.extend(['http', 'https', 'webdav', 'webdavs'])
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/collections.py'
--- duplicity/collections.py 2019-02-22 20:25:02 +0000
+++ duplicity/collections.py 2019-03-04 12:09:45 +0000
@@ -32,7 +32,7 @@
import types
import gettext
-import sys
+
from duplicity import log
from duplicity import file_naming
@@ -44,12 +44,15 @@
from duplicity import util
from duplicity.gpg import GPGError
+<<<<<<< TREE
# For type testing against both int and long types that works in python 2/3
if sys.version_info < (3,):
integer_types = (int, int)
else:
integer_types = (int,)
+=======
+>>>>>>> MERGE-SOURCE
class CollectionsError(Exception):
pass
@@ -73,7 +76,6 @@
self.end_time = None # will be set if inc
self.partial = False # true if a partial backup
self.encrypted = False # true if an encrypted backup
- self.files_changed = []
self.action = action
def is_complete(self):
@@ -138,10 +140,6 @@
self.encrypted = bool(pr.encrypted)
self.info_set = True
- def set_files_changed(self):
- mf = self.get_manifest()
- self.files_changed = mf.get_files_changed()
-
def set_manifest(self, remote_filename):
u"""
Add local and remote manifest filenames to backup set
@@ -150,8 +148,13 @@
remote_filename)
self.remote_manifest_name = remote_filename
+<<<<<<< TREE
if self.action not in [u"collection-status", u"replicate"]:
local_filename_list = globals.archive_dir_path.listdir()
+=======
+ if self.action not in ["collection-status"]:
+ local_filename_list = globals.archive_dir.listdir()
+>>>>>>> MERGE-SOURCE
else:
local_filename_list = []
for local_filename in local_filename_list:
@@ -161,9 +164,7 @@
pr.start_time == self.start_time and
pr.end_time == self.end_time):
self.local_manifest_path = \
- globals.archive_dir_path.append(local_filename)
-
- self.set_files_changed()
+ globals.archive_dir.append(local_filename)
break
def delete(self):
@@ -177,8 +178,13 @@
except Exception:
log.Debug(_(u"BackupSet.delete: missing %s") % [util.fsdecode(f) for f in rfn])
pass
+<<<<<<< TREE
if self.action not in [u"collection-status", u"replicate"]:
local_filename_list = globals.archive_dir_path.listdir()
+=======
+ if self.action not in ["collection-status"]:
+ local_filename_list = globals.archive_dir.listdir()
+>>>>>>> MERGE-SOURCE
else:
local_filename_list = []
for lfn in local_filename_list:
@@ -187,7 +193,7 @@
pr.start_time == self.start_time and
pr.end_time == self.end_time):
try:
- globals.archive_dir_path.append(lfn).delete()
+ globals.archive_dir.append(lfn).delete()
except Exception:
log.Debug(_(u"BackupSet.delete: missing %s") % [util.fsdecode(f) for f in lfn])
pass
@@ -242,8 +248,13 @@
"""
assert self.local_manifest_path
manifest_buffer = self.local_manifest_path.get_data()
+<<<<<<< TREE
log.Info(_(u"Processing local manifest %s (%s)") % (
self.local_manifest_path.name, len(manifest_buffer)))
+=======
+ log.Info(_("Processing local manifest %s (%s)") % (
+ self.local_manifest_path.name, len(manifest_buffer)))
+>>>>>>> MERGE-SOURCE
return manifest.Manifest().from_string(manifest_buffer)
def get_remote_manifest(self):
@@ -254,11 +265,21 @@
try:
manifest_buffer = self.backend.get_data(self.remote_manifest_name)
except GPGError as message:
+<<<<<<< TREE
log.Error(_(u"Error processing remote manifest (%s): %s") %
(util.fsdecode(self.remote_manifest_name), util.uexc(message)))
+=======
+ log.Error(_("Error processing remote manifest (%s): %s") %
+ (util.ufn(self.remote_manifest_name), util.uexc(message)))
+>>>>>>> MERGE-SOURCE
return None
+<<<<<<< TREE
log.Info(_(u"Processing remote manifest %s (%s)") % (
util.fsdecode(self.remote_manifest_name), len(manifest_buffer)))
+=======
+ log.Info(_("Processing remote manifest %s (%s)") % (
+ util.ufn(self.remote_manifest_name), len(manifest_buffer)))
+>>>>>>> MERGE-SOURCE
return manifest.Manifest().from_string(manifest_buffer)
def get_manifest(self):
@@ -298,9 +319,6 @@
return self.end_time
assert 0, u"Neither self.time nor self.end_time set"
- def get_files_changed(self):
- return self.files_changed
-
def __len__(self):
u"""
Return the number of volumes in the set
@@ -482,19 +500,19 @@
Return new SignatureChain.
local should be true iff the signature chain resides in
- globals.archive_dir_path and false if the chain is in
+ globals.archive_dir and false if the chain is in
globals.backend.
- @param local: True if sig chain in globals.archive_dir_path
+ @param local: True if sig chain in globals.archive_dir
@type local: Boolean
@param location: Where the sig chain is located
- @type location: globals.archive_dir_path or globals.backend
+ @type location: globals.archive_dir or globals.backend
"""
if local:
- self.archive_dir_path, self.backend = location, None
+ self.archive_dir, self.backend = location, None
else:
- self.archive_dir_path, self.backend = None, location
+ self.archive_dir, self.backend = None, location
self.fullsig = None # filename of full signature
self.inclist = [] # list of filenames of incremental signatures
self.start_time, self.end_time = None, None
@@ -503,8 +521,13 @@
u"""
Local or Remote and List of files in the set
"""
+<<<<<<< TREE
if self.archive_dir_path:
place = _(u"local")
+=======
+ if self.archive_dir:
+ place = _("local")
+>>>>>>> MERGE-SOURCE
else:
place = _(u"remote")
filelist = []
@@ -518,14 +541,24 @@
Check to make sure times are in whole seconds
"""
for time in time_list:
+<<<<<<< TREE
if type(time) not in integer_types:
assert 0, u"Time %s in %s wrong type" % (time, time_list)
+=======
+ if type(time) not in (types.LongType, types.IntType):
+ assert 0, "Time %s in %s wrong type" % (time, time_list)
+>>>>>>> MERGE-SOURCE
def islocal(self):
+<<<<<<< TREE
u"""
Return true if represents a signature chain in archive_dir_path
- """
- if self.archive_dir_path:
+=======
+ """
+ Return true if represents a signature chain in archive_dir
+>>>>>>> MERGE-SOURCE
+ """
+ if self.archive_dir:
return True
else:
return False
@@ -562,11 +595,17 @@
optionally at a certain time
"""
assert self.fullsig
- if self.archive_dir_path: # local
+ if self.archive_dir: # local
def filename_to_fileobj(filename):
+<<<<<<< TREE
u"""Open filename in archive_dir_path, return filtered fileobj"""
sig_dp = path.DupPath(self.archive_dir_path.name, (filename,))
return sig_dp.filtered_open(u"rb")
+=======
+ """Open filename in archive_dir, return filtered fileobj"""
+ sig_dp = path.DupPath(self.archive_dir.name, (filename,))
+ return sig_dp.filtered_open("rb")
+>>>>>>> MERGE-SOURCE
else:
filename_to_fileobj = self.backend.get_fileobj_read
return [filename_to_fileobj(f) for f in self.get_filenames(time)]
@@ -576,11 +615,11 @@
Remove all files in signature set
"""
# Try to delete in opposite order, so something useful even if aborted
- if self.archive_dir_path:
+ if self.archive_dir:
for i in range(len(self.inclist) - 1, -1, -1):
- self.archive_dir_path.append(self.inclist[i]).delete()
+ self.archive_dir.append(self.inclist[i]).delete()
if not keep_full:
- self.archive_dir_path.append(self.fullsig).delete()
+ self.archive_dir.append(self.fullsig).delete()
else:
assert self.backend
inclist_copy = self.inclist[:]
@@ -610,12 +649,17 @@
u"""
Hold information about available chains and sets
"""
+<<<<<<< TREE
def __init__(self, backend, archive_dir_path, action):
u"""
+=======
+ def __init__(self, backend, archive_dir, action):
+ """
+>>>>>>> MERGE-SOURCE
Make new object. Does not set values
"""
self.backend = backend
- self.archive_dir_path = archive_dir_path
+ self.archive_dir = archive_dir
self.action = action
# Will hold (signature chain, backup chain) pair of active
@@ -640,8 +684,13 @@
u"""
Return summary of the collection, suitable for printing to log
"""
+<<<<<<< TREE
l = [u"backend %s" % (self.backend.__class__.__name__,),
u"archive-dir %s" % (self.archive_dir_path,)]
+=======
+ l = ["backend %s" % (self.backend.__class__.__name__,),
+ "archive-dir %s" % (self.archive_dir,)]
+>>>>>>> MERGE-SOURCE
for i in range(len(self.other_backup_chains)):
# A bit of a misnomer. Chain might have a sig.
@@ -665,7 +714,11 @@
u"-----------------",
_(u"Connecting with backend: %s") %
(self.backend.__class__.__name__,),
+<<<<<<< TREE
_(u"Archive dir: %s") % (self.archive_dir_path.uc_name if self.archive_dir_path else u'None',)]
+=======
+ _("Archive dir: %s") % (util.ufn(self.archive_dir.name),)]
+>>>>>>> MERGE-SOURCE
l.append(u"\n" +
ngettext(u"Found %d secondary backup chain.",
@@ -703,8 +756,13 @@
return u"\n".join(l)
def set_values(self, sig_chain_warning=1):
+<<<<<<< TREE
u"""
Set values from archive_dir_path and backend.
+=======
+ """
+ Set values from archive_dir and backend.
+>>>>>>> MERGE-SOURCE
Returns self for convenience. If sig_chain_warning is set to None,
do not warn about unnecessary sig chains. This is because there may
@@ -720,8 +778,13 @@
len(backend_filename_list))
# get local filename list
+<<<<<<< TREE
if self.action not in [u"collection-status", u"replicate"]:
local_filename_list = self.archive_dir_path.listdir()
+=======
+ if self.action not in ["collection-status"]:
+ local_filename_list = self.archive_dir.listdir()
+>>>>>>> MERGE-SOURCE
else:
local_filename_list = []
log.Debug(ngettext(u"%d file exists in cache",
@@ -909,8 +972,13 @@
return ([p[1] for p in time_set_pairs], incomplete_sets)
def get_signature_chains(self, local, filelist=None):
+<<<<<<< TREE
u"""
Find chains in archive_dir_path (if local is true) or backend
+=======
+ """
+ Find chains in archive_dir (if local is true) or backend
+>>>>>>> MERGE-SOURCE
Use filelist if given, otherwise regenerate. Return value is
pair (list of chains, list of signature paths not in any
@@ -920,8 +988,13 @@
if filelist is not None:
return filelist
elif local:
+<<<<<<< TREE
if self.action not in [u"collection-status", u"replicate"]:
return self.archive_dir_path.listdir()
+=======
+ if self.action not in ["collection-status"]:
+ return self.archive_dir.listdir()
+>>>>>>> MERGE-SOURCE
else:
return []
else:
@@ -932,7 +1005,7 @@
Return new empty signature chain
"""
if local:
- return SignatureChain(True, self.archive_dir_path)
+ return SignatureChain(True, self.archive_dir)
else:
return SignatureChain(False, self.backend)
@@ -1196,6 +1269,7 @@
old_sets = [s for s in chain.get_all_sets() if s.get_time() < t]
result_sets.extend(old_sets)
return self.sort_sets(result_sets)
+<<<<<<< TREE
def get_file_changed_record(self, filepath):
u"""
@@ -1246,3 +1320,5 @@
l.append(u"-------------------------")
return u"\n".join(l)
+=======
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/commandline.py'
--- duplicity/commandline.py 2019-01-25 17:08:40 +0000
+++ duplicity/commandline.py 2019-03-04 12:09:45 +0000
@@ -19,8 +19,12 @@
# along with duplicity; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+<<<<<<< TREE
u"""Parse command line, check for consistency, and set globals"""
from __future__ import print_function
+=======
+"""Parse command line, check for consistency, and set globals"""
+>>>>>>> MERGE-SOURCE
from builtins import filter
from builtins import str
@@ -58,8 +62,8 @@
collection_status = None # Will be set to true if collection-status command given
cleanup = None # Set to true if cleanup command given
verify = None # Set to true if verify command given
-replicate = None # Set to true if replicate command given
+<<<<<<< TREE
commands = [u"cleanup",
u"collection-status",
u"full",
@@ -71,6 +75,18 @@
u"restore",
u"verify",
u"replicate"
+=======
+commands = ["cleanup",
+ "collection-status",
+ "full",
+ "incremental",
+ "list-current-files",
+ "remove-older-than",
+ "remove-all-but-n-full",
+ "remove-all-inc-of-but-n-full",
+ "restore",
+ "verify",
+>>>>>>> MERGE-SOURCE
]
@@ -203,8 +219,12 @@
optparse.Option.take_action(
self, action, dest, opt, value, values, parser)
+<<<<<<< TREE
u"""
+=======
+"""
+>>>>>>> MERGE-SOURCE
Fix:
File "/usr/lib/pythonX.X/optparse.py", line XXXX, in print_help
file.write(self.format_help().encode(encoding, "replace"))
@@ -245,7 +265,7 @@
def parse_cmdline_options(arglist):
u"""Parse argument list"""
global select_opts, select_files, full_backup
- global list_current, collection_status, cleanup, remove_time, verify, replicate
+ global list_current, collection_status, cleanup, remove_time, verify
def set_log_fd(fd):
if fd < 1:
@@ -270,7 +290,11 @@
log.ErrorCode.cant_open_filelist)
def print_ver(o, s, v, p):
+<<<<<<< TREE
print(u"duplicity %s" % (globals.version))
+=======
+ print "duplicity %s" % (globals.version)
+>>>>>>> MERGE-SOURCE
sys.exit(0)
def add_rename(o, s, v, p):
@@ -391,9 +415,15 @@
# whole root.
# TRANSL: Used in usage help to represent a Unix-style path name. Example:
# --archive-dir <path>
+<<<<<<< TREE
parser.add_option(u"--file-to-restore", u"-r", action=u"callback", type=u"file",
metavar=_(u"path"), dest=u"restore_dir",
callback=lambda o, s, v, p: setattr(p.values, u"restore_dir", util.fsencode(v.strip(u'/'))))
+=======
+ parser.add_option("--file-to-restore", "-r", action="callback", type="file",
+ metavar=_("path"), dest="restore_dir",
+ callback=lambda o, s, v, p: setattr(p.values, "restore_dir", v.strip('/')))
+>>>>>>> MERGE-SOURCE
# Used to confirm certain destructive operations like deleting old files.
parser.add_option(u"--force", action=u"store_true")
@@ -577,6 +607,7 @@
parser.add_option("--s3-kms-key-id", action=u"store", dest="s3_kms_key_id")
parser.add_option("--s3-kms-grant", action=u"store", dest="s3_kms_grant")
+<<<<<<< TREE
# Option to specify a Swift container storage policy.
parser.add_option(u"--swift-storage-policy", type=u"string", metavar=_(u"policy"))
@@ -598,6 +629,8 @@
# Standard storage tier used for storring backup files (Hot|Cool|Archive).
parser.add_option(u"--azure-blob-tier", type=u"string", metavar=_(u"Hot|Cool|Archive"))
+=======
+>>>>>>> MERGE-SOURCE
# scp command to use (ssh pexpect backend)
parser.add_option(u"--scp-command", metavar=_(u"command"))
@@ -662,18 +695,21 @@
parser.add_option(u"--volsize", type=u"int", action=u"callback", metavar=_(u"number"),
callback=lambda o, s, v, p: setattr(p.values, u"volsize", v * 1024 * 1024))
+<<<<<<< TREE
# If set, collect only the file status, not the whole root.
parser.add_option(u"--file-changed", action=u"callback", type=u"file",
metavar=_(u"path"), dest=u"file_changed",
callback=lambda o, s, v, p: setattr(p.values, u"file_changed", v.rstrip(u'/')))
+=======
+>>>>>>> MERGE-SOURCE
# delay time before next try after a failure of a backend operation
# TRANSL: Used in usage help. Example:
# --backend-retry-delay <seconds>
parser.add_option(u"--backend-retry-delay", type=u"int", metavar=_(u"seconds"))
# parse the options
- (options, args) = parser.parse_args(arglist)
+ (options, args) = parser.parse_args()
# Copy all arguments and their values to the globals module. Don't copy
# attributes that are 'hidden' (start with an underscore) or whose name is
@@ -743,9 +779,12 @@
num_expect = 1
elif cmd == u"verify":
verify = True
+<<<<<<< TREE
elif cmd == u"replicate":
replicate = True
num_expect = 2
+=======
+>>>>>>> MERGE-SOURCE
if len(args) != num_expect:
command_line_error(u"Expected %d args, got %d" % (num_expect, len(args)))
@@ -764,12 +803,16 @@
elif len(args) == 1:
backend_url = args[0]
elif len(args) == 2:
+<<<<<<< TREE
if replicate:
if not backend.is_backend_url(args[0]) or not backend.is_backend_url(args[1]):
command_line_error(u"Two URLs expected for replicate.")
src_backend_url, backend_url = args[0], args[1]
else:
lpath, backend_url = args_to_path_backend(args[0], args[1]) # @UnusedVariable
+=======
+ lpath, backend_url = args_to_path_backend(args[0], args[1]) # @UnusedVariable
+>>>>>>> MERGE-SOURCE
else:
command_line_error(u"Too many arguments")
@@ -780,8 +823,13 @@
set_archive_dir(expand_archive_dir(globals.archive_dir,
globals.backup_name))
+<<<<<<< TREE
log.Info(_(u"Using archive dir: %s") % (globals.archive_dir_path.uc_name,))
log.Info(_(u"Using backup name: %s") % (globals.backup_name,))
+=======
+ log.Info(_("Using archive dir: %s") % (util.ufn(globals.archive_dir.name),))
+ log.Info(_("Using backup name: %s") % (globals.backup_name,))
+>>>>>>> MERGE-SOURCE
return args
@@ -944,7 +992,6 @@
duplicity remove-older-than %(time)s [%(options)s] %(target_url)s
duplicity remove-all-but-n-full %(count)s [%(options)s] %(target_url)s
duplicity remove-all-inc-of-but-n-full %(count)s [%(options)s] %(target_url)s
- duplicity replicate %(source_url)s %(target_url)s
""" % dict
@@ -964,7 +1011,6 @@
scp://%(user)s[:%(password)s]@%(other_host)s[:%(port)s]/%(some_dir)s
ssh://%(user)s[:%(password)s]@%(other_host)s[:%(port)s]/%(some_dir)s
swift://%(container_name)s
- pca://%(container_name)s
tahoe://%(alias)s/%(directory)s
webdav://%(user)s[:%(password)s]@%(other_host)s/%(some_dir)s
webdavs://%(user)s[:%(password)s]@%(other_host)s/%(some_dir)s
@@ -991,8 +1037,7 @@
remove-older-than <%(time)s> <%(target_url)s>
remove-all-but-n-full <%(count)s> <%(target_url)s>
remove-all-inc-of-but-n-full <%(count)s> <%(target_url)s>
- verify <%(target_url)s> <%(source_dir)s>
- replicate <%(source_url)s> <%(target_url)s>""" % dict
+ verify <%(target_url)s> <%(source_dir)s>""" % dict
return msg
@@ -1004,12 +1049,19 @@
os.makedirs(dirstring)
except Exception:
pass
+<<<<<<< TREE
archive_dir_path = path.Path(dirstring)
if not archive_dir_path.isdir():
log.FatalError(_(u"Specified archive directory '%s' does not exist, "
u"or is not a directory") % (archive_dir_path.uc_name,),
+=======
+ archive_dir = path.Path(dirstring)
+ if not archive_dir.isdir():
+ log.FatalError(_("Specified archive directory '%s' does not exist, "
+ "or is not a directory") % (util.ufn(archive_dir.name),),
+>>>>>>> MERGE-SOURCE
log.ErrorCode.bad_archive_dir)
- globals.archive_dir_path = archive_dir_path
+ globals.archive_dir = archive_dir
def set_sign_key(sign_key):
@@ -1094,8 +1146,13 @@
def check_consistency(action):
+<<<<<<< TREE
u"""Final consistency check, see if something wrong with command line"""
global full_backup, select_opts, list_current, collection_status, cleanup, replicate
+=======
+ """Final consistency check, see if something wrong with command line"""
+ global full_backup, select_opts, list_current
+>>>>>>> MERGE-SOURCE
def assert_only_one(arglist):
u"""Raises error if two or more of the elements of arglist are true"""
@@ -1105,9 +1162,15 @@
n += 1
assert n <= 1, u"Invalid syntax, two conflicting modes specified"
+<<<<<<< TREE
if action in [u"list-current", u"collection-status",
u"cleanup", u"remove-old", u"remove-all-but-n-full", u"remove-all-inc-of-but-n-full", u"replicate"]:
assert_only_one([list_current, collection_status, cleanup, replicate,
+=======
+ if action in ["list-current", "collection-status",
+ "cleanup", "remove-old", "remove-all-but-n-full", "remove-all-inc-of-but-n-full"]:
+ assert_only_one([list_current, collection_status, cleanup,
+>>>>>>> MERGE-SOURCE
globals.remove_time is not None])
elif action == u"restore" or action == u"verify":
if full_backup:
@@ -1153,8 +1216,14 @@
sign_key=src.sign_key,
recipients=src.recipients,
hidden_recipients=src.hidden_recipients)
+<<<<<<< TREE
log.Debug(_(u"GPG binary is %s, version %s") %
((globals.gpg_binary or u'gpg'), globals.gpg_profile.gpg_version))
+=======
+ log.Debug(_("GPG binary is %s, version %s") %
+ ((globals.gpg_binary or 'gpg'),
+ "%d.%d.%d" % globals.gpg_profile.gpg_version))
+>>>>>>> MERGE-SOURCE
# we can now try to import all the backends
backend.import_backends()
@@ -1185,11 +1254,22 @@
"file:///usr/local". See the man page for more information.""") % (args[0],),
log.ErrorCode.bad_url)
elif len(args) == 2:
+<<<<<<< TREE
if replicate:
globals.src_backend = backend.get_backend(args[0])
globals.backend = backend.get_backend(args[1])
action = u"replicate"
+=======
+ # Figure out whether backup or restore
+ backup, local_pathname = set_backend(args[0], args[1])
+ if backup:
+ if full_backup:
+ action = "full"
+ else:
+ action = "inc"
+>>>>>>> MERGE-SOURCE
else:
+<<<<<<< TREE
# Figure out whether backup or restore
backup, local_pathname = set_backend(args[0], args[1])
if backup:
@@ -1197,15 +1277,29 @@
action = u"full"
else:
action = u"inc"
+=======
+ if verify:
+ action = "verify"
+>>>>>>> MERGE-SOURCE
else:
+<<<<<<< TREE
if verify:
action = u"verify"
else:
action = u"restore"
+=======
+ action = "restore"
+>>>>>>> MERGE-SOURCE
+<<<<<<< TREE
process_local_dir(action, local_pathname)
if action in [u'full', u'inc', u'verify']:
set_selection()
+=======
+ process_local_dir(action, local_pathname)
+ if action in ['full', 'inc', 'verify']:
+ set_selection()
+>>>>>>> MERGE-SOURCE
elif len(args) > 2:
raise AssertionError(u"this code should not be reachable")
=== modified file 'duplicity/compilec.py'
--- duplicity/compilec.py 2018-12-04 20:50:28 +0000
+++ duplicity/compilec.py 2019-03-04 12:09:45 +0000
@@ -22,6 +22,7 @@
import sys
import os
+<<<<<<< TREE
# Avoid conflict on python 2 with collections.py vs. built-in collections module
sp = sys.path
@@ -29,6 +30,9 @@
# https://github.com/PyCQA/pylint/issues/73
from distutils.core import setup, Extension # pylint: disable=import-error,no-name-in-module
sys.path = sp
+=======
+from distutils.core import setup, Extension
+>>>>>>> MERGE-SOURCE
assert len(sys.argv) == 1
sys.argv.append("build")
=== modified file 'duplicity/diffdir.py'
--- duplicity/diffdir.py 2018-11-29 19:00:15 +0000
+++ duplicity/diffdir.py 2019-03-04 12:09:45 +0000
@@ -92,7 +92,7 @@
"""
global stats
stats = statistics.StatsDeltaProcess()
- if isinstance(dirsig_fileobj_list, list):
+ if isinstance(dirsig_fileobj_list, types.ListType):
sig_iter = combine_path_iters([sigtar2path_iter(x) for x
in dirsig_fileobj_list])
else:
@@ -227,7 +227,7 @@
else:
ti.name = b"deleted/" + b"/".join(sig_path.index)
sigTarFile.addfile(ti)
- stats.add_deleted_file(sig_path)
+ stats.add_deleted_file()
yield ROPath(sig_path.index)
elif not sig_path or new_path != sig_path:
# Must calculate new signature and create delta
@@ -294,7 +294,7 @@
while 1:
if not relem1:
try:
- relem1 = next(riter1)
+ relem1 = riter1.next()
except StopIteration:
if relem2:
yield (None, relem2)
@@ -304,7 +304,7 @@
index1 = relem1.index
if not relem2:
try:
- relem2 = next(riter2)
+ relem2 = riter2.next()
except StopIteration:
if relem1:
yield (relem1, None)
@@ -345,7 +345,7 @@
Represent the next element as a triple, to help sorting
"""
try:
- path = next(path_iter_list[iter_index])
+ path = path_iter_list[iter_index].next()
except StopIteration:
return None
return (path.index, iter_index, path)
@@ -385,7 +385,7 @@
"""
global stats
stats = statistics.StatsDeltaProcess()
- if isinstance(sig_infp_list, list):
+ if isinstance(sig_infp_list, types.ListType):
sig_path_iter = get_combined_path_iter(sig_infp_list)
else:
sig_path_iter = sigtar2path_iter(sig_infp_list)
@@ -541,7 +541,11 @@
result = self.process_continued() # pylint: disable=assignment-from-no-return
else:
# Below a StopIteration exception will just be passed upwards
+<<<<<<< TREE
result = self.process(next(self.input_iter)) # pylint: disable=assignment-from-no-return
+=======
+ result = self.process(self.input_iter.next())
+>>>>>>> MERGE-SOURCE
block_number = self.process_next_vol_number
self.offset += len(result.data)
self.previous_index = result.index
=== modified file 'duplicity/dup_threading.py'
--- duplicity/dup_threading.py 2018-11-29 19:00:15 +0000
+++ duplicity/dup_threading.py 2019-03-04 12:09:45 +0000
@@ -28,12 +28,15 @@
at least python 2.5.)
"""
+<<<<<<< TREE
from future import standard_library
standard_library.install_aliases()
from builtins import object
import sys
from duplicity import errors
+=======
+>>>>>>> MERGE-SOURCE
_threading_supported = True
try:
@@ -48,6 +51,10 @@
import dummy_threading as threading
_threading_supported = False
+import sys
+
+from duplicity import errors
+
def threading_supported():
u"""
=== modified file 'duplicity/dup_time.py'
=== modified file 'duplicity/file_naming.py'
--- duplicity/file_naming.py 2018-11-29 19:00:15 +0000
+++ duplicity/file_naming.py 2019-03-04 12:09:45 +0000
@@ -448,11 +448,3 @@
self.encrypted = encrypted # true if gpg encrypted
self.partial = partial
-
- def __eq__(self, other):
- return self.type == other.type and \
- self.manifest == other.manifest and \
- self.time == other.time and \
- self.start_time == other.start_time and \
- self.end_time == other.end_time and \
- self.partial == other.partial
=== modified file 'duplicity/globals.py'
--- duplicity/globals.py 2019-01-25 17:08:40 +0000
+++ duplicity/globals.py 2019-03-04 12:09:45 +0000
@@ -58,9 +58,14 @@
# contains the signatures and manifests of the relevent backup
# collection), and for checkpoint state between volumes.
# NOTE: this gets expanded in duplicity.commandline
+<<<<<<< TREE
os.environ[u"XDG_CACHE_HOME"] = os.getenv(u"XDG_CACHE_HOME", os.path.expanduser(u"~/.cache"))
archive_dir = os.path.expandvars(u"$XDG_CACHE_HOME/duplicity")
archive_dir_path = None
+=======
+os.environ["XDG_CACHE_HOME"] = os.getenv("XDG_CACHE_HOME", os.path.expanduser("~/.cache"))
+archive_dir = os.path.expandvars("$XDG_CACHE_HOME/duplicity")
+>>>>>>> MERGE-SOURCE
# config dir for future use
os.environ[u"XDG_CONFIG_HOME"] = os.getenv(u"XDG_CONFIG_HOME", os.path.expanduser(u"~/.config"))
@@ -220,6 +225,7 @@
# Use server side encryption in s3
s3_use_sse = False
+<<<<<<< TREE
# Use server side kms encryption in s3
s3_use_sse_kms = False
s3_kms_key_id = None
@@ -240,6 +246,8 @@
# Standard storage tier used for storring backup blobs (Hot|Cool|Archive).
azure_blob_tier = None
+=======
+>>>>>>> MERGE-SOURCE
# Whether to use the full email address as the user name when
# logging into an imap server. If false just the user name
# part of the email address is used.
@@ -321,11 +329,9 @@
# Whether to enable gio backend
use_gio = False
-# If set, collect only the file status, not the whole root.
-file_changed = None
-
# delay (in seconds) before next operation after failure
backend_retry_delay = 30
+<<<<<<< TREE
# default filesystem encoding
# In Python 2 it seems that sys.getfilesystemencoding() will normally return
@@ -333,3 +339,12 @@
# either 'ascii' or None. Both are bogus, so default to 'utf-8' if it does.
fsencoding = sys.getfilesystemencoding()
fsencoding = fsencoding if fsencoding not in [u'ascii', u'ANSI_X3.4-1968', None] else u'utf-8'
+=======
+
+# default filesystem encoding
+# In Python 2 it seems that sys.getfilesystemencoding() will normally return
+# 'utf-8' or some other sane encoding, but will sometimes fail and return
+# either 'ascii' or None. Both are bogus, so default to 'utf-8' if it does.
+fsencoding = sys.getfilesystemencoding()
+fsencoding = fsencoding if fsencoding not in ['ascii', None] else 'utf-8'
+>>>>>>> MERGE-SOURCE
=== modified file 'duplicity/globmatch.py'
--- duplicity/globmatch.py 2018-11-29 19:00:15 +0000
+++ duplicity/globmatch.py 2019-03-04 12:09:45 +0000
@@ -56,8 +56,13 @@
return list(map(glob_to_regex, prefixes))
+<<<<<<< TREE
def select_fn_from_glob(glob_str, include, ignore_case=False):
u"""Return a function test_fn(path) which
+=======
+def path_matches_glob_fn(glob_str, include, ignore_case=False):
+ """Return a function test_fn(path) which
+>>>>>>> MERGE-SOURCE
tests whether path matches glob, as per the Unix shell rules, taking as
arguments a path, a glob string and include (0 indicating that the glob
string is an exclude glob and 1 indicating that it is an include glob,
@@ -66,16 +71,18 @@
1 - if the file should be included
2 - if the folder should be scanned for any included/excluded files
None - if the selection function has nothing to say about the file
-
- Note: including a folder implicitly includes everything within it.
"""
assert isinstance(glob_str, str)
glob_ends_w_slash = False
+<<<<<<< TREE
if glob_str == u"/":
# If the glob string is '/', it implicitly includes everything
glob_str = u"/**"
elif glob_str[-1] == u"/":
+=======
+ if glob_str != "/" and glob_str[-1] == "/":
+>>>>>>> MERGE-SOURCE
glob_ends_w_slash = True
# Remove trailing / from directory name (unless that is the entire
# string)
@@ -93,9 +100,14 @@
# string translated into regex
# ($|/) nothing must follow except for the end of the string, newline or /
# Note that the "/" at the end of the regex means that it will match
+<<<<<<< TREE
# if the glob matches a parent folders of path, i.e. including a folder
# includes everything within it.
glob_comp_re = re_comp(u"^%s($|/)" % glob_to_regex(glob_str))
+=======
+ # if the glob matches a parent folders of path
+ glob_comp_re = re_comp("^%s($|/)" % glob_to_regex(glob_str))
+>>>>>>> MERGE-SOURCE
if glob_ends_w_slash:
# Creates a version of glob_comp_re that does not match folder contents
@@ -115,12 +127,16 @@
u"|".join(_glob_get_prefix_regexs(glob_str)))
def test_fn(path):
+<<<<<<< TREE
assert not path.uc_name[-1] == u"/" or path.uc_name == u"/", \
u"path.name should never end in '/' during normal operation for " \
u"normal paths (except '/' alone)\n" \
u"path.name here is " + path.uc_name + u" and glob is " + glob_str
if glob_comp_re.match(path.uc_name):
+=======
+ if glob_comp_re.match(path.name):
+>>>>>>> MERGE-SOURCE
# Path matches glob, or is contained within a matching folder
if not glob_ends_w_slash:
return include
@@ -151,7 +167,7 @@
u"""Returned regular expression equivalent to shell glob pat
Currently only the ?, *, [], and ** expressions are supported.
- Ranges like [a-z] are currently unsupported. There is no
+ Ranges like [a-z] are also currently unsupported. There is no
way to quote these special characters.
This function taken with minor modifications from efnmatch.py
=== modified file 'duplicity/gpg.py'
--- duplicity/gpg.py 2018-11-29 19:00:15 +0000
+++ duplicity/gpg.py 2019-03-04 12:09:45 +0000
@@ -94,12 +94,17 @@
self.gpg_version = self.get_gpg_version(globals.gpg_binary)
+<<<<<<< TREE
rc = re.compile
_version_re = rc(b'^gpg.*\\(GnuPG(?:/MacGPG2)?\\) (?P<maj>[0-9]+)\\.(?P<min>[0-9]+)\\.(?P<bug>[0-9]+)(-.+)?$')
+=======
+ _version_re = re.compile(r'^gpg.*\(GnuPG(?:/MacGPG2)?\) (?P<maj>[0-9]+)\.(?P<min>[0-9]+)\.(?P<bug>[0-9]+)(-.+)?$')
+>>>>>>> MERGE-SOURCE
def get_gpg_version(self, binary):
gnupg = gpginterface.GnuPG()
if binary is not None:
+<<<<<<< TREE
gnupg.call = binary
# user supplied options
@@ -110,14 +115,35 @@
# get gpg version
res = gnupg.run([u"--version"], create_fhs=[u"stdout"])
line = res.handles[u"stdout"].readline().rstrip()
+=======
+ gnupg.call = binary
+
+ # user supplied options
+ if globals.gpg_options:
+ for opt in globals.gpg_options.split():
+ gnupg.options.extra_args.append(opt)
+
+ # get gpg version
+ res = gnupg.run(["--version"], create_fhs=["stdout"])
+ line = res.handles["stdout"].readline().rstrip()
+>>>>>>> MERGE-SOURCE
m = self._version_re.search(line)
if m is not None:
+<<<<<<< TREE
return (int(m.group(u"maj")), int(m.group(u"min")), int(m.group(u"bug")))
raise GPGError(u"failed to determine gnupg version of %s from %s" % (binary, line))
class GPGFile(object):
u"""
+=======
+ return (int(m.group("maj")), int(m.group("min")), int(m.group("bug")))
+ raise GPGError("failed to determine gnupg version of %s from %s" % (binary, line))
+
+
+class GPGFile:
+ """
+>>>>>>> MERGE-SOURCE
File-like object that encrypts decrypts another file on the fly
"""
def __init__(self, encrypt, encrypt_path, profile):
@@ -146,8 +172,13 @@
if globals.gpg_binary is not None:
gnupg.call = globals.gpg_binary
gnupg.options.meta_interactive = 0
+<<<<<<< TREE
gnupg.options.extra_args.append(u'--no-secmem-warning')
gnupg.options.extra_args.append(u'--ignore-mdc-error')
+=======
+ gnupg.options.extra_args.append('--no-secmem-warning')
+ gnupg.options.extra_args.append('--ignore-mdc-error')
+>>>>>>> MERGE-SOURCE
# Support three versions of gpg present 1.x, 2.0.x, 2.1.x
if profile.gpg_version[:1] == (1,):
=== modified file 'duplicity/gpginterface.py'
--- duplicity/gpginterface.py 2018-11-29 19:00:15 +0000
+++ duplicity/gpginterface.py 2019-03-04 12:09:45 +0000
@@ -711,7 +711,6 @@
from . import gpginterface
return doctest.testmod(GnuPGInterface)
-
# deprecated
GnuPGInterface = GnuPG
=== modified file 'duplicity/lazy.py'
--- duplicity/lazy.py 2019-02-21 21:48:53 +0000
+++ duplicity/lazy.py 2019-03-04 12:09:45 +0000
@@ -19,17 +19,18 @@
# along with duplicity; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+<<<<<<< TREE
u"""Define some lazy data structures and functions acting on them"""
from __future__ import print_function
+=======
+"""Define some lazy data structures and functions acting on them"""
+>>>>>>> MERGE-SOURCE
from builtins import map
from builtins import next
from builtins import range
from builtins import object
import os
-from duplicity import log
-from duplicity import robust
-from duplicity import util
class Iter(object):
@@ -84,21 +85,33 @@
"""
for i1 in iter1:
try:
- i2 = next(iter2)
+ i2 = iter2.next()
except StopIteration:
if verbose:
+<<<<<<< TREE
print(u"End when i1 = %s" % (i1,))
+=======
+ print "End when i1 = %s" % (i1,)
+>>>>>>> MERGE-SOURCE
return None
if not operator(i1, i2):
if verbose:
+<<<<<<< TREE
print(u"%s not equal to %s" % (i1, i2))
+=======
+ print "%s not equal to %s" % (i1, i2)
+>>>>>>> MERGE-SOURCE
return None
try:
- i2 = next(iter2)
+ i2 = iter2.next()
except StopIteration:
return 1
if verbose:
+<<<<<<< TREE
print(u"End when i2 = %s" % (i2,))
+=======
+ print "End when i2 = %s" % (i2,)
+>>>>>>> MERGE-SOURCE
return None
@staticmethod
@@ -125,7 +138,7 @@
i = 0
while 1:
try:
- next(iter)
+ iter.next()
except StopIteration:
return i
i = i + 1
@@ -134,20 +147,20 @@
def foldr(f, default, iter): # @NoSelf
u"""foldr the "fundamental list recursion operator"?"""
try:
- next_item = next(iter)
+ next = iter.next()
except StopIteration:
return default
- return f(next_item, Iter.foldr(f, default, iter))
+ return f(next, Iter.foldr(f, default, iter))
@staticmethod
def foldl(f, default, iter): # @NoSelf
u"""the fundamental list iteration operator.."""
while 1:
try:
- next_item = next(iter)
+ next = iter.next()
except StopIteration:
return default
- default = f(default, next_item)
+ default = f(default, next)
@staticmethod
def multiplex(iter, num_of_forks, final_func=None, closing_func=None): # @NoSelf
@@ -182,7 +195,7 @@
u"""Return the next element requested by fork_num"""
if forkposition[fork_num] == -1:
try:
- buffer.insert(0, next(iter))
+ buffer.insert(0, iter.next())
except StopIteration:
# call closing_func if necessary
if (forkposition == starting_forkposition and
@@ -234,10 +247,14 @@
while(1):
if self.a_leading_by >= 0:
# a is in front, add new element
+<<<<<<< TREE
try:
elem = next(iter)
except StopIteration:
return
+=======
+ elem = iter.next() # exception will be passed
+>>>>>>> MERGE-SOURCE
buf.append(elem)
else:
# b is in front, subtract an element
@@ -251,10 +268,14 @@
while(1):
if self.a_leading_by <= 0:
# b is in front, add new element
+<<<<<<< TREE
try:
elem = next(iter)
except StopIteration:
return
+=======
+ elem = iter.next() # exception will be passed
+>>>>>>> MERGE-SOURCE
buf.append(elem)
else:
# a is in front, subtract an element
@@ -437,3 +458,8 @@
log.Warn(_(u"Skipping %s because of previous error") % util.fsdecode(index_str),
log.WarningCode.process_skipped,
util.escape(index_str))
+
+
+from duplicity import log
+from duplicity import robust
+from duplicity import util
=== modified file 'duplicity/log.py'
--- duplicity/log.py 2019-01-25 17:08:40 +0000
+++ duplicity/log.py 2019-03-04 12:09:45 +0000
@@ -224,11 +224,14 @@
u'\n' + u'\n'.join(col_stats.to_log_info()), force_print)
+<<<<<<< TREE
def PrintCollectionFileChangedStatus(col_stats, filepath, force_print=False):
u"""Prints a collection status to the log"""
Log(str(col_stats.get_file_changed_record(filepath)), 8, InfoCode.collection_status, None, force_print)
+=======
+>>>>>>> MERGE-SOURCE
def Notice(s):
u"""Shortcut used for notice messages (verbosity 3, the default)."""
Log(s, NOTICE)
=== modified file 'duplicity/manifest.py'
--- duplicity/manifest.py 2018-11-29 19:00:15 +0000
+++ duplicity/manifest.py 2019-03-04 12:09:45 +0000
@@ -61,7 +61,6 @@
self.local_dirname = None
self.volume_info_dict = {} # dictionary vol numbers -> vol infos
self.fh = fh
- self.files_changed = []
def set_dirinfo(self):
u"""
@@ -118,6 +117,7 @@
u"--allow-source-mismatch switch to avoid seeing this "
u"message"), code, code_extra)
+<<<<<<< TREE
def set_files_changed_info(self, files_changed):
if files_changed:
self.files_changed = files_changed
@@ -127,6 +127,8 @@
for fileinfo in self.files_changed:
self.fh.write(b" %-7s %s\n" % (fileinfo[1], Quote(fileinfo[0])))
+=======
+>>>>>>> MERGE-SOURCE
def add_volume_info(self, vi):
u"""
Add volume info vi to manifest and write to manifest
@@ -168,11 +170,15 @@
if self.local_dirname:
result += b"Localdir %s\n" % Quote(self.local_dirname)
+<<<<<<< TREE
result += b"Filelist %d\n" % len(self.files_changed)
for fileinfo in self.files_changed:
result += b" %-7s %s\n" % (fileinfo[1], Quote(fileinfo[0]))
vol_num_list = list(self.volume_info_dict.keys())
+=======
+ vol_num_list = self.volume_info_dict.keys()
+>>>>>>> MERGE-SOURCE
vol_num_list.sort()
def vol_num_to_string(vol_num):
@@ -199,11 +205,17 @@
return None
else:
return Unquote(m.group(2))
+<<<<<<< TREE
self.hostname = get_field(u"hostname")
if self.hostname is not None:
self.hostname = self.hostname.decode()
self.local_dirname = get_field(u"localdir")
+=======
+ self.hostname = get_field("hostname")
+ self.local_dirname = get_field("localdir")
+
+>>>>>>> MERGE-SOURCE
highest_vol = 0
latest_vol = 0
vi_regexp = re.compile(b"(?:^|\\n)(volume\\s.*(?:\\n.*)*?)(?=\\nvolume\\s|$)", re.I)
@@ -220,6 +232,7 @@
# want to keep vol3's info.
for i in range(latest_vol + 1, highest_vol + 1):
self.del_volume_info(i)
+<<<<<<< TREE
log.Info(_(u"Found %s volumes in manifest") % latest_vol)
# Get file changed list - not needed if --file-changed not present
@@ -241,11 +254,12 @@
(self.fh.base if self.fh else u"", filecount, len(self.files_changed))))
self.corrupt_filelist = True
+=======
+ log.Info(_("Found %s volumes in manifest") % latest_vol)
+
+>>>>>>> MERGE-SOURCE
return self
- def get_files_changed(self):
- return self.files_changed
-
def __eq__(self, other):
u"""
Two manifests are equal if they contain the same volume infos
=== modified file 'duplicity/patchdir.py'
--- duplicity/patchdir.py 2019-02-21 21:48:53 +0000
+++ duplicity/patchdir.py 2019-03-04 12:09:45 +0000
@@ -123,7 +123,7 @@
# The next tar_info is stored in this one element list so
# Multivol_Filelike below can update it. Any StopIterations will
# be passed upwards.
- tarinfo_list = [next(tar_iter)]
+ tarinfo_list = [tar_iter.next()]
while 1:
# This section relevant when a multivol diff is last in tar
@@ -149,10 +149,14 @@
else:
ropath.setfileobj(diff_tarfile.extractfile(tarinfo_list[0]))
yield ropath
+<<<<<<< TREE
try:
tarinfo_list[0] = next(tar_iter)
except StopIteration:
return
+=======
+ tarinfo_list[0] = tar_iter.next()
+>>>>>>> MERGE-SOURCE
def get_index_from_tarinfo(tarinfo):
@@ -247,7 +251,7 @@
fp.close()
try:
- self.tarinfo_list[0] = next(self.tar_iter)
+ self.tarinfo_list[0] = self.tar_iter.next()
except StopIteration:
self.tarinfo_list[0] = None
self.at_end = 1
@@ -343,19 +347,24 @@
u"""Set tarfile from next file object, or raise StopIteration"""
if self.current_fp:
assert not self.current_fp.close()
+<<<<<<< TREE
self.current_fp = next(self.fileobj_iter)
self.tarfile = util.make_tarfile(u"r", self.current_fp)
+=======
+ self.current_fp = self.fileobj_iter.next()
+ self.tarfile = util.make_tarfile("r", self.current_fp)
+>>>>>>> MERGE-SOURCE
self.tar_iter = iter(self.tarfile)
def __next__(self):
if not self.tarfile:
self.set_tarfile()
try:
- return next(self.tar_iter)
+ return self.tar_iter.next()
except StopIteration:
assert not self.tarfile.close()
self.set_tarfile()
- return next(self.tar_iter)
+ return self.tar_iter.next()
def extractfile(self, tarinfo):
u"""Return data associated with given tarinfo"""
@@ -388,7 +397,7 @@
for i in range(iter_num):
if not overflow[i] and elems[i] is None:
try:
- elems[i] = next(iter_list[i])
+ elems[i] = iter_list[i].next()
except StopIteration:
overflow[i] = 1
elems[i] = None
@@ -455,7 +464,7 @@
def __eq__(self, other):
if isinstance(other, IndexedTuple):
return self.index == other.index and self.data == other.data
- elif isinstance(other, tuple):
+ elif isinstance(other, types.TupleType):
return self.data == other
else:
return None
=== modified file 'duplicity/progress.py'
--- duplicity/progress.py 2018-11-29 19:00:15 +0000
+++ duplicity/progress.py 2019-03-04 12:09:45 +0000
@@ -66,7 +66,11 @@
# If restarting Full, discard marshalled data and start over
if globals.restart is not None and globals.restart.start_vol >= 1:
try:
+<<<<<<< TREE
progressfd = open(u'%s/progress' % globals.archive_dir_path.name, u'r')
+=======
+ progressfd = open('%s/progress' % globals.archive_dir.name, 'r')
+>>>>>>> MERGE-SOURCE
snapshot = pickle.load(progressfd)
progressfd.close()
except:
@@ -80,7 +84,11 @@
u"""
Serializes object to cache
"""
+<<<<<<< TREE
progressfd = open(b'%s/progress' % globals.archive_dir_path.name, u'wb+')
+=======
+ progressfd = open('%s/progress' % globals.archive_dir.name, 'w+')
+>>>>>>> MERGE-SOURCE
pickle.dump(self, progressfd)
progressfd.close()
=== modified file 'duplicity/robust.py'
--- duplicity/robust.py 2018-11-29 19:00:15 +0000
+++ duplicity/robust.py 2019-03-04 12:09:45 +0000
@@ -20,9 +20,6 @@
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import errno
-from duplicity import librsync
-from duplicity import log
-from duplicity import util
tmp_file_index = 1
@@ -66,3 +63,7 @@
dir_listing = check_common_error(error_handler, path.listdir)
dir_listing.sort()
return dir_listing
+
+from duplicity import librsync
+from duplicity import log
+from duplicity import util
=== modified file 'duplicity/selection.py'
--- duplicity/selection.py 2018-11-29 19:00:15 +0000
+++ duplicity/selection.py 2019-03-04 12:09:45 +0000
@@ -36,7 +36,7 @@
from duplicity import diffdir
from duplicity import util # @Reimport
from duplicity.globmatch import GlobbingError, FilePrefixError, \
- select_fn_from_glob
+ path_matches_glob_fn
u"""Iterate exactly the requested files in a directory
@@ -178,7 +178,7 @@
while diryield_stack:
try:
- subpath, val = next(diryield_stack[-1])
+ subpath, val = diryield_stack[-1].next()
except StopIteration:
diryield_stack.pop()
if delayed_path_stack:
@@ -436,6 +436,9 @@
assert isinstance(glob_str, str)
if glob_str == u"**":
sel_func = lambda path: include
+ elif not self.glob_re.match(glob_str):
+ # normal file
+ sel_func = self.glob_get_filename_sf(glob_str, include)
else:
sel_func = self.glob_get_normal_sf(glob_str, include)
@@ -480,6 +483,66 @@
(include and u"include-if-present" or u"exclude-if-present", filename)
return sel_func
+ def glob_get_filename_sf(self, filename, include):
+ """Get a selection function given a normal filename
+
+ Some of the parsing is better explained in
+ filelist_parse_line. The reason this is split from normal
+ globbing is things are a lot less complicated if no special
+ globbing characters are used.
+
+ """
+ # Internal. Used by glob_get_sf and unit tests.
+ # ToDo: Make all globbing/non-globbing use same code path
+ # This distinction has bitten us too many times with bugs in one or
+ # the other.
+ match_only_dirs = False
+
+ if filename != "/" and filename[-1] == "/":
+ match_only_dirs = True
+ # Remove trailing / from directory name (unless that is the entire
+ # string)
+ filename = filename[:-1]
+
+ if not filename.startswith(self.prefix):
+ raise FilePrefixError(filename)
+ index = tuple(filter(lambda x: x,
+ filename[len(self.prefix):].split("/")))
+ return self.glob_get_tuple_sf(index, include, match_only_dirs)
+
+ def glob_get_tuple_sf(self, tuple, include, match_only_dirs=False):
+ """Return selection function based on tuple"""
+ # Internal. Used by glob_get_filename_sf.
+
+ def include_sel_func(path):
+ if len(tuple) == len(path.index) and match_only_dirs and not path.isdir():
+ # If we are assessing the actual directory (rather than the
+ # contents of the directory) and the glob ended with a /,
+ # only match directories
+ return None
+ elif (path.index == tuple[:len(path.index)] or
+ path.index[:len(tuple)] == tuple):
+ return 1 # /foo/bar implicitly matches /foo, vice-versa
+ else:
+ return None
+
+ def exclude_sel_func(path):
+ if match_only_dirs and not path.isdir():
+ # If the glob ended with a /, only match directories
+ return None
+ elif path.index[:len(tuple)] == tuple:
+ return 0 # /foo excludes /foo/bar, not vice-versa
+ else:
+ return None
+
+ if include == 1:
+ sel_func = include_sel_func
+ elif include == 0:
+ sel_func = exclude_sel_func
+ sel_func.exclude = not include
+ sel_func.name = "Tuple select %s" % (tuple,)
+ return sel_func
+
def glob_get_normal_sf(self, glob_str, include):
u"""Return selection function based on glob_str
@@ -505,14 +568,20 @@
glob_str = glob_str[len(u"ignorecase:"):].lower()
ignore_case = True
+<<<<<<< TREE
# Check to make sure prefix is ok, i.e. the glob string is within
# the root folder being backed up
file_prefix_selection = select_fn_from_glob(glob_str, include=1)(self.rootpath)
if not file_prefix_selection:
# file_prefix_selection == 1 (include) or 2 (scan)
raise FilePrefixError(glob_str)
+=======
+ # Check to make sure prefix is ok
+ if not path_matches_glob_fn(glob_str, include=1)(self.rootpath):
+ raise FilePrefixError(glob_str)
+>>>>>>> MERGE-SOURCE
- return select_fn_from_glob(glob_str, include, ignore_case)
+ return path_matches_glob_fn(glob_str, include, ignore_case)
def exclude_older_get_sf(self, date):
u"""Return selection function based on files older than modification date """
=== modified file 'duplicity/statistics.py'
--- duplicity/statistics.py 2019-02-22 19:04:51 +0000
+++ duplicity/statistics.py 2019-03-04 12:09:45 +0000
@@ -316,7 +316,6 @@
self.__dict__[attr] = 0
self.Errors = 0
self.StartTime = time.time()
- self.files_changed = []
def add_new_file(self, path):
u"""Add stats of new file path to statistics"""
@@ -326,7 +325,10 @@
self.NewFiles += 1
self.NewFileSize += filesize
self.DeltaEntries += 1
+<<<<<<< TREE
self.add_delta_entries_file(path, b'new')
+=======
+>>>>>>> MERGE-SOURCE
def add_changed_file(self, path):
u"""Add stats of file that has changed since last backup"""
@@ -336,13 +338,24 @@
self.ChangedFiles += 1
self.ChangedFileSize += filesize
self.DeltaEntries += 1
+<<<<<<< TREE
self.add_delta_entries_file(path, b'changed')
+=======
+>>>>>>> MERGE-SOURCE
+<<<<<<< TREE
def add_deleted_file(self, path):
u"""Add stats of file no longer in source directory"""
+=======
+ def add_deleted_file(self):
+ """Add stats of file no longer in source directory"""
+>>>>>>> MERGE-SOURCE
self.DeletedFiles += 1 # can't add size since not available
self.DeltaEntries += 1
+<<<<<<< TREE
self.add_delta_entries_file(path, b'deleted')
+=======
+>>>>>>> MERGE-SOURCE
def add_unchanged_file(self, path):
u"""Add stats of file that hasn't changed since last backup"""
@@ -353,10 +366,3 @@
def close(self):
u"""End collection of data, set EndTime"""
self.EndTime = time.time()
-
- def add_delta_entries_file(self, path, action_type):
- if path.isreg():
- self.files_changed.append((path.get_relative_path(), action_type))
-
- def get_delta_entries_file(self):
- return self.files_changed
=== modified file 'duplicity/tarfile.py'
--- duplicity/tarfile.py 2018-09-11 21:35:37 +0000
+++ duplicity/tarfile.py 2019-03-04 12:09:45 +0000
@@ -23,7 +23,6 @@
from __future__ import absolute_import
import tarfile
-from duplicity import cached_ops
# Grab all symbols in tarfile, to try to reproduce its API exactly.
# from <> import * wouldn't get everything we want, since tarfile defines
@@ -32,4 +31,5 @@
globals()[sym] = getattr(tarfile, sym)
# Now make sure that we cache the grp/pwd ops
+from duplicity import cached_ops
grp = pwd = cached_ops
=== modified file 'duplicity/util.py'
--- duplicity/util.py 2018-11-29 19:00:15 +0000
+++ duplicity/util.py 2019-03-04 12:09:45 +0000
@@ -85,15 +85,31 @@
else:
msg = msg + u"%-20s %s" % (string.join(lines[:-1], u""), lines[-1])
+<<<<<<< TREE
if sys.version_info.major < 3:
return msg.decode(u'unicode-escape', u'replace')
return msg
+=======
+ return msg.decode('unicode-escape', 'replace')
+>>>>>>> MERGE-SOURCE
def escape(string):
+<<<<<<< TREE
u"Convert a (bytes) filename to a format suitable for logging (quoted utf8)"
string = fsdecode(string).encode(u'unicode-escape', u'replace')
return u"'%s'" % string.decode(u'utf8', u'replace')
+=======
+ "Convert a (bytes) filename to a format suitable for logging (quoted utf8)"
+ string = ufn(string).encode('unicode-escape', 'replace')
+ return u"'%s'" % string.decode('utf8', 'replace')
+
+
+def ufn(filename):
+ "Convert a (bytes) filename to unicode for printing"
+ assert not isinstance(filename, unicode)
+ return filename.decode(globals.fsencoding, 'replace')
+>>>>>>> MERGE-SOURCE
def uindex(index):
@@ -109,7 +125,11 @@
# non-ascii will cause a UnicodeDecodeError when implicitly decoding to
# unicode. So we decode manually, using the filesystem encoding.
# 99.99% of the time, this will be a fine encoding to use.
+<<<<<<< TREE
return fsdecode(str(e).encode(u'utf-8'))
+=======
+ return ufn(unicode(e).encode('utf-8'))
+>>>>>>> MERGE-SOURCE
def maybe_ignore_errors(fn):
=== modified file 'po/bg.po'
--- po/bg.po 2018-02-25 05:44:50 +0000
+++ po/bg.po 2019-03-04 12:09:45 +0000
@@ -6,17 +6,29 @@
msgid ""
msgstr ""
"Project-Id-Version: duplicity\n"
+<<<<<<< TREE
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2018-02-24 06:05+0000\n"
"PO-Revision-Date: 2018-02-23 13:10+0000\n"
+=======
+"Report-Msgid-Bugs-To: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+"POT-Creation-Date: 2018-08-21 10:58-0500\n"
+"PO-Revision-Date: 2014-04-29 08:20+0000\n"
+>>>>>>> MERGE-SOURCE
"Last-Translator: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
"Language-Team: Bulgarian <bg@xxxxxx>\n"
+"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+<<<<<<< TREE
"X-Launchpad-Export-Date: 2018-02-25 05:44+0000\n"
"X-Generator: Launchpad (build 18561)\n"
+=======
+"X-Launchpad-Export-Date: 2018-08-12 04:35+0000\n"
+"X-Generator: Launchpad (build 18747)\n"
+>>>>>>> MERGE-SOURCE
#: ../bin/duplicity:133
msgid "Reuse configured PASSPHRASE as SIGN_PASSPHRASE"
@@ -69,28 +81,53 @@
"Continuing restart on file %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:331
+=======
+#: ../bin/duplicity:336
+#, python-format
+msgid "Remote filesize %d for %s does not match local size %d, retrying."
+msgstr ""
+
+#: ../bin/duplicity:343
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s was corrupted during upload."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:364
+=======
+#: ../bin/duplicity:376
+>>>>>>> MERGE-SOURCE
msgid ""
"Restarting backup, but current encryption settings do not match original "
"settings"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:387
+=======
+#: ../bin/duplicity:399
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Restarting after volume %s, file %s, block %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:457
+=======
+#: ../bin/duplicity:469
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:606
+=======
+#: ../bin/duplicity:618
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
@@ -98,101 +135,176 @@
"Фатална грешка: Не е възможно да започне допълващо архивиране, защото не "
"съществува предишен пълен архив."
+<<<<<<< TREE
#: ../bin/duplicity:610
+=======
+#: ../bin/duplicity:622
+>>>>>>> MERGE-SOURCE
msgid "No signatures found, switching to full backup."
msgstr "Не съществува предишен архив. Ще се създане нов пълен архив."
+<<<<<<< TREE
#: ../bin/duplicity:624
+=======
+#: ../bin/duplicity:636
+>>>>>>> MERGE-SOURCE
msgid "Backup Statistics"
msgstr "Статистика:"
+<<<<<<< TREE
#: ../bin/duplicity:730
+=======
+#: ../bin/duplicity:742
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%s not found in archive - no files restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:734
+=======
+#: ../bin/duplicity:746
+>>>>>>> MERGE-SOURCE
msgid "No files found in archive - nothing restored."
msgstr "В архива няма файлове нищо не беше възстановено."
+<<<<<<< TREE
#: ../bin/duplicity:767
+=======
+#: ../bin/duplicity:779
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d of %d"
msgstr "Обработен част %d от %d"
+<<<<<<< TREE
#: ../bin/duplicity:801
+=======
+#: ../bin/duplicity:813
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Invalid data - %s hash mismatch for file:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:804
+=======
+#: ../bin/duplicity:816
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Calculated hash: %s"
msgstr "Изчислена контролна сума: %s"
+<<<<<<< TREE
#: ../bin/duplicity:805
+=======
+#: ../bin/duplicity:817
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Manifest hash: %s"
msgstr "Контролна сума на манифеста %s"
+<<<<<<< TREE
#: ../bin/duplicity:848
+=======
+#: ../bin/duplicity:860
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Volume was signed by key %s, not %s"
msgstr "Архивният файл е подписан с ключ %s, а не с %s"
+<<<<<<< TREE
#: ../bin/duplicity:880
+=======
+#: ../bin/duplicity:892
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Verify complete: %s, %s."
msgstr "Проверката завършена: %s, %s"
+<<<<<<< TREE
#: ../bin/duplicity:881
+=======
+#: ../bin/duplicity:893
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file compared"
msgid_plural "%d files compared"
msgstr[0] "%d файлът е сравнен"
msgstr[1] "%d файловете са сравнени"
+<<<<<<< TREE
#: ../bin/duplicity:883
+=======
+#: ../bin/duplicity:895
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d difference found"
msgid_plural "%d differences found"
msgstr[0] "намерена е %d разлика"
msgstr[1] "намерени са %d разлики"
+<<<<<<< TREE
#: ../bin/duplicity:902
+=======
+#: ../bin/duplicity:914
+>>>>>>> MERGE-SOURCE
msgid "No extraneous files found, nothing deleted in cleanup."
msgstr ""
"Не бяха намерени излишни файлове, нищо не беше изтрито по време на "
"почистването."
+<<<<<<< TREE
#: ../bin/duplicity:907
+=======
+#: ../bin/duplicity:919
+>>>>>>> MERGE-SOURCE
msgid "Deleting this file from backend:"
msgid_plural "Deleting these files from backend:"
msgstr[0] "Файлът ще бъде изтрит:"
msgstr[1] "Файловете ще бъдат изтрити:"
+<<<<<<< TREE
#: ../bin/duplicity:918
+=======
+#: ../bin/duplicity:930
+>>>>>>> MERGE-SOURCE
msgid "Found the following file to delete:"
msgid_plural "Found the following files to delete:"
msgstr[0] "Открит е следният файл за изтриване:"
msgstr[1] "Открит са следните файлове за изтриване:"
+<<<<<<< TREE
#: ../bin/duplicity:921
+=======
+#: ../bin/duplicity:933
+>>>>>>> MERGE-SOURCE
msgid "Run duplicity again with the --force option to actually delete."
msgstr ""
"Стартирайте duplicity отново с опция --force, за да се изпълни реалното "
"изтриване на файлове."
+<<<<<<< TREE
#: ../bin/duplicity:964
+=======
+#: ../bin/duplicity:976
+>>>>>>> MERGE-SOURCE
msgid "There are backup set(s) at time(s):"
msgstr "Има архивни копия от дати:"
+<<<<<<< TREE
#: ../bin/duplicity:966
+=======
+#: ../bin/duplicity:978
+>>>>>>> MERGE-SOURCE
msgid "Which can't be deleted because newer sets depend on them."
-msgstr ""
-"Които не могат да бъдат изтрити защото по-нови архиви зависят от тях."
+msgstr "Които не могат да бъдат изтрити защото по-нови архиви зависят от тях."
+<<<<<<< TREE
#: ../bin/duplicity:970
+=======
+#: ../bin/duplicity:982
+>>>>>>> MERGE-SOURCE
msgid ""
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
@@ -201,16 +313,25 @@
"бъде изтрито. Ако желаете да изтриете всички съществуващи архиви трябва да "
"го направите ръчно."
+<<<<<<< TREE
#: ../bin/duplicity:983
+=======
+#: ../bin/duplicity:995
+>>>>>>> MERGE-SOURCE
msgid "No old backup sets found, nothing deleted."
msgstr "Не бяха открити стари архивни копия, нищо не беше изтрито."
+<<<<<<< TREE
#: ../bin/duplicity:986
+=======
+#: ../bin/duplicity:998
+>>>>>>> MERGE-SOURCE
msgid "Deleting backup chain at time:"
msgid_plural "Deleting backup chains at times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:998
#, python-format
msgid "Deleting any incremental signature chain rooted at %s"
@@ -222,26 +343,52 @@
msgstr ""
#: ../bin/duplicity:1003
+=======
+#: ../bin/duplicity:1010
+#, python-format
+msgid "Deleting any incremental signature chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1012
+#, python-format
+msgid "Deleting any incremental backup chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1015
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete signature chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1005
+=======
+#: ../bin/duplicity:1017
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete backup chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1011
+=======
+#: ../bin/duplicity:1023
+>>>>>>> MERGE-SOURCE
msgid "Found old backup chain at the following time:"
msgid_plural "Found old backup chains at the following times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:1015
+=======
+#: ../bin/duplicity:1027
+>>>>>>> MERGE-SOURCE
msgid "Rerun command with --force option to actually delete."
msgstr ""
"Моля изпълнете командата с опция --force, за да бъдат изтрити файловете."
+<<<<<<< TREE
#: ../bin/duplicity:1028
msgid "No old backup sets found."
msgstr ""
@@ -262,71 +409,121 @@
msgstr ""
#: ../bin/duplicity:1092
+=======
+#: ../bin/duplicity:1104
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting local %s (not authoritative at backend)."
-msgstr ""
-"Изтрива се локалния файла %s, който не съществува в отдалечения архив."
+msgstr "Изтрива се локалния файла %s, който не съществува в отдалечения архив."
+<<<<<<< TREE
#: ../bin/duplicity:1097
+=======
+#: ../bin/duplicity:1109
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Unable to delete %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1128 ../duplicity/dup_temp.py:266
+=======
+#: ../bin/duplicity:1140 ../duplicity/dup_temp.py:266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Failed to read %s: %s"
msgstr "Грешка при четене на %s: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1142
+=======
+#: ../bin/duplicity:1154
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Copying %s to local cache."
msgstr "Копира се %s в локалния кеш."
+<<<<<<< TREE
#: ../bin/duplicity:1190
+=======
+#: ../bin/duplicity:1202
+>>>>>>> MERGE-SOURCE
msgid "Local and Remote metadata are synchronized, no sync needed."
msgstr ""
"Локалните и отдалечените мета данни са еднакви, няма нужда от синхронизиране."
+<<<<<<< TREE
#: ../bin/duplicity:1195
+=======
+#: ../bin/duplicity:1207
+>>>>>>> MERGE-SOURCE
msgid "Synchronizing remote metadata to local cache..."
msgstr "Синхронизиране на локалния кеш с отдалечения..."
+<<<<<<< TREE
#: ../bin/duplicity:1207
+=======
+#: ../bin/duplicity:1219
+>>>>>>> MERGE-SOURCE
msgid "Sync would copy the following from remote to local:"
msgstr ""
"Синхронизирането ще копира следните файлове от отдалечения архив в локалния "
"кеш:"
+<<<<<<< TREE
#: ../bin/duplicity:1210
+=======
+#: ../bin/duplicity:1222
+>>>>>>> MERGE-SOURCE
msgid "Sync would remove the following spurious local files:"
msgstr "Синхронизирането ще премахне следните невалидни локални файлове:"
+<<<<<<< TREE
#: ../bin/duplicity:1253
+=======
+#: ../bin/duplicity:1265
+>>>>>>> MERGE-SOURCE
msgid "Unable to get free space on temp."
msgstr ""
"Не е възможно да се изчисли свободното място във временната директория."
+<<<<<<< TREE
#: ../bin/duplicity:1261
+=======
+#: ../bin/duplicity:1273
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp space has %d available, backup needs approx %d."
msgstr ""
"Във временната директория има %d свободно място, за операцията е необходимо "
"приблизително %d. Моля освободете необходимото място."
+<<<<<<< TREE
#: ../bin/duplicity:1264
+=======
+#: ../bin/duplicity:1276
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp has %d available, backup will use approx %d."
msgstr ""
"Във временната директория има %d свободно място, за операцията е необходимо "
"приблизително %d. Моля освободете необходимото място."
+<<<<<<< TREE
#: ../bin/duplicity:1272
+=======
+#: ../bin/duplicity:1284
+>>>>>>> MERGE-SOURCE
msgid "Unable to get max open files."
msgstr ""
"Не е възможно да се определи колко файла могат да бъдат отворени "
"едновременно."
+<<<<<<< TREE
#: ../bin/duplicity:1276
+=======
+#: ../bin/duplicity:1288
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Max open files of %s is too low, should be >= 1024.\n"
@@ -336,7 +533,11 @@
"малко желателно е да бъдат поне 1024.\n"
"Изпълнете командата 'ulimit -n 1024' или повече.\n"
+<<<<<<< TREE
#: ../bin/duplicity:1327
+=======
+#: ../bin/duplicity:1339
+>>>>>>> MERGE-SOURCE
msgid ""
"RESTART: The first volume failed to upload before termination.\n"
" Restart is impossible...starting backup from beginning."
@@ -346,7 +547,11 @@
" Не е възможно да се продължи от предишната позиция. Операцията ще "
"започне от начало."
+<<<<<<< TREE
#: ../bin/duplicity:1333
+=======
+#: ../bin/duplicity:1345
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Volumes %d to %d failed to upload before termination.\n"
@@ -355,7 +560,11 @@
"Рестартиране на операцията: Архиви %d от %d не бяха качени успешно.\n"
" Рестаритарен след архив %d."
+<<<<<<< TREE
#: ../bin/duplicity:1340
+=======
+#: ../bin/duplicity:1352
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
@@ -368,7 +577,11 @@
" Рестартирането е невъзможно duplicity ще изтрие частичните данни от "
"последната операция и ще започне операцията от начало."
+<<<<<<< TREE
#: ../bin/duplicity:1361
+=======
+#: ../bin/duplicity:1373
+>>>>>>> MERGE-SOURCE
msgid ""
"\n"
"PYTHONOPTIMIZE in the environment causes duplicity to fail to\n"
@@ -378,56 +591,102 @@
"See https://bugs.launchpad.net/duplicity/+bug/931175\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1384
#, python-format
msgid "Acquiring lockfile %s"
+=======
+#: ../bin/duplicity:1396
+#, python-format
+msgid "Acquiring lockfile %s"
+>>>>>>> MERGE-SOURCE
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1442
+=======
+#: ../bin/duplicity:1454
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Last %s backup left a partial set, restarting."
msgstr "Предишният опит %s остави частично резервно копие. Рестартиране."
+<<<<<<< TREE
#: ../bin/duplicity:1446
+=======
+#: ../bin/duplicity:1458
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Cleaning up previous partial %s backup set, restarting."
msgstr "Премахване на предишното частично резервно копие %s и рестартиране."
+<<<<<<< TREE
#: ../bin/duplicity:1458
+=======
+#: ../bin/duplicity:1470
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date:"
msgstr "Дата на последното пълно резервно копие:"
+<<<<<<< TREE
#: ../bin/duplicity:1460
+=======
+#: ../bin/duplicity:1472
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date: none"
msgstr "Дата на последното пълно резервно копие: Не съществува"
+<<<<<<< TREE
#: ../bin/duplicity:1462
+=======
+#: ../bin/duplicity:1474
+>>>>>>> MERGE-SOURCE
msgid "Last full backup is too old, forcing full backup"
msgstr ""
"Последното пълно резервно копие е прекалено старо. Ще бъде направено пълно "
"резервно копие."
+<<<<<<< TREE
#: ../bin/duplicity:1506
+=======
+#: ../bin/duplicity:1518
+>>>>>>> MERGE-SOURCE
msgid ""
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1575
+=======
+#: ../bin/duplicity:1587
+>>>>>>> MERGE-SOURCE
msgid "INT intercepted...exiting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1583
+=======
+#: ../bin/duplicity:1595
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG error detail: %s"
msgstr "GPG върна грешката. Детайли: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1593
+=======
+#: ../bin/duplicity:1605
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "User error detail: %s"
msgstr "Детайли за грешка: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1603
+=======
+#: ../bin/duplicity:1615
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backend error detail: %s"
msgstr "Детайли за отдалечената грешка: %s"
@@ -521,6 +780,7 @@
"Use of default filenames is strongly suggested."
msgstr "Предупреждение! Параметър %s ще бъде премахнат от бъдещите версии."
+<<<<<<< TREE
#: ../duplicity/commandline.py:78
#, python-format
msgid ""
@@ -541,6 +801,28 @@
msgstr ""
#. TRANSL: Used in usage help to represent a Unix-style path name. Example:
+=======
+#: ../duplicity/commandline.py:78
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"--include-filelist and --exclude-filelist now accept globbing characters and "
+"should be used instead."
+msgstr ""
+
+#: ../duplicity/commandline.py:88
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"On many GNU/Linux systems, stdin is represented by /dev/stdin and\n"
+"--include-filelist=/dev/stdin or --exclude-filelist=/dev/stdin could\n"
+"be used as a substitute."
+msgstr ""
+
+#. Used in usage help to represent a Unix-style path name. Example:
+>>>>>>> MERGE-SOURCE
#. --archive-dir <path>
#: ../duplicity/commandline.py:280 ../duplicity/commandline.py:290
#: ../duplicity/commandline.py:311 ../duplicity/commandline.py:385
@@ -579,8 +861,13 @@
msgid "filename"
msgstr "Име на файла"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent a regular expression (regexp).
#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+=======
+#. Used in usage help to represent a regular expression (regexp).
+#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+>>>>>>> MERGE-SOURCE
msgid "regular_expression"
msgstr "Регулярен израз."
@@ -610,8 +897,13 @@
"Предупреждение! Всички грешки ще бъдат игнорирани заради подаден параметър "
"„%s“. Ако не желаете това прекратете изпълнението на програмата."
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent an imap mailbox
#: ../duplicity/commandline.py:432
+=======
+#. Used in usage help to represent an imap mailbox
+#: ../duplicity/commandline.py:432
+>>>>>>> MERGE-SOURCE
msgid "imap_mailbox"
msgstr ""
@@ -630,11 +922,17 @@
msgid "number"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help (noun)
#: ../duplicity/commandline.py:464
+=======
+#. Used in usage help (noun)
+#: ../duplicity/commandline.py:464
+>>>>>>> MERGE-SOURCE
msgid "backup name"
msgstr "Име на резервното копие"
+<<<<<<< TREE
#: ../duplicity/commandline.py:567
msgid "policy"
msgstr ""
@@ -642,6 +940,11 @@
#. TRANSL: noun
#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
#: ../duplicity/commandline.py:768
+=======
+#. noun
+#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
+#: ../duplicity/commandline.py:768
+>>>>>>> MERGE-SOURCE
msgid "command"
msgstr ""
@@ -653,23 +956,43 @@
msgid "pem formatted bundle of certificate authorities"
msgstr ""
-#: ../duplicity/commandline.py:591
-msgid "path to a folder with certificate authority files"
-msgstr ""
-
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --backend-retry-delay <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
-#: ../duplicity/commandline.py:831
+<<<<<<< TREE
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr ""
+
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+=======
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr ""
+
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#. Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+>>>>>>> MERGE-SOURCE
msgid "seconds"
msgstr "секунди"
+<<<<<<< TREE
#. TRANSL: abbreviation for "character" (noun)
#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+=======
+#. abbreviation for "character" (noun)
+#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+>>>>>>> MERGE-SOURCE
msgid "char"
msgstr ""
@@ -718,13 +1041,23 @@
msgid "container_name"
msgstr ""
+<<<<<<< TREE
#. TRANSL: noun
#: ../duplicity/commandline.py:776
+=======
+#. noun
+#: ../duplicity/commandline.py:776
+>>>>>>> MERGE-SOURCE
msgid "count"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent the name of a file directory
#: ../duplicity/commandline.py:779
+=======
+#. Used in usage help to represent the name of a file directory
+#: ../duplicity/commandline.py:779
+>>>>>>> MERGE-SOURCE
msgid "directory"
msgstr "директория"
@@ -810,6 +1143,7 @@
msgid "user"
msgstr ""
+<<<<<<< TREE
#. TRANSL: account id for b2. Example: b2://account_id@bucket/
#: ../duplicity/commandline.py:877
msgid "account_id"
@@ -823,20 +1157,38 @@
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:899
+=======
+#. account id for b2. Example: b2://account_id@bucket/
+#: ../duplicity/commandline.py:877
+msgid "account_id"
+msgstr ""
+
+#. application_key for b2.
+#. Example: b2://account_id:application_key@bucket/
+#: ../duplicity/commandline.py:881
+msgid "application_key"
+msgstr ""
+
+#. Header in usage help
+#: ../duplicity/commandline.py:899
+>>>>>>> MERGE-SOURCE
msgid "Backends and their URL formats:"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:930
+=======
+#. Header in usage help
+#: ../duplicity/commandline.py:930
+>>>>>>> MERGE-SOURCE
msgid "Commands:"
msgstr "Команди:"
#: ../duplicity/commandline.py:954
#, python-format
-msgid ""
-"Specified archive directory '%s' does not exist, or is not a directory"
-msgstr ""
-"Директорията „%s“ която беше зададена като локален кеш не съществува."
+msgid "Specified archive directory '%s' does not exist, or is not a directory"
+msgstr "Директорията „%s“ която беше зададена като локален кеш не съществува."
#: ../duplicity/commandline.py:963
#, python-format
@@ -1130,12 +1482,20 @@
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#. TRANSL: "cleanup" is a hard-coded command, so do not translate it
#: ../duplicity/collections.py:666
msgid ""
"These may be deleted by running duplicity with the \"cleanup\" command."
msgstr ""
+=======
+#. "cleanup" is a hard-coded command, so do not translate it
+#: ../duplicity/collections.py:666
+msgid "These may be deleted by running duplicity with the \"cleanup\" command."
+msgstr ""
+
+>>>>>>> MERGE-SOURCE
#: ../duplicity/collections.py:669
msgid "No orphaned or incomplete backup sets found."
msgstr ""
@@ -1154,9 +1514,14 @@
msgstr[0] "%d файл съществува в локалния кеш"
msgstr[1] "%d файла съществуват в локалния кеш"
+<<<<<<< TREE
#: ../duplicity/collections.py:748
msgid ""
"Warning, discarding last backup set, because of missing signature file."
+=======
+#: ../duplicity/collections.py:748
+msgid "Warning, discarding last backup set, because of missing signature file."
+>>>>>>> MERGE-SOURCE
msgstr ""
#: ../duplicity/collections.py:771
@@ -1297,6 +1662,7 @@
msgid "Connection failed, please check your password: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:85
#, python-format
msgid "MultiBackend: Could not parse query string %s: %s "
@@ -1542,6 +1908,247 @@
msgid ""
"basis_file must be a (true) file or an object whose file attribute is the "
"underlying true file object"
+=======
+#: ../duplicity/backends/multibackend.py:85
+#, python-format
+msgid "MultiBackend: Could not parse query string %s: %s "
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:94
+#, python-format
+msgid "MultiBackend: Invalid query string %s: more than one value for %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:99
+#, python-format
+msgid "MultiBackend: Invalid query string %s: unknown parameter %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:149
+#: ../duplicity/backends/multibackend.py:154
+#, python-format
+msgid "MultiBackend: illegal value for %s: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:162
+#, python-format
+msgid "MultiBackend: Url %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:166
+#, python-format
+msgid "MultiBackend: Could not load config file %s: %s "
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:175
+#, python-format
+msgid "MultiBackend: use store %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:180
+#, python-format
+msgid "MultiBackend: set env %s = %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:206
+#, python-format
+msgid "MultiBackend: _put: write to store #%s (%s)"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:219
+#, python-format
+msgid "MultiBackend: failed to write to store #%s (%s), try #%s, Exception: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:226
+#, python-format
+msgid "MultiBackend: failed to write %s. Aborting process."
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:233
+#, python-format
+msgid ""
+"MultiBackend: failed to write %s. Tried all backing stores and none succeeded"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:250
+#, python-format
+msgid "MultiBackend: failed to get %s to %s from %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:253
+#, python-format
+msgid ""
+"MultiBackend: failed to get %s. Tried all backing stores and none succeeded"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:262
+#, python-format
+msgid "MultiBackend: list from %s: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:268
+#, python-format
+msgid "MultiBackend: combined list: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:290
+#, python-format
+msgid "MultiBackend: failed to delete %s from %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:294
+#, python-format
+msgid ""
+"MultiBackend: failed to delete %s. Tried all backing stores and none "
+"succeeded"
+msgstr ""
+
+#: ../duplicity/backends/pydrivebackend.py:143
+#, python-format
+msgid "PyDrive backend: multiple files called '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:61
+msgid "Missing socket or ssl python modules."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:79
+#, python-format
+msgid "Cacert database file '%s' is not readable."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:100
+msgid ""
+"Option '--ssl-cacert-path' is not supported with python 2.7.8 and below."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:104
+#, python-format
+msgid ""
+"For certificate verification with python 2.7.8 or earlier a cacert database\n"
+"file is needed in one of these locations: %s\n"
+"Hints:\n"
+" Consult the man page, chapter 'SSL Certificate Verification'.\n"
+" Consider using the options --ssl-cacert-file, --ssl-no-check-certificate ."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:150
+#, python-format
+msgid "Using WebDAV protocol %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:151
+#, python-format
+msgid "Using WebDAV host %s port %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:153
+#, python-format
+msgid "Using WebDAV directory %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:184
+#, python-format
+msgid "WebDAV create connection on '%s'"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:195
+#, python-format
+msgid "WebDAV Unknown URI scheme: %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:214
+#, python-format
+msgid "WebDAV %s %s request with headers: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:215
+#: ../duplicity/backends/webdavbackend.py:238
+#, python-format
+msgid "WebDAV data length: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:218
+#, python-format
+msgid "WebDAV response status %s with reason '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:224
+#, python-format
+msgid "WebDAV redirect to: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:226
+msgid "WebDAV redirected 10 times. Giving up."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:231
+msgid "WebDAV missing location header in redirect response."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:236
+msgid "WebDAV retry request with authentification headers."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:237
+#, python-format
+msgid "WebDAV %s %s request2 with headers: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:241
+#, python-format
+msgid "WebDAV response2 status %s with reason '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:258
+msgid ""
+"python-kerberos needed to use kerberos "
+"authorization, falling back to basic auth."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:262
+#, python-format
+msgid ""
+"Kerberos authorization failed: %s. Falling back to "
+"basic auth."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:360
+#, python-format
+msgid "Creating missing directory %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:364
+#, python-format
+msgid "WebDAV MKCOL %s failed: %s %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:377
+#, python-format
+msgid "WebDAV path decoding and translation: %s -> %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:422
+#, python-format
+msgid "WebDAV GET Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:444
+#, python-format
+msgid "WebDAV PUT Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:464
+#, python-format
+msgid "WebDAV DEL Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/librsync.py:184
+msgid ""
+"basis_file must be a (true) file or an object whose file attribute is the "
+"underlying true file object"
+>>>>>>> MERGE-SOURCE
msgstr ""
#: ../duplicity/manifest.py:91
@@ -1568,6 +2175,7 @@
"seeing this message"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:192
#, python-format
msgid "Found manifest volume %s"
@@ -1585,6 +2193,19 @@
msgstr ""
#: ../duplicity/manifest.py:213
+=======
+#: ../duplicity/manifest.py:192
+#, python-format
+msgid "Found manifest volume %s"
+msgstr ""
+
+#: ../duplicity/manifest.py:199
+#, python-format
+msgid "Found %s volumes in manifest"
+msgstr ""
+
+#: ../duplicity/manifest.py:213
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because different volume numbers"
msgstr ""
@@ -1775,3 +2396,26 @@
#, python-format
msgid "Releasing lockfile %s"
msgstr ""
+<<<<<<< TREE
+=======
+
+#~ msgid "%s not found in archive, no files restored."
+#~ msgstr "Файла %s не беше намерен в архива."
+
+#~ msgid "Found old backup set at the following time:"
+#~ msgid_plural "Found old backup sets at the following times:"
+#~ msgstr[0] "Намерено е старо архивно копие от следната дата:"
+#~ msgstr[1] "Намерени са стари архивни копия от следните дати:"
+
+#~ msgid "Deleting backup set at time:"
+#~ msgid_plural "Deleting backup sets at times:"
+#~ msgstr[0] "Изтриване на архивно копие от дата:"
+#~ msgstr[1] "Изтриване на архивни копия от дати:"
+
+#~ msgid ""
+#~ "Error is:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Грешка:\n"
+#~ "%s"
+>>>>>>> MERGE-SOURCE
=== modified file 'po/bs.po'
--- po/bs.po 2018-02-25 05:44:50 +0000
+++ po/bs.po 2019-03-04 12:09:45 +0000
@@ -6,18 +6,32 @@
msgid ""
msgstr ""
"Project-Id-Version: duplicity\n"
+<<<<<<< TREE
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2018-02-24 06:05+0000\n"
"PO-Revision-Date: 2018-02-23 13:10+0000\n"
+=======
+"Report-Msgid-Bugs-To: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+"POT-Creation-Date: 2018-08-21 10:58-0500\n"
+"PO-Revision-Date: 2011-12-29 12:30+0000\n"
+>>>>>>> MERGE-SOURCE
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bosnian <bs@xxxxxx>\n"
+"Language: bs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+<<<<<<< TREE
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Launchpad-Export-Date: 2018-02-25 05:44+0000\n"
"X-Generator: Launchpad (build 18561)\n"
+=======
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Launchpad-Export-Date: 2018-08-12 04:35+0000\n"
+"X-Generator: Launchpad (build 18747)\n"
+>>>>>>> MERGE-SOURCE
#: ../bin/duplicity:133
msgid "Reuse configured PASSPHRASE as SIGN_PASSPHRASE"
@@ -70,139 +84,249 @@
"Continuing restart on file %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:331
+=======
+#: ../bin/duplicity:336
+#, python-format
+msgid "Remote filesize %d for %s does not match local size %d, retrying."
+msgstr ""
+
+#: ../bin/duplicity:343
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s was corrupted during upload."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:364
+=======
+#: ../bin/duplicity:376
+>>>>>>> MERGE-SOURCE
msgid ""
"Restarting backup, but current encryption settings do not match original "
"settings"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:387
+=======
+#: ../bin/duplicity:399
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Restarting after volume %s, file %s, block %s"
msgstr "Ponovno pokretanje poslje volumena %s, dadoteke %s, blokirati %s"
+<<<<<<< TREE
#: ../bin/duplicity:457
+=======
+#: ../bin/duplicity:469
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d"
msgstr "Obrađen volumen %d"
+<<<<<<< TREE
#: ../bin/duplicity:606
+=======
+#: ../bin/duplicity:618
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:610
+=======
+#: ../bin/duplicity:622
+>>>>>>> MERGE-SOURCE
msgid "No signatures found, switching to full backup."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:624
+=======
+#: ../bin/duplicity:636
+>>>>>>> MERGE-SOURCE
msgid "Backup Statistics"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:730
+=======
+#: ../bin/duplicity:742
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%s not found in archive - no files restored."
msgstr "%s. nije pronađen u arhivu - nijedan fajl nije povraćen."
+<<<<<<< TREE
#: ../bin/duplicity:734
+=======
+#: ../bin/duplicity:746
+>>>>>>> MERGE-SOURCE
msgid "No files found in archive - nothing restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:767
+=======
+#: ../bin/duplicity:779
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d of %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:801
+=======
+#: ../bin/duplicity:813
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Invalid data - %s hash mismatch for file:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:804
+=======
+#: ../bin/duplicity:816
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Calculated hash: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:805
+=======
+#: ../bin/duplicity:817
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Manifest hash: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:848
+=======
+#: ../bin/duplicity:860
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Volume was signed by key %s, not %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:880
+=======
+#: ../bin/duplicity:892
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Verify complete: %s, %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:881
+=======
+#: ../bin/duplicity:893
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file compared"
msgid_plural "%d files compared"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:883
+=======
+#: ../bin/duplicity:895
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d difference found"
msgid_plural "%d differences found"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:902
+=======
+#: ../bin/duplicity:914
+>>>>>>> MERGE-SOURCE
msgid "No extraneous files found, nothing deleted in cleanup."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:907
+=======
+#: ../bin/duplicity:919
+>>>>>>> MERGE-SOURCE
msgid "Deleting this file from backend:"
msgid_plural "Deleting these files from backend:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:918
+=======
+#: ../bin/duplicity:930
+>>>>>>> MERGE-SOURCE
msgid "Found the following file to delete:"
msgid_plural "Found the following files to delete:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:921
+=======
+#: ../bin/duplicity:933
+>>>>>>> MERGE-SOURCE
msgid "Run duplicity again with the --force option to actually delete."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:964
+=======
+#: ../bin/duplicity:976
+>>>>>>> MERGE-SOURCE
msgid "There are backup set(s) at time(s):"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:966
+=======
+#: ../bin/duplicity:978
+>>>>>>> MERGE-SOURCE
msgid "Which can't be deleted because newer sets depend on them."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:970
+=======
+#: ../bin/duplicity:982
+>>>>>>> MERGE-SOURCE
msgid ""
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:983
+=======
+#: ../bin/duplicity:995
+>>>>>>> MERGE-SOURCE
msgid "No old backup sets found, nothing deleted."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:986
+=======
+#: ../bin/duplicity:998
+>>>>>>> MERGE-SOURCE
msgid "Deleting backup chain at time:"
msgid_plural "Deleting backup chains at times:"
msgstr[0] "Brišem lanac rezervnih kopija u vrijeme:"
msgstr[1] "Brišem lance rezervnih kopija u vremenima:"
msgstr[2] "Brišem lance rezervnih kopija u vremenima:"
+<<<<<<< TREE
#: ../bin/duplicity:998
#, python-format
msgid "Deleting any incremental signature chain rooted at %s"
@@ -214,26 +338,54 @@
msgstr ""
#: ../bin/duplicity:1003
+=======
+#: ../bin/duplicity:1010
+#, python-format
+msgid "Deleting any incremental signature chain rooted at %s"
+msgstr "Brisanje svakog inkrementalnog lanca potpisa ukorijenjenog na %s"
+
+#: ../bin/duplicity:1012
+#, python-format
+msgid "Deleting any incremental backup chain rooted at %s"
+msgstr ""
+"Brisanje svakog inkrementalnog lanca sigurnosnog kopiranja ukorijenjenog na "
+"%s"
+
+#: ../bin/duplicity:1015
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete signature chain %s"
msgstr "Brišem kompletni lanac potpisa %s"
+<<<<<<< TREE
#: ../bin/duplicity:1005
+=======
+#: ../bin/duplicity:1017
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete backup chain %s"
msgstr "Brišem kompletni lanac rezervnih kopija %s"
+<<<<<<< TREE
#: ../bin/duplicity:1011
+=======
+#: ../bin/duplicity:1023
+>>>>>>> MERGE-SOURCE
msgid "Found old backup chain at the following time:"
msgid_plural "Found old backup chains at the following times:"
msgstr[0] "Nađen stari lanac rezervnih kopija u vrijeme:"
msgstr[1] "Nađeni stari lanci rezervnih kopija u vremenima:"
msgstr[2] "Nađeni stari lanci rezervnih kopija u vremenima:"
+<<<<<<< TREE
#: ../bin/duplicity:1015
+=======
+#: ../bin/duplicity:1027
+>>>>>>> MERGE-SOURCE
msgid "Rerun command with --force option to actually delete."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1028
msgid "No old backup sets found."
msgstr ""
@@ -254,80 +406,143 @@
msgstr ""
#: ../bin/duplicity:1092
+=======
+#: ../bin/duplicity:1104
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting local %s (not authoritative at backend)."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1097
+=======
+#: ../bin/duplicity:1109
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Unable to delete %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1128 ../duplicity/dup_temp.py:266
+=======
+#: ../bin/duplicity:1140 ../duplicity/dup_temp.py:266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Failed to read %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1142
+=======
+#: ../bin/duplicity:1154
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Copying %s to local cache."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1190
+=======
+#: ../bin/duplicity:1202
+>>>>>>> MERGE-SOURCE
msgid "Local and Remote metadata are synchronized, no sync needed."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1195
+=======
+#: ../bin/duplicity:1207
+>>>>>>> MERGE-SOURCE
msgid "Synchronizing remote metadata to local cache..."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1207
+=======
+#: ../bin/duplicity:1219
+>>>>>>> MERGE-SOURCE
msgid "Sync would copy the following from remote to local:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1210
+=======
+#: ../bin/duplicity:1222
+>>>>>>> MERGE-SOURCE
msgid "Sync would remove the following spurious local files:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1253
+=======
+#: ../bin/duplicity:1265
+>>>>>>> MERGE-SOURCE
msgid "Unable to get free space on temp."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1261
+=======
+#: ../bin/duplicity:1273
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp space has %d available, backup needs approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1264
+=======
+#: ../bin/duplicity:1276
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp has %d available, backup will use approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1272
+=======
+#: ../bin/duplicity:1284
+>>>>>>> MERGE-SOURCE
msgid "Unable to get max open files."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1276
+=======
+#: ../bin/duplicity:1288
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Max open files of %s is too low, should be >= 1024.\n"
"Use 'ulimit -n 1024' or higher to correct.\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1327
+=======
+#: ../bin/duplicity:1339
+>>>>>>> MERGE-SOURCE
msgid ""
"RESTART: The first volume failed to upload before termination.\n"
" Restart is impossible...starting backup from beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1333
+=======
+#: ../bin/duplicity:1345
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Volumes %d to %d failed to upload before termination.\n"
" Restarting backup at volume %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1340
+=======
+#: ../bin/duplicity:1352
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
@@ -336,7 +551,11 @@
" backup then restart the backup from the beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1361
+=======
+#: ../bin/duplicity:1373
+>>>>>>> MERGE-SOURCE
msgid ""
"\n"
"PYTHONOPTIMIZE in the environment causes duplicity to fail to\n"
@@ -351,34 +570,65 @@
"okoline i vratite kopije.\n"
"Pogledajte https://bugs.launchpad.net/duplicity/+bug/931175\n"
+<<<<<<< TREE
#: ../bin/duplicity:1384
#, python-format
msgid "Acquiring lockfile %s"
msgstr ""
+=======
+#: ../bin/duplicity:1396
+#, python-format
+msgid "Acquiring lockfile %s"
+msgstr "Stjecanje lockfilea %s"
+>>>>>>> MERGE-SOURCE
+<<<<<<< TREE
#: ../bin/duplicity:1442
+=======
+#: ../bin/duplicity:1454
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Last %s backup left a partial set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1446
+=======
+#: ../bin/duplicity:1458
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Cleaning up previous partial %s backup set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1458
+=======
+#: ../bin/duplicity:1470
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1460
+=======
+#: ../bin/duplicity:1472
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date: none"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1462
+=======
+#: ../bin/duplicity:1474
+>>>>>>> MERGE-SOURCE
msgid "Last full backup is too old, forcing full backup"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1506
+=======
+#: ../bin/duplicity:1518
+>>>>>>> MERGE-SOURCE
msgid ""
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
@@ -386,21 +636,37 @@
"Kada koristite simetrično šifriranje, potpisivanje zaporuke mora biti "
"jednaka enkripciji zaporuke."
+<<<<<<< TREE
#: ../bin/duplicity:1575
+=======
+#: ../bin/duplicity:1587
+>>>>>>> MERGE-SOURCE
msgid "INT intercepted...exiting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1583
+=======
+#: ../bin/duplicity:1595
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1593
+=======
+#: ../bin/duplicity:1605
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "User error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1603
+=======
+#: ../bin/duplicity:1615
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backend error detail: %s"
msgstr ""
@@ -494,6 +760,7 @@
"Use of default filenames is strongly suggested."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:78
#, python-format
msgid ""
@@ -524,6 +791,38 @@
"koristiti kao zamjena."
#. TRANSL: Used in usage help to represent a Unix-style path name. Example:
+=======
+#: ../duplicity/commandline.py:78
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"--include-filelist and --exclude-filelist now accept globbing characters and "
+"should be used instead."
+msgstr ""
+"Upozorenje: Opcija %s je proglašena zastarjelom i biti će uklonjena iz "
+"budućih distribucija.\n"
+"--include-filelist i --exclude-filelist sada primaju globbing karaktere i "
+"trebali bi se koristiti."
+
+#: ../duplicity/commandline.py:88
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"On many GNU/Linux systems, stdin is represented by /dev/stdin and\n"
+"--include-filelist=/dev/stdin or --exclude-filelist=/dev/stdin could\n"
+"be used as a substitute."
+msgstr ""
+"Upozorenje: Opcija %s je proglašena zastarjelom biti će uklonjena iz "
+"budućih distribucija.\n"
+"Na mnogim GNU/Linux sistemima, stdin je reprezentovano sa /dev/stdin i \n"
+"--include-filelist=/dev/stdin ili --exclude-filelist=/dev/stdin bi se "
+"moglo \n"
+"koristiti kao zamjena."
+
+#. Used in usage help to represent a Unix-style path name. Example:
+>>>>>>> MERGE-SOURCE
#. --archive-dir <path>
#: ../duplicity/commandline.py:280 ../duplicity/commandline.py:290
#: ../duplicity/commandline.py:311 ../duplicity/commandline.py:385
@@ -562,8 +861,13 @@
msgid "filename"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent a regular expression (regexp).
#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+=======
+#. Used in usage help to represent a regular expression (regexp).
+#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+>>>>>>> MERGE-SOURCE
msgid "regular_expression"
msgstr ""
@@ -591,8 +895,13 @@
"not intended"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent an imap mailbox
#: ../duplicity/commandline.py:432
+=======
+#. Used in usage help to represent an imap mailbox
+#: ../duplicity/commandline.py:432
+>>>>>>> MERGE-SOURCE
msgid "imap_mailbox"
msgstr ""
@@ -611,11 +920,17 @@
msgid "number"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help (noun)
#: ../duplicity/commandline.py:464
+=======
+#. Used in usage help (noun)
+#: ../duplicity/commandline.py:464
+>>>>>>> MERGE-SOURCE
msgid "backup name"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:567
msgid "policy"
msgstr ""
@@ -623,6 +938,11 @@
#. TRANSL: noun
#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
#: ../duplicity/commandline.py:768
+=======
+#. noun
+#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
+#: ../duplicity/commandline.py:768
+>>>>>>> MERGE-SOURCE
msgid "command"
msgstr ""
@@ -634,6 +954,7 @@
msgid "pem formatted bundle of certificate authorities"
msgstr "pem formatiran snop od certificiranja"
+<<<<<<< TREE
#: ../duplicity/commandline.py:591
msgid "path to a folder with certificate authority files"
msgstr ""
@@ -646,11 +967,30 @@
#. --timeout <seconds>
#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
#: ../duplicity/commandline.py:831
+=======
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr "putanja do foldera sa datotekama autoriteta certifikata"
+
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#. Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+>>>>>>> MERGE-SOURCE
msgid "seconds"
msgstr ""
+<<<<<<< TREE
#. TRANSL: abbreviation for "character" (noun)
#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+=======
+#. abbreviation for "character" (noun)
+#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+>>>>>>> MERGE-SOURCE
msgid "char"
msgstr ""
@@ -699,13 +1039,23 @@
msgid "container_name"
msgstr ""
+<<<<<<< TREE
#. TRANSL: noun
#: ../duplicity/commandline.py:776
+=======
+#. noun
+#: ../duplicity/commandline.py:776
+>>>>>>> MERGE-SOURCE
msgid "count"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent the name of a file directory
#: ../duplicity/commandline.py:779
+=======
+#. Used in usage help to represent the name of a file directory
+#: ../duplicity/commandline.py:779
+>>>>>>> MERGE-SOURCE
msgid "directory"
msgstr ""
@@ -791,6 +1141,7 @@
msgid "user"
msgstr ""
+<<<<<<< TREE
#. TRANSL: account id for b2. Example: b2://account_id@bucket/
#: ../duplicity/commandline.py:877
msgid "account_id"
@@ -804,18 +1155,37 @@
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:899
+=======
+#. account id for b2. Example: b2://account_id@bucket/
+#: ../duplicity/commandline.py:877
+msgid "account_id"
+msgstr "account_id"
+
+#. application_key for b2.
+#. Example: b2://account_id:application_key@bucket/
+#: ../duplicity/commandline.py:881
+msgid "application_key"
+msgstr "application_key"
+
+#. Header in usage help
+#: ../duplicity/commandline.py:899
+>>>>>>> MERGE-SOURCE
msgid "Backends and their URL formats:"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:930
+=======
+#. Header in usage help
+#: ../duplicity/commandline.py:930
+>>>>>>> MERGE-SOURCE
msgid "Commands:"
msgstr ""
#: ../duplicity/commandline.py:954
#, python-format
-msgid ""
-"Specified archive directory '%s' does not exist, or is not a directory"
+msgid "Specified archive directory '%s' does not exist, or is not a directory"
msgstr ""
#: ../duplicity/commandline.py:963
@@ -856,12 +1226,21 @@
"currently work only when backing up,not restoring."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1101
#, python-format
msgid "GPG binary is %s, version %s"
msgstr ""
#: ../duplicity/commandline.py:1129
+=======
+#: ../duplicity/commandline.py:1101
+#, python-format
+msgid "GPG binary is %s, version %s"
+msgstr "GPG binarni je %s, verzija %s"
+
+#: ../duplicity/commandline.py:1129
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Bad URL '%s'.\n"
@@ -983,22 +1362,41 @@
msgid "Fatal Error: Neither remote nor local manifest is readable."
msgstr ""
-#: ../duplicity/collections.py:225
-#, python-format
-msgid "Processing local manifest %s (%s)"
-msgstr ""
-
-#: ../duplicity/collections.py:237
-#, python-format
-msgid "Error processing remote manifest (%s): %s"
-msgstr ""
-
-#: ../duplicity/collections.py:240
-#, python-format
-msgid "Processing remote manifest %s (%s)"
-msgstr ""
-
-#: ../duplicity/collections.py:323
+<<<<<<< TREE
+#: ../duplicity/collections.py:225
+#, python-format
+msgid "Processing local manifest %s (%s)"
+msgstr ""
+
+#: ../duplicity/collections.py:237
+#, python-format
+msgid "Error processing remote manifest (%s): %s"
+msgstr ""
+
+#: ../duplicity/collections.py:240
+#, python-format
+msgid "Processing remote manifest %s (%s)"
+msgstr ""
+
+#: ../duplicity/collections.py:323
+=======
+#: ../duplicity/collections.py:225
+#, python-format
+msgid "Processing local manifest %s (%s)"
+msgstr "Obrada lokalnog manifesta %s (%s)"
+
+#: ../duplicity/collections.py:237
+#, python-format
+msgid "Error processing remote manifest (%s): %s"
+msgstr "Pogreška u obradi spoljnjeg manifesta (%s): %s"
+
+#: ../duplicity/collections.py:240
+#, python-format
+msgid "Processing remote manifest %s (%s)"
+msgstr "Obrada spoljnjeg manifesta %s (%s)"
+
+#: ../duplicity/collections.py:323
+>>>>>>> MERGE-SOURCE
msgid "Preferring Backupset over previous one!"
msgstr ""
@@ -1106,12 +1504,20 @@
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#. TRANSL: "cleanup" is a hard-coded command, so do not translate it
#: ../duplicity/collections.py:666
msgid ""
"These may be deleted by running duplicity with the \"cleanup\" command."
msgstr ""
+=======
+#. "cleanup" is a hard-coded command, so do not translate it
+#: ../duplicity/collections.py:666
+msgid "These may be deleted by running duplicity with the \"cleanup\" command."
+msgstr ""
+
+>>>>>>> MERGE-SOURCE
#: ../duplicity/collections.py:669
msgid "No orphaned or incomplete backup sets found."
msgstr ""
@@ -1130,9 +1536,14 @@
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:748
msgid ""
"Warning, discarding last backup set, because of missing signature file."
+=======
+#: ../duplicity/collections.py:748
+msgid "Warning, discarding last backup set, because of missing signature file."
+>>>>>>> MERGE-SOURCE
msgstr ""
#: ../duplicity/collections.py:771
@@ -1203,6 +1614,8 @@
"No signature chain for the requested time. Using oldest available chain, "
"starting at time %s."
msgstr ""
+"Nema lanac potpisa za traženo vrijeme. Upotreba najstarijeg raspoloživog "
+"lanca, počevši od vremena %s."
#: ../duplicity/collections.py:1235
#, python-format
@@ -1273,6 +1686,7 @@
msgid "Connection failed, please check your password: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:85
#, python-format
msgid "MultiBackend: Could not parse query string %s: %s "
@@ -1527,6 +1941,269 @@
"basis_file must be a (true) file or an object whose file attribute is the "
"underlying true file object"
msgstr ""
+=======
+#: ../duplicity/backends/multibackend.py:85
+#, python-format
+msgid "MultiBackend: Could not parse query string %s: %s "
+msgstr "MultiBackend: Ne mogu razmatrati string upita %s: %s "
+
+#: ../duplicity/backends/multibackend.py:94
+#, python-format
+msgid "MultiBackend: Invalid query string %s: more than one value for %s"
+msgstr ""
+"MultiBackend: Nevaljan string upita %s: više od jedne vrijednosti za %s"
+
+#: ../duplicity/backends/multibackend.py:99
+#, python-format
+msgid "MultiBackend: Invalid query string %s: unknown parameter %s"
+msgstr "MultiBackend: Nevaljan string upita %s: nepoznat parametar %s"
+
+#: ../duplicity/backends/multibackend.py:149
+#: ../duplicity/backends/multibackend.py:154
+#, python-format
+msgid "MultiBackend: illegal value for %s: %s"
+msgstr "MultiBackend: neodobrena vrijednost za %s: %s"
+
+#: ../duplicity/backends/multibackend.py:162
+#, python-format
+msgid "MultiBackend: Url %s"
+msgstr "MultiBackend: Url %s"
+
+#: ../duplicity/backends/multibackend.py:166
+#, python-format
+msgid "MultiBackend: Could not load config file %s: %s "
+msgstr "MultiBackend: Nije mogao učitati config fajl %s: %s "
+
+#: ../duplicity/backends/multibackend.py:175
+#, python-format
+msgid "MultiBackend: use store %s"
+msgstr "MultiBackend: koristi u spremniku %s"
+
+#: ../duplicity/backends/multibackend.py:180
+#, python-format
+msgid "MultiBackend: set env %s = %s"
+msgstr "MultiBackend: postavi env %s = %s"
+
+#: ../duplicity/backends/multibackend.py:206
+#, python-format
+msgid "MultiBackend: _put: write to store #%s (%s)"
+msgstr "MultiBackend: _put:write to store #%s (%s)"
+
+#: ../duplicity/backends/multibackend.py:219
+#, python-format
+msgid "MultiBackend: failed to write to store #%s (%s), try #%s, Exception: %s"
+msgstr ""
+"MultiBackend: nije uspio napisati za spremanje $%s (%s), probaj #%s, "
+"Izuzetak: %s"
+
+#: ../duplicity/backends/multibackend.py:226
+#, python-format
+msgid "MultiBackend: failed to write %s. Aborting process."
+msgstr "MultiBackend: nije uspjelo unošenje %s. Prekidanje procesa."
+
+#: ../duplicity/backends/multibackend.py:233
+#, python-format
+msgid ""
+"MultiBackend: failed to write %s. Tried all backing stores and none succeeded"
+msgstr ""
+"MultiBackend: nije uspjelo pisanje %s. Pokušali se rezervni spremnici i "
+"nijedan nije uspio"
+
+#: ../duplicity/backends/multibackend.py:250
+#, python-format
+msgid "MultiBackend: failed to get %s to %s from %s"
+msgstr "MultiBackend: nije uspjelo uzimanje %s do %s od %s"
+
+#: ../duplicity/backends/multibackend.py:253
+#, python-format
+msgid ""
+"MultiBackend: failed to get %s. Tried all backing stores and none succeeded"
+msgstr ""
+"MultiBackend: nije uspjelo uzimanje %s. Pokušali se rezervni spremnici i "
+"nijedan nije uspio"
+
+#: ../duplicity/backends/multibackend.py:262
+#, python-format
+msgid "MultiBackend: list from %s: %s"
+msgstr "MultiBackend: lista od %s: %s"
+
+#: ../duplicity/backends/multibackend.py:268
+#, python-format
+msgid "MultiBackend: combined list: %s"
+msgstr "MultiBackend: kombinirana lista: %s"
+
+#: ../duplicity/backends/multibackend.py:290
+#, python-format
+msgid "MultiBackend: failed to delete %s from %s"
+msgstr "MultiBackend: nije uspjelo brisanje %s od %s"
+
+#: ../duplicity/backends/multibackend.py:294
+#, python-format
+msgid ""
+"MultiBackend: failed to delete %s. Tried all backing stores and none "
+"succeeded"
+msgstr ""
+"MultiBackend: nije uspjelo brisanje %s. Pokušali se rezervni spremnici i "
+"nijedan nije uspio"
+
+#: ../duplicity/backends/pydrivebackend.py:143
+#, python-format
+msgid "PyDrive backend: multiple files called '%s'."
+msgstr "PyDrive backend: više fajlova se zovu '%s'."
+
+#: ../duplicity/backends/webdavbackend.py:61
+msgid "Missing socket or ssl python modules."
+msgstr "Fali soket ili ssl python moduli."
+
+#: ../duplicity/backends/webdavbackend.py:79
+#, python-format
+msgid "Cacert database file '%s' is not readable."
+msgstr "Datoteka baze podataka cacert '%s' nije čitljiva."
+
+#: ../duplicity/backends/webdavbackend.py:100
+msgid ""
+"Option '--ssl-cacert-path' is not supported with python 2.7.8 and below."
+msgstr "Opcija '--ssl-cacert-path' nije podržana sa python 2.7.8 i niže."
+
+#: ../duplicity/backends/webdavbackend.py:104
+#, python-format
+msgid ""
+"For certificate verification with python 2.7.8 or earlier a cacert database\n"
+"file is needed in one of these locations: %s\n"
+"Hints:\n"
+" Consult the man page, chapter 'SSL Certificate Verification'.\n"
+" Consider using the options --ssl-cacert-file, --ssl-no-check-certificate ."
+msgstr ""
+"Za potvrdu certifikata sa python 2.7.8 ili ranije cacert baza podataka\n"
+"datateka je potrebna na jednoj od ovih lokacija: %s\n"
+"Upute:\n"
+" Provjerite na glavnoj stranici, poglavlje 'SSL Certificate Verification'.\n"
+" Razmatrajte korištenje opcija --ssl-cacert-file, --ssl-no-check-"
+"certificate ."
+
+#: ../duplicity/backends/webdavbackend.py:150
+#, python-format
+msgid "Using WebDAV protocol %s"
+msgstr "Korištenje WebDAV protokola %s"
+
+#: ../duplicity/backends/webdavbackend.py:151
+#, python-format
+msgid "Using WebDAV host %s port %s"
+msgstr "Korištenje WebDAV host %s port %s"
+
+#: ../duplicity/backends/webdavbackend.py:153
+#, python-format
+msgid "Using WebDAV directory %s"
+msgstr "Korištenje WebDAV direktorije %s"
+
+#: ../duplicity/backends/webdavbackend.py:184
+#, python-format
+msgid "WebDAV create connection on '%s'"
+msgstr "WebDAV napravi konekciju na '%s'"
+
+#: ../duplicity/backends/webdavbackend.py:195
+#, python-format
+msgid "WebDAV Unknown URI scheme: %s"
+msgstr "WebDAV Nepoznata URI šema: %s"
+
+#: ../duplicity/backends/webdavbackend.py:214
+#, python-format
+msgid "WebDAV %s %s request with headers: %s "
+msgstr "WebDAV %s %s zahtjev sa zaglavljima: %s "
+
+#: ../duplicity/backends/webdavbackend.py:215
+#: ../duplicity/backends/webdavbackend.py:238
+#, python-format
+msgid "WebDAV data length: %s "
+msgstr "WebDAV podatkovna dužina: %s "
+
+#: ../duplicity/backends/webdavbackend.py:218
+#, python-format
+msgid "WebDAV response status %s with reason '%s'."
+msgstr "WebDAV status odgovora %s sa razlogom '%s'."
+
+#: ../duplicity/backends/webdavbackend.py:224
+#, python-format
+msgid "WebDAV redirect to: %s "
+msgstr "WebDAV preusmjeri prema: %s "
+
+#: ../duplicity/backends/webdavbackend.py:226
+msgid "WebDAV redirected 10 times. Giving up."
+msgstr "WebDAV preusmjereno 10 puta. Odustajanje."
+
+#: ../duplicity/backends/webdavbackend.py:231
+msgid "WebDAV missing location header in redirect response."
+msgstr "WebDAV potrebno zaglavlje lokacije u odgovoru na preusmjerenje."
+
+#: ../duplicity/backends/webdavbackend.py:236
+msgid "WebDAV retry request with authentification headers."
+msgstr ""
+"WebDAV zahtjev za ponovnim pokušajem sa zaglavljima za autentifikaciju."
+
+#: ../duplicity/backends/webdavbackend.py:237
+#, python-format
+msgid "WebDAV %s %s request2 with headers: %s "
+msgstr "WebDAV %s %s zahtjev2 sa zaglavljima: %s "
+
+#: ../duplicity/backends/webdavbackend.py:241
+#, python-format
+msgid "WebDAV response2 status %s with reason '%s'."
+msgstr "WebDAV odgovor2 status %s sa razlogom '%s'."
+
+#: ../duplicity/backends/webdavbackend.py:258
+msgid ""
+"python-kerberos needed to use kerberos "
+"authorization, falling back to basic auth."
+msgstr ""
+"python-kerberos potreban za korištenje kerberos autorizacije, oslanjanje na "
+"osnovnu autorizaciju."
+
+#: ../duplicity/backends/webdavbackend.py:262
+#, python-format
+msgid ""
+"Kerberos authorization failed: %s. Falling back to "
+"basic auth."
+msgstr ""
+"Kerberos autorizacija neuspjela: %s. Oslanjanje na osnovnu autorizaciju."
+
+#: ../duplicity/backends/webdavbackend.py:360
+#, python-format
+msgid "Creating missing directory %s"
+msgstr "Kreiranje potrebne direktorije %s"
+
+#: ../duplicity/backends/webdavbackend.py:364
+#, python-format
+msgid "WebDAV MKCOL %s failed: %s %s"
+msgstr "WebDAV MKCOL %s neuspjeo: %s %s"
+
+#: ../duplicity/backends/webdavbackend.py:377
+#, python-format
+msgid "WebDAV path decoding and translation: %s -> %s"
+msgstr "WebDAV dekodiranje i prevođenje putanje: %s-> %s"
+
+#: ../duplicity/backends/webdavbackend.py:422
+#, python-format
+msgid "WebDAV GET Bad status code %s reason %s."
+msgstr "WebDAV GET Loš statusni kod %s razlog %s."
+
+#: ../duplicity/backends/webdavbackend.py:444
+#, python-format
+msgid "WebDAV PUT Bad status code %s reason %s."
+msgstr "WebDAV PUT Loš statusni kod %s razlog %s."
+
+#: ../duplicity/backends/webdavbackend.py:464
+#, python-format
+msgid "WebDAV DEL Bad status code %s reason %s."
+msgstr "WebDAV DEL Loš statusni kod %s razlog %s."
+
+#: ../duplicity/librsync.py:184
+msgid ""
+"basis_file must be a (true) file or an object whose file attribute is the "
+"underlying true file object"
+msgstr ""
+"basis_file mora biti (true) datoteka ili objekat čiji je atribut datoteke "
+"osnovni objekt iste datoteke."
+>>>>>>> MERGE-SOURCE
#: ../duplicity/manifest.py:91
#, python-format
@@ -1552,6 +2229,7 @@
"seeing this message"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:192
#, python-format
msgid "Found manifest volume %s"
@@ -1569,6 +2247,19 @@
msgstr ""
#: ../duplicity/manifest.py:213
+=======
+#: ../duplicity/manifest.py:192
+#, python-format
+msgid "Found manifest volume %s"
+msgstr "Pronađen manifest volumena %s"
+
+#: ../duplicity/manifest.py:199
+#, python-format
+msgid "Found %s volumes in manifest"
+msgstr "Pronađeno %s volumena u manifestu"
+
+#: ../duplicity/manifest.py:213
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because different volume numbers"
msgstr ""
@@ -1759,3 +2450,41 @@
#, python-format
msgid "Releasing lockfile %s"
msgstr "Otpuštanje zakljucane dadoteke %s"
+<<<<<<< TREE
+=======
+
+#~ msgid "Unable to load gio backend: %s"
+#~ msgstr "Ne mogu učitati gio pozadinu: %s"
+
+#~ msgid "Deleting incremental signature chain %s"
+#~ msgstr "Brišem inkrementalni lanac potpisa %s"
+
+#~ msgid "Deleting incremental backup chain %s"
+#~ msgstr "Brišem inkrementalni lanac rezervni kopija %s"
+
+#~ msgid ""
+#~ "Warning: Option %s is supported by ssh pexpect backend only and will be "
+#~ "ignored."
+#~ msgstr ""
+#~ "Upozorenje: Jedina pozadina koja podržava opciju %s je ssh pexpect i bit "
+#~ "će ignorisana."
+
+#~ msgid "paramiko|pexpect"
+#~ msgstr "paramiko|pexpect"
+
+#~ msgid ""
+#~ "Warning: Selected ssh backend '%s' is neither 'paramiko nor 'pexpect'. "
+#~ "Will use default paramiko instead."
+#~ msgstr ""
+#~ "Upozorenje: Izabrana ssh pozadina '%s' nije ni 'paramiko ni 'pexpect'. "
+#~ "Koristit će se podrazumijevana paramiko."
+
+#~ msgid "Total number of backup: %d"
+#~ msgstr "Totalni broj rezervnih kopija: %d"
+
+#~ msgid "Type of file change:"
+#~ msgstr "Tip promjene fajla:"
+
+#~ msgid "File: %s"
+#~ msgstr "Datoteka: %s"
+>>>>>>> MERGE-SOURCE
=== modified file 'po/ca.po'
--- po/ca.po 2018-02-25 05:44:50 +0000
+++ po/ca.po 2019-03-04 12:09:45 +0000
@@ -6,17 +6,29 @@
msgid ""
msgstr ""
"Project-Id-Version: duplicity\n"
+<<<<<<< TREE
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2018-02-24 06:05+0000\n"
"PO-Revision-Date: 2018-02-23 13:10+0000\n"
+=======
+"Report-Msgid-Bugs-To: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+"POT-Creation-Date: 2018-08-21 10:58-0500\n"
+"PO-Revision-Date: 2014-11-05 06:09+0000\n"
+>>>>>>> MERGE-SOURCE
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Catalan <ca@xxxxxx>\n"
+"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+<<<<<<< TREE
"X-Launchpad-Export-Date: 2018-02-25 05:44+0000\n"
"X-Generator: Launchpad (build 18561)\n"
+=======
+"X-Launchpad-Export-Date: 2018-08-12 04:35+0000\n"
+"X-Generator: Launchpad (build 18747)\n"
+>>>>>>> MERGE-SOURCE
#: ../bin/duplicity:133
msgid "Reuse configured PASSPHRASE as SIGN_PASSPHRASE"
@@ -69,138 +81,248 @@
"Continuing restart on file %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:331
+=======
+#: ../bin/duplicity:336
+#, python-format
+msgid "Remote filesize %d for %s does not match local size %d, retrying."
+msgstr ""
+
+#: ../bin/duplicity:343
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s was corrupted during upload."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:364
+=======
+#: ../bin/duplicity:376
+>>>>>>> MERGE-SOURCE
msgid ""
"Restarting backup, but current encryption settings do not match original "
"settings"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:387
+=======
+#: ../bin/duplicity:399
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Restarting after volume %s, file %s, block %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:457
+=======
+#: ../bin/duplicity:469
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:606
+=======
+#: ../bin/duplicity:618
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:610
+=======
+#: ../bin/duplicity:622
+>>>>>>> MERGE-SOURCE
msgid "No signatures found, switching to full backup."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:624
+=======
+#: ../bin/duplicity:636
+>>>>>>> MERGE-SOURCE
msgid "Backup Statistics"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:730
+=======
+#: ../bin/duplicity:742
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%s not found in archive - no files restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:734
+=======
+#: ../bin/duplicity:746
+>>>>>>> MERGE-SOURCE
msgid "No files found in archive - nothing restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:767
+=======
+#: ../bin/duplicity:779
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d of %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:801
+=======
+#: ../bin/duplicity:813
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Invalid data - %s hash mismatch for file:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:804
+=======
+#: ../bin/duplicity:816
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Calculated hash: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:805
+=======
+#: ../bin/duplicity:817
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Manifest hash: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:848
+=======
+#: ../bin/duplicity:860
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Volume was signed by key %s, not %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:880
+=======
+#: ../bin/duplicity:892
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Verify complete: %s, %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:881
+=======
+#: ../bin/duplicity:893
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file compared"
msgid_plural "%d files compared"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:883
+=======
+#: ../bin/duplicity:895
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d difference found"
msgid_plural "%d differences found"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:902
+=======
+#: ../bin/duplicity:914
+>>>>>>> MERGE-SOURCE
msgid "No extraneous files found, nothing deleted in cleanup."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:907
+=======
+#: ../bin/duplicity:919
+>>>>>>> MERGE-SOURCE
msgid "Deleting this file from backend:"
msgid_plural "Deleting these files from backend:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:918
+=======
+#: ../bin/duplicity:930
+>>>>>>> MERGE-SOURCE
msgid "Found the following file to delete:"
msgid_plural "Found the following files to delete:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:921
+=======
+#: ../bin/duplicity:933
+>>>>>>> MERGE-SOURCE
msgid "Run duplicity again with the --force option to actually delete."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:964
+=======
+#: ../bin/duplicity:976
+>>>>>>> MERGE-SOURCE
msgid "There are backup set(s) at time(s):"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:966
+=======
+#: ../bin/duplicity:978
+>>>>>>> MERGE-SOURCE
msgid "Which can't be deleted because newer sets depend on them."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:970
+=======
+#: ../bin/duplicity:982
+>>>>>>> MERGE-SOURCE
msgid ""
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:983
+=======
+#: ../bin/duplicity:995
+>>>>>>> MERGE-SOURCE
msgid "No old backup sets found, nothing deleted."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:986
+=======
+#: ../bin/duplicity:998
+>>>>>>> MERGE-SOURCE
msgid "Deleting backup chain at time:"
msgid_plural "Deleting backup chains at times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:998
#, python-format
msgid "Deleting any incremental signature chain rooted at %s"
@@ -212,25 +334,51 @@
msgstr ""
#: ../bin/duplicity:1003
+=======
+#: ../bin/duplicity:1010
+#, python-format
+msgid "Deleting any incremental signature chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1012
+#, python-format
+msgid "Deleting any incremental backup chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1015
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete signature chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1005
+=======
+#: ../bin/duplicity:1017
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete backup chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1011
+=======
+#: ../bin/duplicity:1023
+>>>>>>> MERGE-SOURCE
msgid "Found old backup chain at the following time:"
msgid_plural "Found old backup chains at the following times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:1015
+=======
+#: ../bin/duplicity:1027
+>>>>>>> MERGE-SOURCE
msgid "Rerun command with --force option to actually delete."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1028
msgid "No old backup sets found."
msgstr ""
@@ -251,80 +399,143 @@
msgstr ""
#: ../bin/duplicity:1092
+=======
+#: ../bin/duplicity:1104
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting local %s (not authoritative at backend)."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1097
+=======
+#: ../bin/duplicity:1109
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Unable to delete %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1128 ../duplicity/dup_temp.py:266
+=======
+#: ../bin/duplicity:1140 ../duplicity/dup_temp.py:266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Failed to read %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1142
+=======
+#: ../bin/duplicity:1154
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Copying %s to local cache."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1190
+=======
+#: ../bin/duplicity:1202
+>>>>>>> MERGE-SOURCE
msgid "Local and Remote metadata are synchronized, no sync needed."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1195
+=======
+#: ../bin/duplicity:1207
+>>>>>>> MERGE-SOURCE
msgid "Synchronizing remote metadata to local cache..."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1207
+=======
+#: ../bin/duplicity:1219
+>>>>>>> MERGE-SOURCE
msgid "Sync would copy the following from remote to local:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1210
+=======
+#: ../bin/duplicity:1222
+>>>>>>> MERGE-SOURCE
msgid "Sync would remove the following spurious local files:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1253
+=======
+#: ../bin/duplicity:1265
+>>>>>>> MERGE-SOURCE
msgid "Unable to get free space on temp."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1261
+=======
+#: ../bin/duplicity:1273
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp space has %d available, backup needs approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1264
+=======
+#: ../bin/duplicity:1276
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp has %d available, backup will use approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1272
+=======
+#: ../bin/duplicity:1284
+>>>>>>> MERGE-SOURCE
msgid "Unable to get max open files."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1276
+=======
+#: ../bin/duplicity:1288
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Max open files of %s is too low, should be >= 1024.\n"
"Use 'ulimit -n 1024' or higher to correct.\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1327
+=======
+#: ../bin/duplicity:1339
+>>>>>>> MERGE-SOURCE
msgid ""
"RESTART: The first volume failed to upload before termination.\n"
" Restart is impossible...starting backup from beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1333
+=======
+#: ../bin/duplicity:1345
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Volumes %d to %d failed to upload before termination.\n"
" Restarting backup at volume %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1340
+=======
+#: ../bin/duplicity:1352
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
@@ -333,7 +544,11 @@
" backup then restart the backup from the beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1361
+=======
+#: ../bin/duplicity:1373
+>>>>>>> MERGE-SOURCE
msgid ""
"\n"
"PYTHONOPTIMIZE in the environment causes duplicity to fail to\n"
@@ -343,54 +558,100 @@
"See https://bugs.launchpad.net/duplicity/+bug/931175\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1384
#, python-format
msgid "Acquiring lockfile %s"
+=======
+#: ../bin/duplicity:1396
+#, python-format
+msgid "Acquiring lockfile %s"
+>>>>>>> MERGE-SOURCE
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1442
+=======
+#: ../bin/duplicity:1454
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Last %s backup left a partial set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1446
+=======
+#: ../bin/duplicity:1458
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Cleaning up previous partial %s backup set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1458
+=======
+#: ../bin/duplicity:1470
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1460
+=======
+#: ../bin/duplicity:1472
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date: none"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1462
+=======
+#: ../bin/duplicity:1474
+>>>>>>> MERGE-SOURCE
msgid "Last full backup is too old, forcing full backup"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1506
+=======
+#: ../bin/duplicity:1518
+>>>>>>> MERGE-SOURCE
msgid ""
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1575
+=======
+#: ../bin/duplicity:1587
+>>>>>>> MERGE-SOURCE
msgid "INT intercepted...exiting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1583
+=======
+#: ../bin/duplicity:1595
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1593
+=======
+#: ../bin/duplicity:1605
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "User error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1603
+=======
+#: ../bin/duplicity:1615
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backend error detail: %s"
msgstr ""
@@ -484,6 +745,7 @@
"Use of default filenames is strongly suggested."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:78
#, python-format
msgid ""
@@ -504,6 +766,28 @@
msgstr ""
#. TRANSL: Used in usage help to represent a Unix-style path name. Example:
+=======
+#: ../duplicity/commandline.py:78
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"--include-filelist and --exclude-filelist now accept globbing characters and "
+"should be used instead."
+msgstr ""
+
+#: ../duplicity/commandline.py:88
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"On many GNU/Linux systems, stdin is represented by /dev/stdin and\n"
+"--include-filelist=/dev/stdin or --exclude-filelist=/dev/stdin could\n"
+"be used as a substitute."
+msgstr ""
+
+#. Used in usage help to represent a Unix-style path name. Example:
+>>>>>>> MERGE-SOURCE
#. --archive-dir <path>
#: ../duplicity/commandline.py:280 ../duplicity/commandline.py:290
#: ../duplicity/commandline.py:311 ../duplicity/commandline.py:385
@@ -542,8 +826,13 @@
msgid "filename"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent a regular expression (regexp).
#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+=======
+#. Used in usage help to represent a regular expression (regexp).
+#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+>>>>>>> MERGE-SOURCE
msgid "regular_expression"
msgstr ""
@@ -571,8 +860,13 @@
"not intended"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent an imap mailbox
#: ../duplicity/commandline.py:432
+=======
+#. Used in usage help to represent an imap mailbox
+#: ../duplicity/commandline.py:432
+>>>>>>> MERGE-SOURCE
msgid "imap_mailbox"
msgstr ""
@@ -591,11 +885,17 @@
msgid "number"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help (noun)
#: ../duplicity/commandline.py:464
+=======
+#. Used in usage help (noun)
+#: ../duplicity/commandline.py:464
+>>>>>>> MERGE-SOURCE
msgid "backup name"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:567
msgid "policy"
msgstr ""
@@ -603,6 +903,11 @@
#. TRANSL: noun
#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
#: ../duplicity/commandline.py:768
+=======
+#. noun
+#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
+#: ../duplicity/commandline.py:768
+>>>>>>> MERGE-SOURCE
msgid "command"
msgstr ""
@@ -614,23 +919,43 @@
msgid "pem formatted bundle of certificate authorities"
msgstr ""
-#: ../duplicity/commandline.py:591
-msgid "path to a folder with certificate authority files"
-msgstr ""
-
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --backend-retry-delay <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
-#: ../duplicity/commandline.py:831
+<<<<<<< TREE
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr ""
+
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+=======
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr ""
+
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#. Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+>>>>>>> MERGE-SOURCE
msgid "seconds"
msgstr ""
+<<<<<<< TREE
#. TRANSL: abbreviation for "character" (noun)
#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+=======
+#. abbreviation for "character" (noun)
+#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+>>>>>>> MERGE-SOURCE
msgid "char"
msgstr ""
@@ -679,13 +1004,23 @@
msgid "container_name"
msgstr ""
+<<<<<<< TREE
#. TRANSL: noun
#: ../duplicity/commandline.py:776
+=======
+#. noun
+#: ../duplicity/commandline.py:776
+>>>>>>> MERGE-SOURCE
msgid "count"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent the name of a file directory
#: ../duplicity/commandline.py:779
+=======
+#. Used in usage help to represent the name of a file directory
+#: ../duplicity/commandline.py:779
+>>>>>>> MERGE-SOURCE
msgid "directory"
msgstr ""
@@ -771,6 +1106,7 @@
msgid "user"
msgstr ""
+<<<<<<< TREE
#. TRANSL: account id for b2. Example: b2://account_id@bucket/
#: ../duplicity/commandline.py:877
msgid "account_id"
@@ -784,18 +1120,37 @@
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:899
+=======
+#. account id for b2. Example: b2://account_id@bucket/
+#: ../duplicity/commandline.py:877
+msgid "account_id"
+msgstr ""
+
+#. application_key for b2.
+#. Example: b2://account_id:application_key@bucket/
+#: ../duplicity/commandline.py:881
+msgid "application_key"
+msgstr ""
+
+#. Header in usage help
+#: ../duplicity/commandline.py:899
+>>>>>>> MERGE-SOURCE
msgid "Backends and their URL formats:"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:930
+=======
+#. Header in usage help
+#: ../duplicity/commandline.py:930
+>>>>>>> MERGE-SOURCE
msgid "Commands:"
msgstr ""
#: ../duplicity/commandline.py:954
#, python-format
-msgid ""
-"Specified archive directory '%s' does not exist, or is not a directory"
+msgid "Specified archive directory '%s' does not exist, or is not a directory"
msgstr ""
#: ../duplicity/commandline.py:963
@@ -1083,12 +1438,20 @@
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#. TRANSL: "cleanup" is a hard-coded command, so do not translate it
#: ../duplicity/collections.py:666
msgid ""
"These may be deleted by running duplicity with the \"cleanup\" command."
msgstr ""
+=======
+#. "cleanup" is a hard-coded command, so do not translate it
+#: ../duplicity/collections.py:666
+msgid "These may be deleted by running duplicity with the \"cleanup\" command."
+msgstr ""
+
+>>>>>>> MERGE-SOURCE
#: ../duplicity/collections.py:669
msgid "No orphaned or incomplete backup sets found."
msgstr ""
@@ -1107,9 +1470,14 @@
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:748
msgid ""
"Warning, discarding last backup set, because of missing signature file."
+=======
+#: ../duplicity/collections.py:748
+msgid "Warning, discarding last backup set, because of missing signature file."
+>>>>>>> MERGE-SOURCE
msgstr ""
#: ../duplicity/collections.py:771
@@ -1250,6 +1618,7 @@
msgid "Connection failed, please check your password: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:85
#, python-format
msgid "MultiBackend: Could not parse query string %s: %s "
@@ -1495,6 +1864,247 @@
msgid ""
"basis_file must be a (true) file or an object whose file attribute is the "
"underlying true file object"
+=======
+#: ../duplicity/backends/multibackend.py:85
+#, python-format
+msgid "MultiBackend: Could not parse query string %s: %s "
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:94
+#, python-format
+msgid "MultiBackend: Invalid query string %s: more than one value for %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:99
+#, python-format
+msgid "MultiBackend: Invalid query string %s: unknown parameter %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:149
+#: ../duplicity/backends/multibackend.py:154
+#, python-format
+msgid "MultiBackend: illegal value for %s: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:162
+#, python-format
+msgid "MultiBackend: Url %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:166
+#, python-format
+msgid "MultiBackend: Could not load config file %s: %s "
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:175
+#, python-format
+msgid "MultiBackend: use store %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:180
+#, python-format
+msgid "MultiBackend: set env %s = %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:206
+#, python-format
+msgid "MultiBackend: _put: write to store #%s (%s)"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:219
+#, python-format
+msgid "MultiBackend: failed to write to store #%s (%s), try #%s, Exception: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:226
+#, python-format
+msgid "MultiBackend: failed to write %s. Aborting process."
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:233
+#, python-format
+msgid ""
+"MultiBackend: failed to write %s. Tried all backing stores and none succeeded"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:250
+#, python-format
+msgid "MultiBackend: failed to get %s to %s from %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:253
+#, python-format
+msgid ""
+"MultiBackend: failed to get %s. Tried all backing stores and none succeeded"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:262
+#, python-format
+msgid "MultiBackend: list from %s: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:268
+#, python-format
+msgid "MultiBackend: combined list: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:290
+#, python-format
+msgid "MultiBackend: failed to delete %s from %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:294
+#, python-format
+msgid ""
+"MultiBackend: failed to delete %s. Tried all backing stores and none "
+"succeeded"
+msgstr ""
+
+#: ../duplicity/backends/pydrivebackend.py:143
+#, python-format
+msgid "PyDrive backend: multiple files called '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:61
+msgid "Missing socket or ssl python modules."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:79
+#, python-format
+msgid "Cacert database file '%s' is not readable."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:100
+msgid ""
+"Option '--ssl-cacert-path' is not supported with python 2.7.8 and below."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:104
+#, python-format
+msgid ""
+"For certificate verification with python 2.7.8 or earlier a cacert database\n"
+"file is needed in one of these locations: %s\n"
+"Hints:\n"
+" Consult the man page, chapter 'SSL Certificate Verification'.\n"
+" Consider using the options --ssl-cacert-file, --ssl-no-check-certificate ."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:150
+#, python-format
+msgid "Using WebDAV protocol %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:151
+#, python-format
+msgid "Using WebDAV host %s port %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:153
+#, python-format
+msgid "Using WebDAV directory %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:184
+#, python-format
+msgid "WebDAV create connection on '%s'"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:195
+#, python-format
+msgid "WebDAV Unknown URI scheme: %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:214
+#, python-format
+msgid "WebDAV %s %s request with headers: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:215
+#: ../duplicity/backends/webdavbackend.py:238
+#, python-format
+msgid "WebDAV data length: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:218
+#, python-format
+msgid "WebDAV response status %s with reason '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:224
+#, python-format
+msgid "WebDAV redirect to: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:226
+msgid "WebDAV redirected 10 times. Giving up."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:231
+msgid "WebDAV missing location header in redirect response."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:236
+msgid "WebDAV retry request with authentification headers."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:237
+#, python-format
+msgid "WebDAV %s %s request2 with headers: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:241
+#, python-format
+msgid "WebDAV response2 status %s with reason '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:258
+msgid ""
+"python-kerberos needed to use kerberos "
+"authorization, falling back to basic auth."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:262
+#, python-format
+msgid ""
+"Kerberos authorization failed: %s. Falling back to "
+"basic auth."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:360
+#, python-format
+msgid "Creating missing directory %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:364
+#, python-format
+msgid "WebDAV MKCOL %s failed: %s %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:377
+#, python-format
+msgid "WebDAV path decoding and translation: %s -> %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:422
+#, python-format
+msgid "WebDAV GET Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:444
+#, python-format
+msgid "WebDAV PUT Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:464
+#, python-format
+msgid "WebDAV DEL Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/librsync.py:184
+msgid ""
+"basis_file must be a (true) file or an object whose file attribute is the "
+"underlying true file object"
+>>>>>>> MERGE-SOURCE
msgstr ""
#: ../duplicity/manifest.py:91
@@ -1521,6 +2131,7 @@
"seeing this message"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:192
#, python-format
msgid "Found manifest volume %s"
@@ -1538,6 +2149,19 @@
msgstr ""
#: ../duplicity/manifest.py:213
+=======
+#: ../duplicity/manifest.py:192
+#, python-format
+msgid "Found manifest volume %s"
+msgstr ""
+
+#: ../duplicity/manifest.py:199
+#, python-format
+msgid "Found %s volumes in manifest"
+msgstr ""
+
+#: ../duplicity/manifest.py:213
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because different volume numbers"
msgstr ""
=== modified file 'po/ca@xxxxxxxxxxx'
--- po/ca@xxxxxxxxxxx 2018-02-25 05:44:50 +0000
+++ po/ca@xxxxxxxxxxx 2019-03-04 12:09:45 +0000
@@ -6,17 +6,29 @@
msgid ""
msgstr ""
"Project-Id-Version: duplicity\n"
+<<<<<<< TREE
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2018-02-24 06:05+0000\n"
"PO-Revision-Date: 2018-02-23 13:10+0000\n"
+=======
+"Report-Msgid-Bugs-To: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+"POT-Creation-Date: 2018-08-21 10:58-0500\n"
+"PO-Revision-Date: 2014-11-07 07:12+0000\n"
+>>>>>>> MERGE-SOURCE
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Catalan (Valencian) <ca@valencia@xxxxxx>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+<<<<<<< TREE
"X-Launchpad-Export-Date: 2018-02-25 05:44+0000\n"
"X-Generator: Launchpad (build 18561)\n"
+=======
+"X-Launchpad-Export-Date: 2018-08-12 04:35+0000\n"
+"X-Generator: Launchpad (build 18747)\n"
+>>>>>>> MERGE-SOURCE
#: ../bin/duplicity:133
msgid "Reuse configured PASSPHRASE as SIGN_PASSPHRASE"
@@ -69,138 +81,248 @@
"Continuing restart on file %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:331
+=======
+#: ../bin/duplicity:336
+#, python-format
+msgid "Remote filesize %d for %s does not match local size %d, retrying."
+msgstr ""
+
+#: ../bin/duplicity:343
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s was corrupted during upload."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:364
+=======
+#: ../bin/duplicity:376
+>>>>>>> MERGE-SOURCE
msgid ""
"Restarting backup, but current encryption settings do not match original "
"settings"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:387
+=======
+#: ../bin/duplicity:399
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Restarting after volume %s, file %s, block %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:457
+=======
+#: ../bin/duplicity:469
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:606
+=======
+#: ../bin/duplicity:618
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:610
+=======
+#: ../bin/duplicity:622
+>>>>>>> MERGE-SOURCE
msgid "No signatures found, switching to full backup."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:624
+=======
+#: ../bin/duplicity:636
+>>>>>>> MERGE-SOURCE
msgid "Backup Statistics"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:730
+=======
+#: ../bin/duplicity:742
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%s not found in archive - no files restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:734
+=======
+#: ../bin/duplicity:746
+>>>>>>> MERGE-SOURCE
msgid "No files found in archive - nothing restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:767
+=======
+#: ../bin/duplicity:779
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d of %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:801
+=======
+#: ../bin/duplicity:813
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Invalid data - %s hash mismatch for file:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:804
+=======
+#: ../bin/duplicity:816
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Calculated hash: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:805
+=======
+#: ../bin/duplicity:817
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Manifest hash: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:848
+=======
+#: ../bin/duplicity:860
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Volume was signed by key %s, not %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:880
+=======
+#: ../bin/duplicity:892
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Verify complete: %s, %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:881
+=======
+#: ../bin/duplicity:893
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file compared"
msgid_plural "%d files compared"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:883
+=======
+#: ../bin/duplicity:895
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d difference found"
msgid_plural "%d differences found"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:902
+=======
+#: ../bin/duplicity:914
+>>>>>>> MERGE-SOURCE
msgid "No extraneous files found, nothing deleted in cleanup."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:907
+=======
+#: ../bin/duplicity:919
+>>>>>>> MERGE-SOURCE
msgid "Deleting this file from backend:"
msgid_plural "Deleting these files from backend:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:918
+=======
+#: ../bin/duplicity:930
+>>>>>>> MERGE-SOURCE
msgid "Found the following file to delete:"
msgid_plural "Found the following files to delete:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:921
+=======
+#: ../bin/duplicity:933
+>>>>>>> MERGE-SOURCE
msgid "Run duplicity again with the --force option to actually delete."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:964
+=======
+#: ../bin/duplicity:976
+>>>>>>> MERGE-SOURCE
msgid "There are backup set(s) at time(s):"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:966
+=======
+#: ../bin/duplicity:978
+>>>>>>> MERGE-SOURCE
msgid "Which can't be deleted because newer sets depend on them."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:970
+=======
+#: ../bin/duplicity:982
+>>>>>>> MERGE-SOURCE
msgid ""
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:983
+=======
+#: ../bin/duplicity:995
+>>>>>>> MERGE-SOURCE
msgid "No old backup sets found, nothing deleted."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:986
+=======
+#: ../bin/duplicity:998
+>>>>>>> MERGE-SOURCE
msgid "Deleting backup chain at time:"
msgid_plural "Deleting backup chains at times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:998
#, python-format
msgid "Deleting any incremental signature chain rooted at %s"
@@ -212,25 +334,51 @@
msgstr ""
#: ../bin/duplicity:1003
+=======
+#: ../bin/duplicity:1010
+#, python-format
+msgid "Deleting any incremental signature chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1012
+#, python-format
+msgid "Deleting any incremental backup chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1015
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete signature chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1005
+=======
+#: ../bin/duplicity:1017
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete backup chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1011
+=======
+#: ../bin/duplicity:1023
+>>>>>>> MERGE-SOURCE
msgid "Found old backup chain at the following time:"
msgid_plural "Found old backup chains at the following times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:1015
+=======
+#: ../bin/duplicity:1027
+>>>>>>> MERGE-SOURCE
msgid "Rerun command with --force option to actually delete."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1028
msgid "No old backup sets found."
msgstr ""
@@ -251,80 +399,143 @@
msgstr ""
#: ../bin/duplicity:1092
+=======
+#: ../bin/duplicity:1104
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting local %s (not authoritative at backend)."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1097
+=======
+#: ../bin/duplicity:1109
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Unable to delete %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1128 ../duplicity/dup_temp.py:266
+=======
+#: ../bin/duplicity:1140 ../duplicity/dup_temp.py:266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Failed to read %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1142
+=======
+#: ../bin/duplicity:1154
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Copying %s to local cache."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1190
+=======
+#: ../bin/duplicity:1202
+>>>>>>> MERGE-SOURCE
msgid "Local and Remote metadata are synchronized, no sync needed."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1195
+=======
+#: ../bin/duplicity:1207
+>>>>>>> MERGE-SOURCE
msgid "Synchronizing remote metadata to local cache..."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1207
+=======
+#: ../bin/duplicity:1219
+>>>>>>> MERGE-SOURCE
msgid "Sync would copy the following from remote to local:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1210
+=======
+#: ../bin/duplicity:1222
+>>>>>>> MERGE-SOURCE
msgid "Sync would remove the following spurious local files:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1253
+=======
+#: ../bin/duplicity:1265
+>>>>>>> MERGE-SOURCE
msgid "Unable to get free space on temp."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1261
+=======
+#: ../bin/duplicity:1273
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp space has %d available, backup needs approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1264
+=======
+#: ../bin/duplicity:1276
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp has %d available, backup will use approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1272
+=======
+#: ../bin/duplicity:1284
+>>>>>>> MERGE-SOURCE
msgid "Unable to get max open files."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1276
+=======
+#: ../bin/duplicity:1288
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Max open files of %s is too low, should be >= 1024.\n"
"Use 'ulimit -n 1024' or higher to correct.\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1327
+=======
+#: ../bin/duplicity:1339
+>>>>>>> MERGE-SOURCE
msgid ""
"RESTART: The first volume failed to upload before termination.\n"
" Restart is impossible...starting backup from beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1333
+=======
+#: ../bin/duplicity:1345
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Volumes %d to %d failed to upload before termination.\n"
" Restarting backup at volume %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1340
+=======
+#: ../bin/duplicity:1352
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
@@ -333,7 +544,11 @@
" backup then restart the backup from the beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1361
+=======
+#: ../bin/duplicity:1373
+>>>>>>> MERGE-SOURCE
msgid ""
"\n"
"PYTHONOPTIMIZE in the environment causes duplicity to fail to\n"
@@ -343,54 +558,100 @@
"See https://bugs.launchpad.net/duplicity/+bug/931175\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1384
#, python-format
msgid "Acquiring lockfile %s"
+=======
+#: ../bin/duplicity:1396
+#, python-format
+msgid "Acquiring lockfile %s"
+>>>>>>> MERGE-SOURCE
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1442
+=======
+#: ../bin/duplicity:1454
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Last %s backup left a partial set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1446
+=======
+#: ../bin/duplicity:1458
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Cleaning up previous partial %s backup set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1458
+=======
+#: ../bin/duplicity:1470
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1460
+=======
+#: ../bin/duplicity:1472
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date: none"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1462
+=======
+#: ../bin/duplicity:1474
+>>>>>>> MERGE-SOURCE
msgid "Last full backup is too old, forcing full backup"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1506
+=======
+#: ../bin/duplicity:1518
+>>>>>>> MERGE-SOURCE
msgid ""
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1575
+=======
+#: ../bin/duplicity:1587
+>>>>>>> MERGE-SOURCE
msgid "INT intercepted...exiting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1583
+=======
+#: ../bin/duplicity:1595
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1593
+=======
+#: ../bin/duplicity:1605
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "User error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1603
+=======
+#: ../bin/duplicity:1615
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backend error detail: %s"
msgstr ""
@@ -484,6 +745,7 @@
"Use of default filenames is strongly suggested."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:78
#, python-format
msgid ""
@@ -504,6 +766,28 @@
msgstr ""
#. TRANSL: Used in usage help to represent a Unix-style path name. Example:
+=======
+#: ../duplicity/commandline.py:78
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"--include-filelist and --exclude-filelist now accept globbing characters and "
+"should be used instead."
+msgstr ""
+
+#: ../duplicity/commandline.py:88
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"On many GNU/Linux systems, stdin is represented by /dev/stdin and\n"
+"--include-filelist=/dev/stdin or --exclude-filelist=/dev/stdin could\n"
+"be used as a substitute."
+msgstr ""
+
+#. Used in usage help to represent a Unix-style path name. Example:
+>>>>>>> MERGE-SOURCE
#. --archive-dir <path>
#: ../duplicity/commandline.py:280 ../duplicity/commandline.py:290
#: ../duplicity/commandline.py:311 ../duplicity/commandline.py:385
@@ -542,8 +826,13 @@
msgid "filename"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent a regular expression (regexp).
#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+=======
+#. Used in usage help to represent a regular expression (regexp).
+#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+>>>>>>> MERGE-SOURCE
msgid "regular_expression"
msgstr ""
@@ -571,8 +860,13 @@
"not intended"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent an imap mailbox
#: ../duplicity/commandline.py:432
+=======
+#. Used in usage help to represent an imap mailbox
+#: ../duplicity/commandline.py:432
+>>>>>>> MERGE-SOURCE
msgid "imap_mailbox"
msgstr ""
@@ -591,11 +885,17 @@
msgid "number"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help (noun)
#: ../duplicity/commandline.py:464
+=======
+#. Used in usage help (noun)
+#: ../duplicity/commandline.py:464
+>>>>>>> MERGE-SOURCE
msgid "backup name"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:567
msgid "policy"
msgstr ""
@@ -603,6 +903,11 @@
#. TRANSL: noun
#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
#: ../duplicity/commandline.py:768
+=======
+#. noun
+#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
+#: ../duplicity/commandline.py:768
+>>>>>>> MERGE-SOURCE
msgid "command"
msgstr ""
@@ -614,23 +919,43 @@
msgid "pem formatted bundle of certificate authorities"
msgstr ""
-#: ../duplicity/commandline.py:591
-msgid "path to a folder with certificate authority files"
-msgstr ""
-
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --backend-retry-delay <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
-#: ../duplicity/commandline.py:831
+<<<<<<< TREE
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr ""
+
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+=======
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr ""
+
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#. Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+>>>>>>> MERGE-SOURCE
msgid "seconds"
msgstr ""
+<<<<<<< TREE
#. TRANSL: abbreviation for "character" (noun)
#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+=======
+#. abbreviation for "character" (noun)
+#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+>>>>>>> MERGE-SOURCE
msgid "char"
msgstr ""
@@ -679,13 +1004,23 @@
msgid "container_name"
msgstr ""
+<<<<<<< TREE
#. TRANSL: noun
#: ../duplicity/commandline.py:776
+=======
+#. noun
+#: ../duplicity/commandline.py:776
+>>>>>>> MERGE-SOURCE
msgid "count"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent the name of a file directory
#: ../duplicity/commandline.py:779
+=======
+#. Used in usage help to represent the name of a file directory
+#: ../duplicity/commandline.py:779
+>>>>>>> MERGE-SOURCE
msgid "directory"
msgstr ""
@@ -771,6 +1106,7 @@
msgid "user"
msgstr ""
+<<<<<<< TREE
#. TRANSL: account id for b2. Example: b2://account_id@bucket/
#: ../duplicity/commandline.py:877
msgid "account_id"
@@ -784,18 +1120,37 @@
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:899
+=======
+#. account id for b2. Example: b2://account_id@bucket/
+#: ../duplicity/commandline.py:877
+msgid "account_id"
+msgstr ""
+
+#. application_key for b2.
+#. Example: b2://account_id:application_key@bucket/
+#: ../duplicity/commandline.py:881
+msgid "application_key"
+msgstr ""
+
+#. Header in usage help
+#: ../duplicity/commandline.py:899
+>>>>>>> MERGE-SOURCE
msgid "Backends and their URL formats:"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:930
+=======
+#. Header in usage help
+#: ../duplicity/commandline.py:930
+>>>>>>> MERGE-SOURCE
msgid "Commands:"
msgstr ""
#: ../duplicity/commandline.py:954
#, python-format
-msgid ""
-"Specified archive directory '%s' does not exist, or is not a directory"
+msgid "Specified archive directory '%s' does not exist, or is not a directory"
msgstr ""
#: ../duplicity/commandline.py:963
@@ -1083,12 +1438,20 @@
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#. TRANSL: "cleanup" is a hard-coded command, so do not translate it
#: ../duplicity/collections.py:666
msgid ""
"These may be deleted by running duplicity with the \"cleanup\" command."
msgstr ""
+=======
+#. "cleanup" is a hard-coded command, so do not translate it
+#: ../duplicity/collections.py:666
+msgid "These may be deleted by running duplicity with the \"cleanup\" command."
+msgstr ""
+
+>>>>>>> MERGE-SOURCE
#: ../duplicity/collections.py:669
msgid "No orphaned or incomplete backup sets found."
msgstr ""
@@ -1107,9 +1470,14 @@
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:748
msgid ""
"Warning, discarding last backup set, because of missing signature file."
+=======
+#: ../duplicity/collections.py:748
+msgid "Warning, discarding last backup set, because of missing signature file."
+>>>>>>> MERGE-SOURCE
msgstr ""
#: ../duplicity/collections.py:771
@@ -1250,6 +1618,7 @@
msgid "Connection failed, please check your password: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:85
#, python-format
msgid "MultiBackend: Could not parse query string %s: %s "
@@ -1495,6 +1864,247 @@
msgid ""
"basis_file must be a (true) file or an object whose file attribute is the "
"underlying true file object"
+=======
+#: ../duplicity/backends/multibackend.py:85
+#, python-format
+msgid "MultiBackend: Could not parse query string %s: %s "
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:94
+#, python-format
+msgid "MultiBackend: Invalid query string %s: more than one value for %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:99
+#, python-format
+msgid "MultiBackend: Invalid query string %s: unknown parameter %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:149
+#: ../duplicity/backends/multibackend.py:154
+#, python-format
+msgid "MultiBackend: illegal value for %s: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:162
+#, python-format
+msgid "MultiBackend: Url %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:166
+#, python-format
+msgid "MultiBackend: Could not load config file %s: %s "
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:175
+#, python-format
+msgid "MultiBackend: use store %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:180
+#, python-format
+msgid "MultiBackend: set env %s = %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:206
+#, python-format
+msgid "MultiBackend: _put: write to store #%s (%s)"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:219
+#, python-format
+msgid "MultiBackend: failed to write to store #%s (%s), try #%s, Exception: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:226
+#, python-format
+msgid "MultiBackend: failed to write %s. Aborting process."
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:233
+#, python-format
+msgid ""
+"MultiBackend: failed to write %s. Tried all backing stores and none succeeded"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:250
+#, python-format
+msgid "MultiBackend: failed to get %s to %s from %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:253
+#, python-format
+msgid ""
+"MultiBackend: failed to get %s. Tried all backing stores and none succeeded"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:262
+#, python-format
+msgid "MultiBackend: list from %s: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:268
+#, python-format
+msgid "MultiBackend: combined list: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:290
+#, python-format
+msgid "MultiBackend: failed to delete %s from %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:294
+#, python-format
+msgid ""
+"MultiBackend: failed to delete %s. Tried all backing stores and none "
+"succeeded"
+msgstr ""
+
+#: ../duplicity/backends/pydrivebackend.py:143
+#, python-format
+msgid "PyDrive backend: multiple files called '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:61
+msgid "Missing socket or ssl python modules."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:79
+#, python-format
+msgid "Cacert database file '%s' is not readable."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:100
+msgid ""
+"Option '--ssl-cacert-path' is not supported with python 2.7.8 and below."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:104
+#, python-format
+msgid ""
+"For certificate verification with python 2.7.8 or earlier a cacert database\n"
+"file is needed in one of these locations: %s\n"
+"Hints:\n"
+" Consult the man page, chapter 'SSL Certificate Verification'.\n"
+" Consider using the options --ssl-cacert-file, --ssl-no-check-certificate ."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:150
+#, python-format
+msgid "Using WebDAV protocol %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:151
+#, python-format
+msgid "Using WebDAV host %s port %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:153
+#, python-format
+msgid "Using WebDAV directory %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:184
+#, python-format
+msgid "WebDAV create connection on '%s'"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:195
+#, python-format
+msgid "WebDAV Unknown URI scheme: %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:214
+#, python-format
+msgid "WebDAV %s %s request with headers: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:215
+#: ../duplicity/backends/webdavbackend.py:238
+#, python-format
+msgid "WebDAV data length: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:218
+#, python-format
+msgid "WebDAV response status %s with reason '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:224
+#, python-format
+msgid "WebDAV redirect to: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:226
+msgid "WebDAV redirected 10 times. Giving up."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:231
+msgid "WebDAV missing location header in redirect response."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:236
+msgid "WebDAV retry request with authentification headers."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:237
+#, python-format
+msgid "WebDAV %s %s request2 with headers: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:241
+#, python-format
+msgid "WebDAV response2 status %s with reason '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:258
+msgid ""
+"python-kerberos needed to use kerberos "
+"authorization, falling back to basic auth."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:262
+#, python-format
+msgid ""
+"Kerberos authorization failed: %s. Falling back to "
+"basic auth."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:360
+#, python-format
+msgid "Creating missing directory %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:364
+#, python-format
+msgid "WebDAV MKCOL %s failed: %s %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:377
+#, python-format
+msgid "WebDAV path decoding and translation: %s -> %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:422
+#, python-format
+msgid "WebDAV GET Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:444
+#, python-format
+msgid "WebDAV PUT Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:464
+#, python-format
+msgid "WebDAV DEL Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/librsync.py:184
+msgid ""
+"basis_file must be a (true) file or an object whose file attribute is the "
+"underlying true file object"
+>>>>>>> MERGE-SOURCE
msgstr ""
#: ../duplicity/manifest.py:91
@@ -1521,6 +2131,7 @@
"seeing this message"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:192
#, python-format
msgid "Found manifest volume %s"
@@ -1538,6 +2149,19 @@
msgstr ""
#: ../duplicity/manifest.py:213
+=======
+#: ../duplicity/manifest.py:192
+#, python-format
+msgid "Found manifest volume %s"
+msgstr ""
+
+#: ../duplicity/manifest.py:199
+#, python-format
+msgid "Found %s volumes in manifest"
+msgstr ""
+
+#: ../duplicity/manifest.py:213
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because different volume numbers"
msgstr ""
=== modified file 'po/cs.po'
--- po/cs.po 2018-02-25 05:44:50 +0000
+++ po/cs.po 2019-03-04 12:09:45 +0000
@@ -6,17 +6,30 @@
msgid ""
msgstr ""
"Project-Id-Version: duplicity\n"
+<<<<<<< TREE
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2018-02-24 06:05+0000\n"
"PO-Revision-Date: 2018-02-23 14:32+0000\n"
"Last-Translator: Pavel Borecki <Unknown>\n"
+=======
+"Report-Msgid-Bugs-To: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+"POT-Creation-Date: 2018-08-21 10:58-0500\n"
+"PO-Revision-Date: 2017-12-05 19:36+0000\n"
+"Last-Translator: Pavel Borecki <Unknown>\n"
+>>>>>>> MERGE-SOURCE
"Language-Team: Czech <cs@xxxxxx>\n"
+"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+<<<<<<< TREE
"X-Launchpad-Export-Date: 2018-02-25 05:44+0000\n"
"X-Generator: Launchpad (build 18561)\n"
+=======
+"X-Launchpad-Export-Date: 2018-08-12 04:35+0000\n"
+"X-Generator: Launchpad (build 18747)\n"
+>>>>>>> MERGE-SOURCE
#: ../bin/duplicity:133
msgid "Reuse configured PASSPHRASE as SIGN_PASSPHRASE"
@@ -72,15 +85,31 @@
"File %s missing in backup set.\n"
"Continuing restart on file %s."
msgstr ""
+<<<<<<< TREE
"Soubor %s chybí v sadě zálohy.\n"
"Pokračuje se restartem na souboru %s."
#: ../bin/duplicity:331
+=======
+"Soubor %s chybí v sadě zálohy.\n"
+"Pokračuje se restartem na souboru %s."
+
+#: ../bin/duplicity:336
+#, python-format
+msgid "Remote filesize %d for %s does not match local size %d, retrying."
+msgstr ""
+
+#: ../bin/duplicity:343
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s was corrupted during upload."
msgstr "Soubor %s byl během nahrávání poškozen."
+<<<<<<< TREE
#: ../bin/duplicity:364
+=======
+#: ../bin/duplicity:376
+>>>>>>> MERGE-SOURCE
msgid ""
"Restarting backup, but current encryption settings do not match original "
"settings"
@@ -88,17 +117,29 @@
"Záloha se restartuje, ale stávající nastavení šifrování se neshodují s "
"původními nastaveními"
+<<<<<<< TREE
#: ../bin/duplicity:387
+=======
+#: ../bin/duplicity:399
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Restarting after volume %s, file %s, block %s"
msgstr "Restartuje se po svazku %s, soubor %s, blok %s"
+<<<<<<< TREE
#: ../bin/duplicity:457
+=======
+#: ../bin/duplicity:469
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d"
msgstr "Zpracovaný svazek %d"
+<<<<<<< TREE
#: ../bin/duplicity:606
+=======
+#: ../bin/duplicity:618
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
@@ -106,54 +147,98 @@
"Fatální chyba: Nedaří se spustit přírůstkovou zálohu. Staré podpisy nebyly "
"nalezeny a přírůstková určena"
+<<<<<<< TREE
#: ../bin/duplicity:610
+=======
+#: ../bin/duplicity:622
+>>>>>>> MERGE-SOURCE
msgid "No signatures found, switching to full backup."
msgstr "Nebyly nalezeny podpisy, přepíná se na plnou zálohu."
+<<<<<<< TREE
#: ../bin/duplicity:624
+=======
+#: ../bin/duplicity:636
+>>>>>>> MERGE-SOURCE
msgid "Backup Statistics"
msgstr "Statistiky záloh"
+<<<<<<< TREE
#: ../bin/duplicity:730
+=======
+#: ../bin/duplicity:742
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%s not found in archive - no files restored."
msgstr "%s nenalezeno v archivu – nebyly obnoveny žádné soubory."
+<<<<<<< TREE
#: ../bin/duplicity:734
+=======
+#: ../bin/duplicity:746
+>>>>>>> MERGE-SOURCE
msgid "No files found in archive - nothing restored."
msgstr "V archivu nejsou žádné soubory - nic nebylo obnoveno."
+<<<<<<< TREE
#: ../bin/duplicity:767
+=======
+#: ../bin/duplicity:779
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d of %d"
msgstr "Zpracován svazek %d z %d"
+<<<<<<< TREE
#: ../bin/duplicity:801
+=======
+#: ../bin/duplicity:813
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Invalid data - %s hash mismatch for file:"
msgstr "Neplatná data - nesouhlasí otisk (hash) %s pro soubor:"
+<<<<<<< TREE
#: ../bin/duplicity:804
+=======
+#: ../bin/duplicity:816
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Calculated hash: %s"
msgstr "Spočítaný otisk (hash): %s"
+<<<<<<< TREE
#: ../bin/duplicity:805
+=======
+#: ../bin/duplicity:817
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Manifest hash: %s"
msgstr "Otisk z manifestu: %s"
+<<<<<<< TREE
#: ../bin/duplicity:848
+=======
+#: ../bin/duplicity:860
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Volume was signed by key %s, not %s"
msgstr "Svazek byl podpesán klíčem %s, nikoli %s"
+<<<<<<< TREE
#: ../bin/duplicity:880
+=======
+#: ../bin/duplicity:892
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Verify complete: %s, %s."
msgstr "Kontrola dokončena: %s, %s."
+<<<<<<< TREE
#: ../bin/duplicity:881
+=======
+#: ../bin/duplicity:893
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file compared"
msgid_plural "%d files compared"
@@ -161,7 +246,11 @@
msgstr[1] "%d soubory porovnány"
msgstr[2] "%d souborů porovnáno"
+<<<<<<< TREE
#: ../bin/duplicity:883
+=======
+#: ../bin/duplicity:895
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d difference found"
msgid_plural "%d differences found"
@@ -169,37 +258,65 @@
msgstr[1] "%d rozdíly nalezeny"
msgstr[2] "%d rozdílů nalezeno"
+<<<<<<< TREE
#: ../bin/duplicity:902
+=======
+#: ../bin/duplicity:914
+>>>>>>> MERGE-SOURCE
msgid "No extraneous files found, nothing deleted in cleanup."
msgstr "Nenalezeny žádné zbytečné soubory, během úklidu nebylo nic smazáno."
+<<<<<<< TREE
#: ../bin/duplicity:907
+=======
+#: ../bin/duplicity:919
+>>>>>>> MERGE-SOURCE
msgid "Deleting this file from backend:"
msgid_plural "Deleting these files from backend:"
msgstr[0] "Mazání tohoto souboru z podpůrné vrtvy (backend):"
msgstr[1] "Mazání těchto souborů z podpůrné vrtvy (backend):"
msgstr[2] "Mazání těchto souborů z podpůrné vrtvy (backend):"
+<<<<<<< TREE
#: ../bin/duplicity:918
+=======
+#: ../bin/duplicity:930
+>>>>>>> MERGE-SOURCE
msgid "Found the following file to delete:"
msgid_plural "Found the following files to delete:"
msgstr[0] "Nalezen následující soubor ke smazání:"
msgstr[1] "Nalezeny následující soubory ke smazání:"
msgstr[2] "Nalezeno následujících souborů ke smazání:"
+<<<<<<< TREE
#: ../bin/duplicity:921
+=======
+#: ../bin/duplicity:933
+>>>>>>> MERGE-SOURCE
msgid "Run duplicity again with the --force option to actually delete."
msgstr "Spusť duplicity znovu s volbou --force pro skutečné mazání."
+<<<<<<< TREE
#: ../bin/duplicity:964
+=======
+#: ../bin/duplicity:976
+>>>>>>> MERGE-SOURCE
msgid "There are backup set(s) at time(s):"
msgstr "Jsou zde sady záloh v časech:"
+<<<<<<< TREE
#: ../bin/duplicity:966
+=======
+#: ../bin/duplicity:978
+>>>>>>> MERGE-SOURCE
msgid "Which can't be deleted because newer sets depend on them."
msgstr "Které není možné smazat protože na nich závisí novější sady."
+<<<<<<< TREE
#: ../bin/duplicity:970
+=======
+#: ../bin/duplicity:982
+>>>>>>> MERGE-SOURCE
msgid ""
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
@@ -207,13 +324,22 @@
"Stávající aktivní řetěz záloh je starší než zadaný čas. Nicméně, nebude "
"smazán. Pro smazání všech svých záloh vyčistěte repozitář ručně."
+<<<<<<< TREE
#: ../bin/duplicity:983
+=======
+#: ../bin/duplicity:995
+>>>>>>> MERGE-SOURCE
msgid "No old backup sets found, nothing deleted."
msgstr "Nenalezeny žádné staré sady záloh, nic nebylo smazáno."
+<<<<<<< TREE
#: ../bin/duplicity:986
+=======
+#: ../bin/duplicity:998
+>>>>>>> MERGE-SOURCE
msgid "Deleting backup chain at time:"
msgid_plural "Deleting backup chains at times:"
+<<<<<<< TREE
msgstr[0] "Maže se řetěz zálohy v čase:"
msgstr[1] "Mažou se řetězce zálohy v čase:"
msgstr[2] "Maže se řetězců zálohy v čase:"
@@ -229,25 +355,55 @@
msgstr "Mažou se všechny řetězy přírůstkové zálohy počínaje v %s"
#: ../bin/duplicity:1003
+=======
+msgstr[0] "Maže se řetěz zálohy v čase:"
+msgstr[1] "Mažou se řetězce zálohy v čase:"
+msgstr[2] "Maže se řetězců zálohy v čase:"
+
+#: ../bin/duplicity:1010
+#, python-format
+msgid "Deleting any incremental signature chain rooted at %s"
+msgstr "Mažou se všechny přírůstkové signatury řetězců počínající v %s"
+
+#: ../bin/duplicity:1012
+#, python-format
+msgid "Deleting any incremental backup chain rooted at %s"
+msgstr "Mažou se všechny řetězy přírůstkové zálohy počínaje v %s"
+
+#: ../bin/duplicity:1015
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete signature chain %s"
msgstr "Maže se celý řetěz podpisů %s"
+<<<<<<< TREE
#: ../bin/duplicity:1005
+=======
+#: ../bin/duplicity:1017
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete backup chain %s"
msgstr "Maže se celý řetěz záloh %s"
+<<<<<<< TREE
#: ../bin/duplicity:1011
+=======
+#: ../bin/duplicity:1023
+>>>>>>> MERGE-SOURCE
msgid "Found old backup chain at the following time:"
msgid_plural "Found old backup chains at the following times:"
msgstr[0] "Nalezen starý řetěz záloh v následujících časech:"
msgstr[1] "Nalezeny staré řetězy záloh v následujících časech:"
msgstr[2] "Nalezeno starých řetězů záloh v následujících časech:"
+<<<<<<< TREE
#: ../bin/duplicity:1015
+=======
+#: ../bin/duplicity:1027
+>>>>>>> MERGE-SOURCE
msgid "Rerun command with --force option to actually delete."
msgstr ""
+<<<<<<< TREE
"Aby došlo ke skutečnému smazání, spusťte příkaz znovu s volbou --force."
#: ../bin/duplicity:1028
@@ -270,62 +426,123 @@
msgstr "Sada záloh %s je už replikovaná"
#: ../bin/duplicity:1092
+=======
+"Aby došlo ke skutečnému smazání, spusťte příkaz znovu s volbou --force."
+
+#: ../bin/duplicity:1104
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting local %s (not authoritative at backend)."
msgstr "Mazání místní %s (neautoritativní z pohledu podpůrné vrstvy)."
+<<<<<<< TREE
#: ../bin/duplicity:1097
+=======
+#: ../bin/duplicity:1109
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Unable to delete %s: %s"
msgstr "%s se nedaří smazat: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1128 ../duplicity/dup_temp.py:266
+=======
+#: ../bin/duplicity:1140 ../duplicity/dup_temp.py:266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Failed to read %s: %s"
msgstr "Nepodařilo se načíst %s: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1142
+=======
+#: ../bin/duplicity:1154
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Copying %s to local cache."
msgstr "Kopíruje se %s do mezipaměti na tomto stroji."
+<<<<<<< TREE
#: ../bin/duplicity:1190
+=======
+#: ../bin/duplicity:1202
+>>>>>>> MERGE-SOURCE
msgid "Local and Remote metadata are synchronized, no sync needed."
+<<<<<<< TREE
msgstr ""
"Místní a vzdálená metadata jsou synchronní, není třeba synchronizace."
+=======
+msgstr "Místní a vzdálená metadata jsou synchronní, není třeba synchronizace."
+>>>>>>> MERGE-SOURCE
+<<<<<<< TREE
#: ../bin/duplicity:1195
+=======
+#: ../bin/duplicity:1207
+>>>>>>> MERGE-SOURCE
msgid "Synchronizing remote metadata to local cache..."
msgstr "Synchronizace vzdálených metadat do místní mezipaměti…"
+<<<<<<< TREE
#: ../bin/duplicity:1207
+=======
+#: ../bin/duplicity:1219
+>>>>>>> MERGE-SOURCE
msgid "Sync would copy the following from remote to local:"
msgstr "Sync by zkopíroval následující ze vzdáleného na místní:"
+<<<<<<< TREE
#: ../bin/duplicity:1210
+=======
+#: ../bin/duplicity:1222
+>>>>>>> MERGE-SOURCE
msgid "Sync would remove the following spurious local files:"
msgstr "Sync by odebralo následující zbytečné místní soubory:"
+<<<<<<< TREE
#: ../bin/duplicity:1253
+=======
+#: ../bin/duplicity:1265
+>>>>>>> MERGE-SOURCE
msgid "Unable to get free space on temp."
msgstr "Nedaří se zjistit volné místo na dočasném."
+<<<<<<< TREE
#: ../bin/duplicity:1261
+=======
+#: ../bin/duplicity:1273
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp space has %d available, backup needs approx %d."
+<<<<<<< TREE
msgstr ""
"Na dočasném prostoru je k dispozici %d, záloha potřebuje přibližně %d."
+=======
+msgstr "Na dočasném prostoru je k dispozici %d, záloha potřebuje přibližně %d."
+>>>>>>> MERGE-SOURCE
+<<<<<<< TREE
#: ../bin/duplicity:1264
+=======
+#: ../bin/duplicity:1276
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp has %d available, backup will use approx %d."
msgstr "Na dočasném prostoru je k dispozici %d, záloha využije přibližně %d."
+<<<<<<< TREE
#: ../bin/duplicity:1272
+=======
+#: ../bin/duplicity:1284
+>>>>>>> MERGE-SOURCE
msgid "Unable to get max open files."
msgstr "Nedaří se zjistit limit počtu otevřených souborů."
+<<<<<<< TREE
#: ../bin/duplicity:1276
+=======
+#: ../bin/duplicity:1288
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Max open files of %s is too low, should be >= 1024.\n"
@@ -334,7 +551,11 @@
"Limit naráz otevřených souborů %s je příliš nízký, měl by být >= 1024.\n"
"Napravte to spuštěním příkazu „ulimit -n 1024“ (nebo s vyšší hodnotou).\n"
+<<<<<<< TREE
#: ../bin/duplicity:1327
+=======
+#: ../bin/duplicity:1339
+>>>>>>> MERGE-SOURCE
msgid ""
"RESTART: The first volume failed to upload before termination.\n"
" Restart is impossible...starting backup from beginning."
@@ -342,7 +563,11 @@
"RESTART: První svazek se nepodařilo nahrát před ukončením.\n"
" Restart není možný, záloha se spouští znovu od začátku."
+<<<<<<< TREE
#: ../bin/duplicity:1333
+=======
+#: ../bin/duplicity:1345
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Volumes %d to %d failed to upload before termination.\n"
@@ -351,7 +576,11 @@
"RESTART: Svazky %d až %d se nepodařilo nahrát před ukončením.\n"
" Restartuje se záloha u svazku %d."
+<<<<<<< TREE
#: ../bin/duplicity:1340
+=======
+#: ../bin/duplicity:1352
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
@@ -364,7 +593,11 @@
"pak\n"
" restartuje zálohu od začátku."
+<<<<<<< TREE
#: ../bin/duplicity:1361
+=======
+#: ../bin/duplicity:1373
+>>>>>>> MERGE-SOURCE
msgid ""
"\n"
"PYTHONOPTIMIZE in the environment causes duplicity to fail to\n"
@@ -373,6 +606,7 @@
"\n"
"See https://bugs.launchpad.net/duplicity/+bug/931175\n"
msgstr ""
+<<<<<<< TREE
"\n"
"PYTHONOPTIMIZE v prostředí způsobí, že duplicity nerozpozná\n"
"své vlastní zálohy. Odstraňte PYTHONOPTIMIZE z prostředí\n"
@@ -386,29 +620,68 @@
msgstr "Získává se zamykací soubor %s"
#: ../bin/duplicity:1442
+=======
+"\n"
+"PYTHONOPTIMIZE v prostředí způsobí, že duplicity nerozpozná\n"
+"své vlastní zálohy. Odstraňte PYTHONOPTIMIZE z prostředí\n"
+"a spusťte zálohu znovu.\n"
+"\n"
+"Viz https://bugs.launchpad.net/duplicity/+bug/931175\n"
+
+#: ../bin/duplicity:1396
+#, python-format
+msgid "Acquiring lockfile %s"
+msgstr "Získává se zamykací soubor %s"
+
+#: ../bin/duplicity:1454
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Last %s backup left a partial set, restarting."
msgstr "Poslední %s záloha zanechala částečnou sadu, restartuje se."
+<<<<<<< TREE
#: ../bin/duplicity:1446
+=======
+#: ../bin/duplicity:1458
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Cleaning up previous partial %s backup set, restarting."
msgstr "Čištění předchozí částečné %s sady záloh, restartuje se."
+<<<<<<< TREE
#: ../bin/duplicity:1458
+=======
+#: ../bin/duplicity:1470
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date:"
msgstr "Datum poslední úplné zálohy:"
+<<<<<<< TREE
#: ../bin/duplicity:1460
+=======
+#: ../bin/duplicity:1472
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date: none"
msgstr "Datum poslední plné zálohy: žádná"
+<<<<<<< TREE
#: ../bin/duplicity:1462
+=======
+#: ../bin/duplicity:1474
+>>>>>>> MERGE-SOURCE
msgid "Last full backup is too old, forcing full backup"
+<<<<<<< TREE
msgstr ""
"Poslední plná záloha je příliš stará, vynucuje se pořízení plné zálohy"
+=======
+msgstr "Poslední plná záloha je příliš stará, vynucuje se pořízení plné zálohy"
+>>>>>>> MERGE-SOURCE
+<<<<<<< TREE
#: ../bin/duplicity:1506
+=======
+#: ../bin/duplicity:1518
+>>>>>>> MERGE-SOURCE
msgid ""
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
@@ -416,21 +689,37 @@
"Při použití symetrického šifrování je třeba, aby podpisovací heslová fráze "
"byla stejná, jako ta šifrovací."
+<<<<<<< TREE
#: ../bin/duplicity:1575
+=======
+#: ../bin/duplicity:1587
+>>>>>>> MERGE-SOURCE
msgid "INT intercepted...exiting."
msgstr "Zachyceno přerušení, ukončuje se."
+<<<<<<< TREE
#: ../bin/duplicity:1583
+=======
+#: ../bin/duplicity:1595
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG error detail: %s"
msgstr "Podrobnosti chyby GPG: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1593
+=======
+#: ../bin/duplicity:1605
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "User error detail: %s"
msgstr "Podrobnosti uživateské chyby: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1603
+=======
+#: ../bin/duplicity:1615
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backend error detail: %s"
msgstr "Podrobnosti chyby na podpůrné vrstvě (backend): %s"
@@ -538,6 +827,7 @@
"release.\n"
"Use of default filenames is strongly suggested."
msgstr ""
+<<<<<<< TREE
"Varování: Volbu %s čeká zastarání a bude odebrána v budoucím vydání.\n"
"Použití výchozích názvů souborů je silně doporučováno."
@@ -569,6 +859,39 @@
"být použity jako náhrada."
#. TRANSL: Used in usage help to represent a Unix-style path name. Example:
+=======
+"Varování: Volbu %s čeká zastarání a bude odebrána v budoucím vydání.\n"
+"Použití výchozích názvů souborů je silně doporučováno."
+
+#: ../duplicity/commandline.py:78
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"--include-filelist and --exclude-filelist now accept globbing characters and "
+"should be used instead."
+msgstr ""
+"Varování: Volbu %s čeká zastarání a bude odebrána v budoucím vydání.\n"
+"volby --include-filelist a --exclude-filelist nyní přijímají zástupné znaky "
+"a měly by být použity namísto toho."
+
+#: ../duplicity/commandline.py:88
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"On many GNU/Linux systems, stdin is represented by /dev/stdin and\n"
+"--include-filelist=/dev/stdin or --exclude-filelist=/dev/stdin could\n"
+"be used as a substitute."
+msgstr ""
+"Varování: Volbu %s čeká zastarání a bude odebrána v budoucím vydání.\n"
+"Na mnoha GNU/Linux systémech, stdin je představován /dev/stdin a\n"
+"volby --include-filelist=/dev/stdin nebo --exclude-filelist=/dev/stdin "
+"mohou\n"
+"být použity jako náhrada."
+
+#. Used in usage help to represent a Unix-style path name. Example:
+>>>>>>> MERGE-SOURCE
#. --archive-dir <path>
#: ../duplicity/commandline.py:280 ../duplicity/commandline.py:290
#: ../duplicity/commandline.py:311 ../duplicity/commandline.py:385
@@ -607,8 +930,13 @@
msgid "filename"
msgstr "soubor"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent a regular expression (regexp).
#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+=======
+#. Used in usage help to represent a regular expression (regexp).
+#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+>>>>>>> MERGE-SOURCE
msgid "regular_expression"
msgstr "r_egulární výraz"
@@ -638,8 +966,13 @@
"Spuštěno v režimu „ignorovat chyby“ kvůli %s – znovu zvažte zda toto bylo "
"zamýšleno"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent an imap mailbox
#: ../duplicity/commandline.py:432
+=======
+#. Used in usage help to represent an imap mailbox
+#: ../duplicity/commandline.py:432
+>>>>>>> MERGE-SOURCE
msgid "imap_mailbox"
msgstr "imap_schranka"
@@ -658,9 +991,15 @@
msgid "number"
msgstr "číslo"
+<<<<<<< TREE
#. TRANSL: Used in usage help (noun)
#: ../duplicity/commandline.py:464
+=======
+#. Used in usage help (noun)
+#: ../duplicity/commandline.py:464
+>>>>>>> MERGE-SOURCE
msgid "backup name"
+<<<<<<< TREE
msgstr "název zálohy"
#: ../duplicity/commandline.py:567
@@ -670,6 +1009,13 @@
#. TRANSL: noun
#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
#: ../duplicity/commandline.py:768
+=======
+msgstr "název zálohy"
+
+#. noun
+#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
+#: ../duplicity/commandline.py:768
+>>>>>>> MERGE-SOURCE
msgid "command"
msgstr "příkaz"
@@ -679,25 +1025,47 @@
#: ../duplicity/commandline.py:590
msgid "pem formatted bundle of certificate authorities"
-msgstr "balíček certifikátů cert. autorit ve formátu pem"
-
-#: ../duplicity/commandline.py:591
-msgid "path to a folder with certificate authority files"
-msgstr "popis umístění složky se soubory certifikačních autorit"
-
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --backend-retry-delay <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
-#: ../duplicity/commandline.py:831
+<<<<<<< TREE
+msgstr "balíček certifikátů cert. autorit ve formátu pem"
+
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr "popis umístění složky se soubory certifikačních autorit"
+
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+=======
+msgstr "balíček certifikátů cert. autorit ve formátu pem"
+
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr "popis umístění složky se soubory certifikačních autorit"
+
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#. Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+>>>>>>> MERGE-SOURCE
msgid "seconds"
msgstr "sekund"
+<<<<<<< TREE
#. TRANSL: abbreviation for "character" (noun)
#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+=======
+#. abbreviation for "character" (noun)
+#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+>>>>>>> MERGE-SOURCE
msgid "char"
msgstr "znak"
@@ -746,13 +1114,23 @@
msgid "container_name"
msgstr "název_kontejneru"
+<<<<<<< TREE
#. TRANSL: noun
#: ../duplicity/commandline.py:776
+=======
+#. noun
+#: ../duplicity/commandline.py:776
+>>>>>>> MERGE-SOURCE
msgid "count"
msgstr "počet"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent the name of a file directory
#: ../duplicity/commandline.py:779
+=======
+#. Used in usage help to represent the name of a file directory
+#: ../duplicity/commandline.py:779
+>>>>>>> MERGE-SOURCE
msgid "directory"
msgstr "složka"
@@ -836,6 +1214,7 @@
#. ftp://user[:password]@other.host[:port]/some_dir
#: ../duplicity/commandline.py:874
msgid "user"
+<<<<<<< TREE
msgstr "uživatel"
#. TRANSL: account id for b2. Example: b2://account_id@bucket/
@@ -851,12 +1230,35 @@
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:899
+=======
+msgstr "uživatel"
+
+#. account id for b2. Example: b2://account_id@bucket/
+#: ../duplicity/commandline.py:877
+msgid "account_id"
+msgstr "identifikator_uctu"
+
+#. application_key for b2.
+#. Example: b2://account_id:application_key@bucket/
+#: ../duplicity/commandline.py:881
+msgid "application_key"
+msgstr "aplikacni_klic"
+
+#. Header in usage help
+#: ../duplicity/commandline.py:899
+>>>>>>> MERGE-SOURCE
msgid "Backends and their URL formats:"
msgstr "Podpůrné vrstvy (backend) a formáty jejich URL adres:"
+<<<<<<< TREE
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:930
+=======
+#. Header in usage help
+#: ../duplicity/commandline.py:930
+>>>>>>> MERGE-SOURCE
msgid "Commands:"
+<<<<<<< TREE
msgstr "Příkazy:"
#: ../duplicity/commandline.py:954
@@ -869,6 +1271,19 @@
#, python-format
msgid ""
"Sign key should be an 8, 16 alt. 40 character hex string, like 'AA0E73D2'.\n"
+=======
+msgstr "Příkazy:"
+
+#: ../duplicity/commandline.py:954
+#, python-format
+msgid "Specified archive directory '%s' does not exist, or is not a directory"
+msgstr "Zadaná složka archivu „%s“ neexistuje, nebo se nejedná o složku"
+
+#: ../duplicity/commandline.py:963
+#, python-format
+msgid ""
+"Sign key should be an 8, 16 alt. 40 character hex string, like 'AA0E73D2'.\n"
+>>>>>>> MERGE-SOURCE
"Received '%s' instead."
msgstr ""
"Podpisový klíč by měl být 8, 16 a případně 40 znaků dlouhý hex řetězec jako "
@@ -955,6 +1370,7 @@
#: ../duplicity/backend.py:488
#, python-format
msgid "Reading results of '%s'"
+<<<<<<< TREE
msgstr "Čtení výsledků „%s“"
#: ../duplicity/backend.py:514
@@ -967,6 +1383,19 @@
msgid "File %s not found locally after get from backend"
msgstr ""
"Soubor %s nebyl nalezen lokálně po získání z podpůrné vrstvy (backend)"
+=======
+msgstr "Čtení výsledků „%s“"
+
+#: ../duplicity/backend.py:514
+#, python-format
+msgid "Writing %s"
+msgstr "Zápis %s"
+
+#: ../duplicity/backend.py:555
+#, python-format
+msgid "File %s not found locally after get from backend"
+msgstr "Soubor %s nebyl nalezen lokálně po získání z podpůrné vrstvy (backend)"
+>>>>>>> MERGE-SOURCE
#: ../duplicity/asyncscheduler.py:67
#, python-format
@@ -1157,14 +1586,20 @@
msgid_plural "Also found %d backup sets not part of any chain,"
msgstr[0] "Také nalezena %d sada zálohy která není součástí žádného řetězce,"
msgstr[1] ""
+<<<<<<< TREE
"Také nalezeny %d sady zálohy, které nejsou součástí žádného řetězce,"
msgstr[2] ""
"Také nalezeno %d sad záloh, které nejsou součástí žádného řetězce,"
+=======
+"Také nalezeny %d sady zálohy, které nejsou součástí žádného řetězce,"
+msgstr[2] "Také nalezeno %d sad záloh, které nejsou součástí žádného řetězce,"
+>>>>>>> MERGE-SOURCE
#: ../duplicity/collections.py:661
#, python-format
msgid "and %d incomplete backup set."
msgid_plural "and %d incomplete backup sets."
+<<<<<<< TREE
msgstr[0] "a %d neúplná sada záloh."
msgstr[1] "a %d neúplné sady záloh."
msgstr[2] "a %d neúplných sad záloh."
@@ -1176,6 +1611,18 @@
msgstr ""
"Ty mohou být smazány spuštěním duplicity s příkazem „cleanup“ (vyčištění)."
+=======
+msgstr[0] "a %d neúplná sada záloh."
+msgstr[1] "a %d neúplné sady záloh."
+msgstr[2] "a %d neúplných sad záloh."
+
+#. "cleanup" is a hard-coded command, so do not translate it
+#: ../duplicity/collections.py:666
+msgid "These may be deleted by running duplicity with the \"cleanup\" command."
+msgstr ""
+"Ty mohou být smazány spuštěním duplicity s příkazem „cleanup“ (vyčištění)."
+
+>>>>>>> MERGE-SOURCE
#: ../duplicity/collections.py:669
msgid "No orphaned or incomplete backup sets found."
msgstr "Nebyly nalezeny žádné k ničemu nepatřící nebo neúplné sady záloh."
@@ -1196,9 +1643,14 @@
msgstr[1] "%d soubory existují v mezipaměti"
msgstr[2] "%d souborů existuje v mezipaměti"
+<<<<<<< TREE
#: ../duplicity/collections.py:748
msgid ""
"Warning, discarding last backup set, because of missing signature file."
+=======
+#: ../duplicity/collections.py:748
+msgid "Warning, discarding last backup set, because of missing signature file."
+>>>>>>> MERGE-SOURCE
msgstr ""
"Varování, zahazuje se nejnovější sada záloh, protože chybí soubor s podpisem."
@@ -1288,6 +1740,7 @@
"No signature chain for the requested time. Using oldest available chain, "
"starting at time %s."
msgstr ""
+<<<<<<< TREE
"Pro požadovaný čas neexistuje žádný řetězec podpisu. Náhradně se použije "
"starší dostupný řetězec, začínající v čase %s."
@@ -1304,6 +1757,10 @@
#: ../duplicity/collections.py:1237
msgid "Type of file change:"
msgstr "Typ změny souboru:"
+=======
+"Pro požadovaný čas neexistuje žádný řetězec podpisu. Náhradně se použije "
+"starší dostupný řetězec, začínající v čase %s."
+>>>>>>> MERGE-SOURCE
#: ../duplicity/robust.py:61
#, python-format
@@ -1358,6 +1815,7 @@
#: ../duplicity/backends/giobackend.py:110
#, python-format
msgid "Connection failed, please check your password: %s"
+<<<<<<< TREE
msgstr "Připojení se nezdařilo, prosím zkontrolujte své heslo: %s"
#: ../duplicity/backends/multibackend.py:85
@@ -1627,6 +2085,270 @@
msgstr ""
"je třeba, aby basis_file byl (skutečný) soubor nebo objekt, jehož souborový "
"atribut je je skutečným souborovým objektem"
+=======
+msgstr "Připojení se nezdařilo, prosím zkontrolujte své heslo: %s"
+
+#: ../duplicity/backends/multibackend.py:85
+#, python-format
+msgid "MultiBackend: Could not parse query string %s: %s "
+msgstr "MultiBackend: nepodařilo se zpracovat řetězec dotazu %s: %s "
+
+#: ../duplicity/backends/multibackend.py:94
+#, python-format
+msgid "MultiBackend: Invalid query string %s: more than one value for %s"
+msgstr ""
+"MultiBackend: neplatný řetězec dotazu %s: více než jedna hodnota pro %s"
+
+#: ../duplicity/backends/multibackend.py:99
+#, python-format
+msgid "MultiBackend: Invalid query string %s: unknown parameter %s"
+msgstr "MultiBackend: neplatný řetězec dotazu %s: neznámý parametr %s"
+
+#: ../duplicity/backends/multibackend.py:149
+#: ../duplicity/backends/multibackend.py:154
+#, python-format
+msgid "MultiBackend: illegal value for %s: %s"
+msgstr "MultiBackend: neplatná hodnota pro %s: %s"
+
+#: ../duplicity/backends/multibackend.py:162
+#, python-format
+msgid "MultiBackend: Url %s"
+msgstr "MultiBackend: URL %s"
+
+#: ../duplicity/backends/multibackend.py:166
+#, python-format
+msgid "MultiBackend: Could not load config file %s: %s "
+msgstr "MultiBackend: Nedaří se načíst soubor s nastavením %s: %s "
+
+#: ../duplicity/backends/multibackend.py:175
+#, python-format
+msgid "MultiBackend: use store %s"
+msgstr "MultiBackend: použít uložení %s"
+
+#: ../duplicity/backends/multibackend.py:180
+#, python-format
+msgid "MultiBackend: set env %s = %s"
+msgstr "MultiBackend: nastavit proměnnou prostředí %s = %s"
+
+#: ../duplicity/backends/multibackend.py:206
+#, python-format
+msgid "MultiBackend: _put: write to store #%s (%s)"
+msgstr "MultiBackend: _put: zapsat do uložení č. %s (%s)"
+
+#: ../duplicity/backends/multibackend.py:219
+#, python-format
+msgid "MultiBackend: failed to write to store #%s (%s), try #%s, Exception: %s"
+msgstr ""
+"MultiBackend: nepodařilo se zapsat do uložení č. %s (%s), zkuste č. %s, "
+"výjimka: %s"
+
+#: ../duplicity/backends/multibackend.py:226
+#, python-format
+msgid "MultiBackend: failed to write %s. Aborting process."
+msgstr "MultiBackend: nezdařilo se zapsat do %s. Proces bude přerušen."
+
+#: ../duplicity/backends/multibackend.py:233
+#, python-format
+msgid ""
+"MultiBackend: failed to write %s. Tried all backing stores and none succeeded"
+msgstr ""
+"MultiBackend: nepodařilo se zapsat %s. Vyzkoušena všechny uložení a v žádném "
+"se neuspělo"
+
+#: ../duplicity/backends/multibackend.py:250
+#, python-format
+msgid "MultiBackend: failed to get %s to %s from %s"
+msgstr "MultiBackend: nepodařilo se získat %s do %s z %s"
+
+#: ../duplicity/backends/multibackend.py:253
+#, python-format
+msgid ""
+"MultiBackend: failed to get %s. Tried all backing stores and none succeeded"
+msgstr ""
+"MultiBackend: nepodařilo se získat %s. Vyzkoušena všechna úložiště a na "
+"žádném neuspělo"
+
+#: ../duplicity/backends/multibackend.py:262
+#, python-format
+msgid "MultiBackend: list from %s: %s"
+msgstr "MultiBackend: seznam z %s: %s"
+
+#: ../duplicity/backends/multibackend.py:268
+#, python-format
+msgid "MultiBackend: combined list: %s"
+msgstr "MultiBackend: kombinovaný seznam: %s"
+
+#: ../duplicity/backends/multibackend.py:290
+#, python-format
+msgid "MultiBackend: failed to delete %s from %s"
+msgstr "MultiBackend: nepodařilo se smazat %s z %s"
+
+#: ../duplicity/backends/multibackend.py:294
+#, python-format
+msgid ""
+"MultiBackend: failed to delete %s. Tried all backing stores and none "
+"succeeded"
+msgstr ""
+"MultiBackend: nepodařilo se smazat %s. Vyzkoušena všechna úložiště a na "
+"žádném se neuspělo"
+
+#: ../duplicity/backends/pydrivebackend.py:143
+#, python-format
+msgid "PyDrive backend: multiple files called '%s'."
+msgstr "Podpůrná vrstva PyDrive: vícero souborů nazvaných „%s“."
+
+#: ../duplicity/backends/webdavbackend.py:61
+msgid "Missing socket or ssl python modules."
+msgstr "Chybějící python moduly pro socket nebo ssl."
+
+#: ../duplicity/backends/webdavbackend.py:79
+#, python-format
+msgid "Cacert database file '%s' is not readable."
+msgstr "Soubor „%s“ s certifikáty cert. autorit není čitelný."
+
+#: ../duplicity/backends/webdavbackend.py:100
+msgid ""
+"Option '--ssl-cacert-path' is not supported with python 2.7.8 and below."
+msgstr "Volba „--ssl-cacert-path“ není podporovaná v python 2.7.8 a starších."
+
+#: ../duplicity/backends/webdavbackend.py:104
+#, python-format
+msgid ""
+"For certificate verification with python 2.7.8 or earlier a cacert database\n"
+"file is needed in one of these locations: %s\n"
+"Hints:\n"
+" Consult the man page, chapter 'SSL Certificate Verification'.\n"
+" Consider using the options --ssl-cacert-file, --ssl-no-check-certificate ."
+msgstr ""
+"Pro ověřování certifikátů s python 2.7.8 a staršími je třeba souboru\n"
+"s databází certifikátů cert. autorit v jednom z těchto umístění: %s\n"
+"Rady:\n"
+" Konzultujte manuálovou stránku, kapitolu „Ověřování SSL certifikátů“.\n"
+" Zvažte použití voleb --ssl-cacert-file, --ssl-no-check-certificate ."
+
+#: ../duplicity/backends/webdavbackend.py:150
+#, python-format
+msgid "Using WebDAV protocol %s"
+msgstr "Pomocí WebDAV protokolu %s"
+
+#: ../duplicity/backends/webdavbackend.py:151
+#, python-format
+msgid "Using WebDAV host %s port %s"
+msgstr "S použitím WebDAV hostitele %s, port %s"
+
+#: ../duplicity/backends/webdavbackend.py:153
+#, python-format
+msgid "Using WebDAV directory %s"
+msgstr "S použitím WebDAV složky %s"
+
+#: ../duplicity/backends/webdavbackend.py:184
+#, python-format
+msgid "WebDAV create connection on '%s'"
+msgstr "WebDAV vytvořit spojení na „%s“"
+
+#: ../duplicity/backends/webdavbackend.py:195
+#, python-format
+msgid "WebDAV Unknown URI scheme: %s"
+msgstr "WebDAV neznámé schéma URI: %s"
+
+#: ../duplicity/backends/webdavbackend.py:214
+#, python-format
+msgid "WebDAV %s %s request with headers: %s "
+msgstr "WebDAV %s %s požadavek s hlavičkami: %s "
+
+#: ../duplicity/backends/webdavbackend.py:215
+#: ../duplicity/backends/webdavbackend.py:238
+#, python-format
+msgid "WebDAV data length: %s "
+msgstr "WebDAV datový objem: %s "
+
+#: ../duplicity/backends/webdavbackend.py:218
+#, python-format
+msgid "WebDAV response status %s with reason '%s'."
+msgstr "Stav %s WebDAV odpovědi s důvodem „%s“."
+
+#: ../duplicity/backends/webdavbackend.py:224
+#, python-format
+msgid "WebDAV redirect to: %s "
+msgstr "WebDAV přeměrovat na: %s "
+
+#: ../duplicity/backends/webdavbackend.py:226
+msgid "WebDAV redirected 10 times. Giving up."
+msgstr "WebDAV přesměroval 10 krát. Dále už se zkoušet nebude."
+
+#: ../duplicity/backends/webdavbackend.py:231
+msgid "WebDAV missing location header in redirect response."
+msgstr "WebDAV chybí hlavička umístění v přesměrovávací odpovědi."
+
+#: ../duplicity/backends/webdavbackend.py:236
+msgid "WebDAV retry request with authentification headers."
+msgstr "WebDAV požadavek na opětovný pokus s ověřovacími hlavičkami."
+
+#: ../duplicity/backends/webdavbackend.py:237
+#, python-format
+msgid "WebDAV %s %s request2 with headers: %s "
+msgstr "WebDAV %s %s druhý požadavek s hlavičkami: %s "
+
+#: ../duplicity/backends/webdavbackend.py:241
+#, python-format
+msgid "WebDAV response2 status %s with reason '%s'."
+msgstr "WebDAV stav %s druhé odpovědi s důvodem „%s“."
+
+#: ../duplicity/backends/webdavbackend.py:258
+msgid ""
+"python-kerberos needed to use kerberos "
+"authorization, falling back to basic auth."
+msgstr ""
+"Pro použití kerberos ověřování je třeba python-kerberos, náhradně se použije "
+"ověření uživatelským jménem a heslem."
+
+#: ../duplicity/backends/webdavbackend.py:262
+#, python-format
+msgid ""
+"Kerberos authorization failed: %s. Falling back to "
+"basic auth."
+msgstr ""
+"Kerberos ověřování se nezdařilo: %s. Náhradně se bude ověřovat uživatelským "
+"jménem a heslem."
+
+#: ../duplicity/backends/webdavbackend.py:360
+#, python-format
+msgid "Creating missing directory %s"
+msgstr "Vytváření chybějící složky %s"
+
+#: ../duplicity/backends/webdavbackend.py:364
+#, python-format
+msgid "WebDAV MKCOL %s failed: %s %s"
+msgstr "WebDAV MKCOL %s se nezdařilo: %s %s"
+
+#: ../duplicity/backends/webdavbackend.py:377
+#, python-format
+msgid "WebDAV path decoding and translation: %s -> %s"
+msgstr "WebDAV dekódování a překlad popisu umístění: %s -> %s"
+
+#: ../duplicity/backends/webdavbackend.py:422
+#, python-format
+msgid "WebDAV GET Bad status code %s reason %s."
+msgstr "WebDAV GET chybný stavový kód %s důvod %s."
+
+#: ../duplicity/backends/webdavbackend.py:444
+#, python-format
+msgid "WebDAV PUT Bad status code %s reason %s."
+msgstr "WebDAV PUT chybný stavový kód %s důvod %s."
+
+#: ../duplicity/backends/webdavbackend.py:464
+#, python-format
+msgid "WebDAV DEL Bad status code %s reason %s."
+msgstr "WebDAV DEL chybný stavový kód %s důvod %s."
+
+#: ../duplicity/librsync.py:184
+msgid ""
+"basis_file must be a (true) file or an object whose file attribute is the "
+"underlying true file object"
+msgstr ""
+"je třeba, aby basis_file byl (skutečný) soubor nebo objekt, jehož souborový "
+"atribut je je skutečným souborovým objektem"
+>>>>>>> MERGE-SOURCE
#: ../duplicity/manifest.py:91
#, python-format
@@ -1657,6 +2379,7 @@
"If this is not a mistake, use the --allow-source-mismatch switch to avoid "
"seeing this message"
msgstr ""
+<<<<<<< TREE
"Přerušuje se protože byste si mohli nedopatřením pokusit zazálohovat dvě "
"různé datové sady do stejného vzdáleného umístění nebo použít stejnou "
"archivní složku. Pokud to není chyba, použijte přepínač --allow-source-"
@@ -1681,6 +2404,24 @@
"souborů obsahuje %d"
#: ../duplicity/manifest.py:213
+=======
+"Přerušuje se protože byste si mohli nedopatřením pokusit zazálohovat dvě "
+"různé datové sady do stejného vzdáleného umístění nebo použít stejnou "
+"archivní složku. Pokud to není chyba, použijte přepínač --allow-source-"
+"mismatch, aby se toto hlášení neobjevovalo."
+
+#: ../duplicity/manifest.py:192
+#, python-format
+msgid "Found manifest volume %s"
+msgstr "Nalezen svazek manifestu %s"
+
+#: ../duplicity/manifest.py:199
+#, python-format
+msgid "Found %s volumes in manifest"
+msgstr "Nalezeno %s svazků v manifestu"
+
+#: ../duplicity/manifest.py:213
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because different volume numbers"
msgstr "Manifesty se neshodují kvůli rozdílným počtům svazků"
@@ -1877,4 +2618,26 @@
#: ../duplicity/util.py:162
#, python-format
msgid "Releasing lockfile %s"
-msgstr "Uvolňování souboru zámku %s"
+<<<<<<< TREE
+msgstr "Uvolňování souboru zámku %s"
+=======
+msgstr "Uvolňování souboru zámku %s"
+
+#~ msgid "%s not found in archive, no files restored."
+#~ msgstr "%s v archivu nenalezen, žádné soubory nebyly obnoveny."
+
+#~ msgid "Total number of backup: %d"
+#~ msgstr "Celkový počet záloh: %d"
+
+#~ msgid "Type of file change:"
+#~ msgstr "Typ změny souboru:"
+
+#~ msgid "File: %s"
+#~ msgstr "Soubor: %s"
+
+#~ msgid ""
+#~ "Manifest file '%s' is corrupt: File count says %d, File list contains %d"
+#~ msgstr ""
+#~ "Soubor s manifestem „%s“ je poškozený: Počet souborů uvádí %d, seznam "
+#~ "souborů obsahuje %d"
+>>>>>>> MERGE-SOURCE
=== modified file 'po/de.po'
--- po/de.po 2018-02-25 05:44:50 +0000
+++ po/de.po 2019-03-04 12:09:45 +0000
@@ -6,17 +6,30 @@
msgid ""
msgstr ""
"Project-Id-Version: duplicity\n"
+<<<<<<< TREE
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2018-02-24 06:05+0000\n"
"PO-Revision-Date: 2018-02-23 13:10+0000\n"
"Last-Translator: Tobias Bannert <Unknown>\n"
+=======
+"Report-Msgid-Bugs-To: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+"POT-Creation-Date: 2018-08-21 10:58-0500\n"
+"PO-Revision-Date: 2017-10-16 21:07+0000\n"
+"Last-Translator: Martin Weil <Unknown>\n"
+>>>>>>> MERGE-SOURCE
"Language-Team: German <de@xxxxxx>\n"
+"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+<<<<<<< TREE
"X-Launchpad-Export-Date: 2018-02-25 05:44+0000\n"
"X-Generator: Launchpad (build 18561)\n"
+=======
+"X-Launchpad-Export-Date: 2018-08-12 04:35+0000\n"
+"X-Generator: Launchpad (build 18747)\n"
+>>>>>>> MERGE-SOURCE
#: ../bin/duplicity:133
msgid "Reuse configured PASSPHRASE as SIGN_PASSPHRASE"
@@ -78,12 +91,25 @@
"Datei %s fehlt im Sicherungssatz.\n"
"Beim Neustart wird fortgefahren mit Datei %s."
+<<<<<<< TREE
#: ../bin/duplicity:331
+=======
+#: ../bin/duplicity:336
+#, python-format
+msgid "Remote filesize %d for %s does not match local size %d, retrying."
+msgstr ""
+
+#: ../bin/duplicity:343
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s was corrupted during upload."
msgstr "Datei %s wurde während des Hochladens beschädigt."
+<<<<<<< TREE
#: ../bin/duplicity:364
+=======
+#: ../bin/duplicity:376
+>>>>>>> MERGE-SOURCE
msgid ""
"Restarting backup, but current encryption settings do not match original "
"settings"
@@ -92,17 +118,29 @@
"Verschlüsselungseinstellungen entsprechen jedoch nicht den ursprünglichen "
"Einstellungen"
+<<<<<<< TREE
#: ../bin/duplicity:387
+=======
+#: ../bin/duplicity:399
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Restarting after volume %s, file %s, block %s"
msgstr "Neustart nach Datenträger %s, Datei %s, Block %s"
+<<<<<<< TREE
#: ../bin/duplicity:457
+=======
+#: ../bin/duplicity:469
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d"
msgstr "Datenträger %d wurde verarbeitet"
+<<<<<<< TREE
#: ../bin/duplicity:606
+=======
+#: ../bin/duplicity:618
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
@@ -110,100 +148,176 @@
"Schwerwiegender Fehler: schrittweise Sicherung konnte nicht gestartet "
"werden. Alte Signaturen nicht gefunden und schrittweise Sicherung ausgewählt."
+<<<<<<< TREE
#: ../bin/duplicity:610
+=======
+#: ../bin/duplicity:622
+>>>>>>> MERGE-SOURCE
msgid "No signatures found, switching to full backup."
msgstr "Keine Signaturen gefunden, vollständige Sicherung wird durchgeführt."
+<<<<<<< TREE
#: ../bin/duplicity:624
+=======
+#: ../bin/duplicity:636
+>>>>>>> MERGE-SOURCE
msgid "Backup Statistics"
msgstr "Sicherungsstatistiken"
+<<<<<<< TREE
#: ../bin/duplicity:730
+=======
+#: ../bin/duplicity:742
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%s not found in archive - no files restored."
msgstr "%s wurde nicht im Archiv gefunden - keine Dateien wiederhergestellt."
+<<<<<<< TREE
#: ../bin/duplicity:734
+=======
+#: ../bin/duplicity:746
+>>>>>>> MERGE-SOURCE
msgid "No files found in archive - nothing restored."
msgstr "Keine Dateien im Archiv - nichts wiederhergestellt."
+<<<<<<< TREE
#: ../bin/duplicity:767
+=======
+#: ../bin/duplicity:779
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d of %d"
msgstr "Datenträger %d von %d wurde verarbeitet"
+<<<<<<< TREE
#: ../bin/duplicity:801
+=======
+#: ../bin/duplicity:813
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Invalid data - %s hash mismatch for file:"
msgstr "Ungültige Daten – %s-Hash stimmt nicht für die Datei:"
+<<<<<<< TREE
#: ../bin/duplicity:804
+=======
+#: ../bin/duplicity:816
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Calculated hash: %s"
msgstr "Erstellter Hash: %s"
+<<<<<<< TREE
#: ../bin/duplicity:805
+=======
+#: ../bin/duplicity:817
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Manifest hash: %s"
msgstr "Manifest-Hashcode: %s"
+<<<<<<< TREE
#: ../bin/duplicity:848
+=======
+#: ../bin/duplicity:860
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Volume was signed by key %s, not %s"
msgstr "Datenträger wurde von Schlüssel %s, anstatt von %s unterschrieben"
+<<<<<<< TREE
#: ../bin/duplicity:880
+=======
+#: ../bin/duplicity:892
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Verify complete: %s, %s."
msgstr "Überprüfung vollständig: %s, %s."
+<<<<<<< TREE
#: ../bin/duplicity:881
+=======
+#: ../bin/duplicity:893
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file compared"
msgid_plural "%d files compared"
msgstr[0] "%d Datei verglichen"
msgstr[1] "%d Dateien verglichen"
+<<<<<<< TREE
#: ../bin/duplicity:883
+=======
+#: ../bin/duplicity:895
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d difference found"
msgid_plural "%d differences found"
msgstr[0] "%d Unterschied gefunden"
msgstr[1] "%d Unterschiede gefunden"
+<<<<<<< TREE
#: ../bin/duplicity:902
+=======
+#: ../bin/duplicity:914
+>>>>>>> MERGE-SOURCE
msgid "No extraneous files found, nothing deleted in cleanup."
msgstr "Keine überflüssigen Dateien gefunden, es wurde nichts gelöscht."
+<<<<<<< TREE
#: ../bin/duplicity:907
+=======
+#: ../bin/duplicity:919
+>>>>>>> MERGE-SOURCE
msgid "Deleting this file from backend:"
msgid_plural "Deleting these files from backend:"
msgstr[0] "Diese Datei wird vom Hintergrundprogramm gelöscht:"
msgstr[1] "Diese Dateien wird vom Hintergrundprogramm gelöscht:"
+<<<<<<< TREE
#: ../bin/duplicity:918
+=======
+#: ../bin/duplicity:930
+>>>>>>> MERGE-SOURCE
msgid "Found the following file to delete:"
msgid_plural "Found the following files to delete:"
msgstr[0] "Folgende Datei zum Löschen gefunden:"
msgstr[1] "Folgende Dateien zum Löschen gefunden:"
+<<<<<<< TREE
#: ../bin/duplicity:921
+=======
+#: ../bin/duplicity:933
+>>>>>>> MERGE-SOURCE
msgid "Run duplicity again with the --force option to actually delete."
msgstr ""
"Bitte duplicity noch einmal mit der »--force«-Option ausführen, um "
"tatsächlich zu löschen."
+<<<<<<< TREE
#: ../bin/duplicity:964
+=======
+#: ../bin/duplicity:976
+>>>>>>> MERGE-SOURCE
msgid "There are backup set(s) at time(s):"
msgstr "Es bestehen Sicherungssätze zu folgenden Zeitpunkten:"
+<<<<<<< TREE
#: ../bin/duplicity:966
+=======
+#: ../bin/duplicity:978
+>>>>>>> MERGE-SOURCE
msgid "Which can't be deleted because newer sets depend on them."
msgstr ""
"Welche nicht gelöscht werden können, weil neuere Sicherungssätze davon "
"abhängen."
+<<<<<<< TREE
#: ../bin/duplicity:970
+=======
+#: ../bin/duplicity:982
+>>>>>>> MERGE-SOURCE
msgid ""
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
@@ -212,16 +326,25 @@
"wird nicht gelöscht. Um alle Sicherungen zu entfernen, bitte die Paketquelle "
"manuell löschen."
+<<<<<<< TREE
#: ../bin/duplicity:983
+=======
+#: ../bin/duplicity:995
+>>>>>>> MERGE-SOURCE
msgid "No old backup sets found, nothing deleted."
msgstr "Keine alten Sicherungssätze gefunden, nichts gelöscht."
+<<<<<<< TREE
#: ../bin/duplicity:986
+=======
+#: ../bin/duplicity:998
+>>>>>>> MERGE-SOURCE
msgid "Deleting backup chain at time:"
msgid_plural "Deleting backup chains at times:"
msgstr[0] "Sicherungskette dieses Zeitpunkts wird gelöscht:"
msgstr[1] "Sicherungskette dieser Zeitpunkte wird gelöscht:"
+<<<<<<< TREE
#: ../bin/duplicity:998
#, python-format
msgid "Deleting any incremental signature chain rooted at %s"
@@ -235,27 +358,54 @@
"Jede schrittweise Sicherungskette die bei %s verankert ist wird gelöscht"
#: ../bin/duplicity:1003
+=======
+#: ../bin/duplicity:1010
+#, python-format
+msgid "Deleting any incremental signature chain rooted at %s"
+msgstr "Jede schrittweise Signaturkette die bei %s verankert ist wird gelöscht"
+
+#: ../bin/duplicity:1012
+#, python-format
+msgid "Deleting any incremental backup chain rooted at %s"
+msgstr ""
+"Jede schrittweise Sicherungskette die bei %s verankert ist wird gelöscht"
+
+#: ../bin/duplicity:1015
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete signature chain %s"
msgstr "Vollständige Signaturkette wird gelöscht: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1005
+=======
+#: ../bin/duplicity:1017
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete backup chain %s"
msgstr "Vollständige Sicherungskette wird gelöscht: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1011
+=======
+#: ../bin/duplicity:1023
+>>>>>>> MERGE-SOURCE
msgid "Found old backup chain at the following time:"
msgid_plural "Found old backup chains at the following times:"
msgstr[0] "Alte Sicherungskette zu folgendem Zeitpunkt gefunden:"
msgstr[1] "Alte Sicherungeketten zu folgenden Zeitpunkten gefunden:"
+<<<<<<< TREE
#: ../bin/duplicity:1015
+=======
+#: ../bin/duplicity:1027
+>>>>>>> MERGE-SOURCE
msgid "Rerun command with --force option to actually delete."
msgstr ""
"Bitte Befehl erneut mit »--force«-Option ausführen, um tatsächlich zu "
"löschen."
+<<<<<<< TREE
#: ../bin/duplicity:1028
msgid "No old backup sets found."
msgstr ""
@@ -276,68 +426,119 @@
msgstr ""
#: ../bin/duplicity:1092
+=======
+#: ../bin/duplicity:1104
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting local %s (not authoritative at backend)."
msgstr "Lokal %s wird gelöscht (keine Auswirkungen am Hintergrundprogramm)."
+<<<<<<< TREE
#: ../bin/duplicity:1097
+=======
+#: ../bin/duplicity:1109
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Unable to delete %s: %s"
msgstr "%s kann nicht gelöscht werden: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1128 ../duplicity/dup_temp.py:266
+=======
+#: ../bin/duplicity:1140 ../duplicity/dup_temp.py:266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Failed to read %s: %s"
msgstr "%s konnte nicht gelesen werden: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1142
+=======
+#: ../bin/duplicity:1154
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Copying %s to local cache."
msgstr "%s wird zum lokalen Puffer kopiert."
+<<<<<<< TREE
#: ../bin/duplicity:1190
+=======
+#: ../bin/duplicity:1202
+>>>>>>> MERGE-SOURCE
msgid "Local and Remote metadata are synchronized, no sync needed."
msgstr ""
"Lokale und entfernte Metadaten sind bereits synchron, kein Abgleich benötigt."
+<<<<<<< TREE
#: ../bin/duplicity:1195
+=======
+#: ../bin/duplicity:1207
+>>>>>>> MERGE-SOURCE
msgid "Synchronizing remote metadata to local cache..."
msgstr "Entfernte Metadaten werden zum lokalen Puffer synchronisiert …"
+<<<<<<< TREE
#: ../bin/duplicity:1207
+=======
+#: ../bin/duplicity:1219
+>>>>>>> MERGE-SOURCE
msgid "Sync would copy the following from remote to local:"
msgstr ""
"Synchronisation würde die folgenden Daten vom entfernten Rechner hierher "
"kopieren:"
+<<<<<<< TREE
#: ../bin/duplicity:1210
+=======
+#: ../bin/duplicity:1222
+>>>>>>> MERGE-SOURCE
msgid "Sync would remove the following spurious local files:"
msgstr ""
"Synchronisation würde die folgenden überflüssigen lokalen Dateien entfernen:"
+<<<<<<< TREE
#: ../bin/duplicity:1253
+=======
+#: ../bin/duplicity:1265
+>>>>>>> MERGE-SOURCE
msgid "Unable to get free space on temp."
msgstr "Der temporäre Speicherplatz ist belegt."
+<<<<<<< TREE
#: ../bin/duplicity:1261
+=======
+#: ../bin/duplicity:1273
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp space has %d available, backup needs approx %d."
msgstr ""
"%d temporärer Speicherplatz ist verfügbar, die Sicherung benötigt ungefähr "
"%d."
+<<<<<<< TREE
#: ../bin/duplicity:1264
+=======
+#: ../bin/duplicity:1276
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp has %d available, backup will use approx %d."
msgstr ""
"%d temporärer Speicherplatz ist verfügbar, die Sicherung wird ungefähr %d "
"nutzen."
+<<<<<<< TREE
#: ../bin/duplicity:1272
+=======
+#: ../bin/duplicity:1284
+>>>>>>> MERGE-SOURCE
msgid "Unable to get max open files."
msgstr "Der Höchstwert für offene Dateien konnte nicht festgestellt werden."
+<<<<<<< TREE
#: ../bin/duplicity:1276
+=======
+#: ../bin/duplicity:1288
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Max open files of %s is too low, should be >= 1024.\n"
@@ -347,7 +548,11 @@
"sein.\n"
"Bitte »ulimit -n 1024« ausführen, um dieses zu berichtigen.\n"
+<<<<<<< TREE
#: ../bin/duplicity:1327
+=======
+#: ../bin/duplicity:1339
+>>>>>>> MERGE-SOURCE
msgid ""
"RESTART: The first volume failed to upload before termination.\n"
" Restart is impossible...starting backup from beginning."
@@ -355,7 +560,11 @@
"NEUSTART: Das Hochladen des ersten Datenträgers ist fehlgeschlagen.\n"
" Neustart nicht möglich, Sicherung wird vom Anfang wiederaufgenommen."
+<<<<<<< TREE
#: ../bin/duplicity:1333
+=======
+#: ../bin/duplicity:1345
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Volumes %d to %d failed to upload before termination.\n"
@@ -364,7 +573,11 @@
"NEUSTART: Das Hochladen der Datenträger %d bis %d ist fehlgeschlagen.\n"
" Sicherung wird mit Datenträger %d wiederaufgenommen."
+<<<<<<< TREE
#: ../bin/duplicity:1340
+=======
+#: ../bin/duplicity:1352
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
@@ -377,7 +590,11 @@
" Neustart nicht möglich … duplicity wird die letzte unvollständige\n"
" Sicherung entfernen und von vorn anfangen."
+<<<<<<< TREE
#: ../bin/duplicity:1361
+=======
+#: ../bin/duplicity:1373
+>>>>>>> MERGE-SOURCE
msgid ""
"\n"
"PYTHONOPTIMIZE in the environment causes duplicity to fail to\n"
@@ -394,40 +611,71 @@
"\n"
"Siehe https://bugs.launchpad.net/duplicity/+bug/931175\n"
+<<<<<<< TREE
#: ../bin/duplicity:1384
#, python-format
msgid "Acquiring lockfile %s"
msgstr "Die Sperrdatei %s wird erfasst"
+=======
+#: ../bin/duplicity:1396
+#, python-format
+msgid "Acquiring lockfile %s"
+msgstr "Die Sperrdatei %s wird erfasst"
+>>>>>>> MERGE-SOURCE
+<<<<<<< TREE
#: ../bin/duplicity:1442
+=======
+#: ../bin/duplicity:1454
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Last %s backup left a partial set, restarting."
msgstr ""
"Das letzte %s-Sicherung hinterließ einen Teil eines Sicherungssatzes, "
"Neustart wird durchgeführt."
+<<<<<<< TREE
#: ../bin/duplicity:1446
+=======
+#: ../bin/duplicity:1458
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Cleaning up previous partial %s backup set, restarting."
msgstr ""
"Der letzte unvollständige %s-Sicherungssatz wird entfernt, Neustart wird "
"durchgeführt."
+<<<<<<< TREE
#: ../bin/duplicity:1458
+=======
+#: ../bin/duplicity:1470
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date:"
msgstr "Letzte vollständige Sicherung:"
+<<<<<<< TREE
#: ../bin/duplicity:1460
+=======
+#: ../bin/duplicity:1472
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date: none"
msgstr "Letzte vollständige Sicherung: Keine"
+<<<<<<< TREE
#: ../bin/duplicity:1462
+=======
+#: ../bin/duplicity:1474
+>>>>>>> MERGE-SOURCE
msgid "Last full backup is too old, forcing full backup"
msgstr ""
"Letzte vollständige Sicherung ist zu alt, vollständige Sicherung wird "
"erzwungen"
+<<<<<<< TREE
#: ../bin/duplicity:1506
+=======
+#: ../bin/duplicity:1518
+>>>>>>> MERGE-SOURCE
msgid ""
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
@@ -435,21 +683,37 @@
"Bei symmetrischer Verschlüsselung müssen die Passphrasen für Signatur und "
"Verschlüsselung übereinstimmen."
+<<<<<<< TREE
#: ../bin/duplicity:1575
+=======
+#: ../bin/duplicity:1587
+>>>>>>> MERGE-SOURCE
msgid "INT intercepted...exiting."
msgstr "INT abgefangen … wird beendet."
+<<<<<<< TREE
#: ../bin/duplicity:1583
+=======
+#: ../bin/duplicity:1595
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG error detail: %s"
msgstr "GPG-Fehlerdetail: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1593
+=======
+#: ../bin/duplicity:1605
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "User error detail: %s"
msgstr "Benutzerfehlerdetail: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1603
+=======
+#: ../bin/duplicity:1615
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backend error detail: %s"
msgstr "Fehlerdetail des Hintergrundprogramms: %s"
@@ -562,6 +826,7 @@
"entfernt.\n"
"Bitte verwenden Sie Standarddateinamen."
+<<<<<<< TREE
#: ../duplicity/commandline.py:78
#, python-format
msgid ""
@@ -592,6 +857,38 @@
"Ersatz verwendet werden."
#. TRANSL: Used in usage help to represent a Unix-style path name. Example:
+=======
+#: ../duplicity/commandline.py:78
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"--include-filelist and --exclude-filelist now accept globbing characters and "
+"should be used instead."
+msgstr ""
+"Achtung: Option %s ist überflüssig und wird in einer zukünftigen "
+"Veröffentlichung entfernt werden.\n"
+"--include-filelist und --exclude-filelist erlauben jetzt Platzhalter und "
+"sollten stattdessen verwendet werden."
+
+#: ../duplicity/commandline.py:88
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"On many GNU/Linux systems, stdin is represented by /dev/stdin and\n"
+"--include-filelist=/dev/stdin or --exclude-filelist=/dev/stdin could\n"
+"be used as a substitute."
+msgstr ""
+"Achtung: Option %s ist überflüssig und wird in einer zukünftigen "
+"Veröffentlichung entfernt werden.\n"
+"Auf vielen GNU/Linuxsystemen wird die Standardeingabe durch »/dev/stdin« "
+"dargestellt und\n"
+"--include-filelist=/dev/stdin oder --exclude-filelist=/dev/stdin könnte als "
+"Ersatz verwendet werden."
+
+#. Used in usage help to represent a Unix-style path name. Example:
+>>>>>>> MERGE-SOURCE
#. --archive-dir <path>
#: ../duplicity/commandline.py:280 ../duplicity/commandline.py:290
#: ../duplicity/commandline.py:311 ../duplicity/commandline.py:385
@@ -630,8 +927,13 @@
msgid "filename"
msgstr "Dateiname"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent a regular expression (regexp).
#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+=======
+#. Used in usage help to represent a regular expression (regexp).
+#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+>>>>>>> MERGE-SOURCE
msgid "regular_expression"
msgstr "regulärer Ausdruck"
@@ -661,8 +963,13 @@
"»Fehler vernachlässigen«-Modus läuft gerade, aufgrund von %s; bitte "
"überprüfen wenn das nicht beabsichtigt war"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent an imap mailbox
#: ../duplicity/commandline.py:432
+=======
+#. Used in usage help to represent an imap mailbox
+#: ../duplicity/commandline.py:432
+>>>>>>> MERGE-SOURCE
msgid "imap_mailbox"
msgstr "IMAP-Postfach"
@@ -681,11 +988,17 @@
msgid "number"
msgstr "Zahl"
+<<<<<<< TREE
#. TRANSL: Used in usage help (noun)
#: ../duplicity/commandline.py:464
+=======
+#. Used in usage help (noun)
+#: ../duplicity/commandline.py:464
+>>>>>>> MERGE-SOURCE
msgid "backup name"
msgstr "Sicherungsname"
+<<<<<<< TREE
#: ../duplicity/commandline.py:567
msgid "policy"
msgstr ""
@@ -693,6 +1006,11 @@
#. TRANSL: noun
#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
#: ../duplicity/commandline.py:768
+=======
+#. noun
+#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
+#: ../duplicity/commandline.py:768
+>>>>>>> MERGE-SOURCE
msgid "command"
msgstr "Befehl"
@@ -704,6 +1022,7 @@
msgid "pem formatted bundle of certificate authorities"
msgstr "PEM-formatiertes Paket von Zertifizierungsstellen"
+<<<<<<< TREE
#: ../duplicity/commandline.py:591
msgid "path to a folder with certificate authority files"
msgstr ""
@@ -716,11 +1035,30 @@
#. --timeout <seconds>
#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
#: ../duplicity/commandline.py:831
+=======
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr "Pfad zu einem Verzeichnis mit Dateien der Zertifizierungsstellen"
+
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#. Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+>>>>>>> MERGE-SOURCE
msgid "seconds"
msgstr "Sekunden"
+<<<<<<< TREE
#. TRANSL: abbreviation for "character" (noun)
#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+=======
+#. abbreviation for "character" (noun)
+#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+>>>>>>> MERGE-SOURCE
msgid "char"
msgstr "Zeichen"
@@ -769,13 +1107,23 @@
msgid "container_name"
msgstr "Containername"
+<<<<<<< TREE
#. TRANSL: noun
#: ../duplicity/commandline.py:776
+=======
+#. noun
+#: ../duplicity/commandline.py:776
+>>>>>>> MERGE-SOURCE
msgid "count"
msgstr "Anzahl"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent the name of a file directory
#: ../duplicity/commandline.py:779
+=======
+#. Used in usage help to represent the name of a file directory
+#: ../duplicity/commandline.py:779
+>>>>>>> MERGE-SOURCE
msgid "directory"
msgstr "Verzeichnis"
@@ -859,6 +1207,7 @@
#. ftp://user[:password]@other.host[:port]/some_dir
#: ../duplicity/commandline.py:874
msgid "user"
+<<<<<<< TREE
msgstr "Benutzer"
#. TRANSL: account id for b2. Example: b2://account_id@bucket/
@@ -874,18 +1223,39 @@
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:899
+=======
+msgstr "Benutzer"
+
+#. account id for b2. Example: b2://account_id@bucket/
+#: ../duplicity/commandline.py:877
+msgid "account_id"
+msgstr "Kontokennung"
+
+#. application_key for b2.
+#. Example: b2://account_id:application_key@bucket/
+#: ../duplicity/commandline.py:881
+msgid "application_key"
+msgstr "Anwendungsschlüssel"
+
+#. Header in usage help
+#: ../duplicity/commandline.py:899
+>>>>>>> MERGE-SOURCE
msgid "Backends and their URL formats:"
msgstr "Hintergrundprogramme und deren Adressformate:"
+<<<<<<< TREE
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:930
+=======
+#. Header in usage help
+#: ../duplicity/commandline.py:930
+>>>>>>> MERGE-SOURCE
msgid "Commands:"
msgstr "Befehle:"
#: ../duplicity/commandline.py:954
#, python-format
-msgid ""
-"Specified archive directory '%s' does not exist, or is not a directory"
+msgid "Specified archive directory '%s' does not exist, or is not a directory"
msgstr ""
"Das angegebene Archivverzeichnis »%s« besteht nicht oder ist kein Verzeichnis"
@@ -931,12 +1301,21 @@
"Die Optionen --exclude/--include funktionieren\n"
"im Moment nur bei der Sicherung, nicht bei der Wiederherstellung."
+<<<<<<< TREE
#: ../duplicity/commandline.py:1101
#, python-format
msgid "GPG binary is %s, version %s"
msgstr ""
#: ../duplicity/commandline.py:1129
+=======
+#: ../duplicity/commandline.py:1101
+#, python-format
+msgid "GPG binary is %s, version %s"
+msgstr "Die GPG Programmdatei ist %s, Version %s"
+
+#: ../duplicity/commandline.py:1129
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Bad URL '%s'.\n"
@@ -1070,22 +1449,41 @@
msgstr ""
"Kritischer Fehler: Weder das entfernte noch das lokale Manifest ist lesbar."
-#: ../duplicity/collections.py:225
-#, python-format
-msgid "Processing local manifest %s (%s)"
-msgstr ""
-
-#: ../duplicity/collections.py:237
-#, python-format
-msgid "Error processing remote manifest (%s): %s"
-msgstr ""
-
-#: ../duplicity/collections.py:240
-#, python-format
-msgid "Processing remote manifest %s (%s)"
-msgstr ""
-
-#: ../duplicity/collections.py:323
+<<<<<<< TREE
+#: ../duplicity/collections.py:225
+#, python-format
+msgid "Processing local manifest %s (%s)"
+msgstr ""
+
+#: ../duplicity/collections.py:237
+#, python-format
+msgid "Error processing remote manifest (%s): %s"
+msgstr ""
+
+#: ../duplicity/collections.py:240
+#, python-format
+msgid "Processing remote manifest %s (%s)"
+msgstr ""
+
+#: ../duplicity/collections.py:323
+=======
+#: ../duplicity/collections.py:225
+#, python-format
+msgid "Processing local manifest %s (%s)"
+msgstr "Verarbeitung des lokalen Manifest %s (%s)"
+
+#: ../duplicity/collections.py:237
+#, python-format
+msgid "Error processing remote manifest (%s): %s"
+msgstr "Fehler beim Verarbeiten des entfernten Manifest (%s): %s"
+
+#: ../duplicity/collections.py:240
+#, python-format
+msgid "Processing remote manifest %s (%s)"
+msgstr "Verarbeitung des entfernten Manifest %s (%s)"
+
+#: ../duplicity/collections.py:323
+>>>>>>> MERGE-SOURCE
msgid "Preferring Backupset over previous one!"
msgstr "Sicherungssatz wird dem Vorherigen vorgezogen!"
@@ -1200,6 +1598,7 @@
msgstr[0] "und %d unvollständigen Sicherungssatz."
msgstr[1] "und %d unvollständige Sicherungssätze."
+<<<<<<< TREE
#. TRANSL: "cleanup" is a hard-coded command, so do not translate it
#: ../duplicity/collections.py:666
msgid ""
@@ -1209,6 +1608,16 @@
"starten."
#: ../duplicity/collections.py:669
+=======
+#. "cleanup" is a hard-coded command, so do not translate it
+#: ../duplicity/collections.py:666
+msgid "These may be deleted by running duplicity with the \"cleanup\" command."
+msgstr ""
+"Sie können diese entfernen, indem Sie duplicity mit dem »cleanup«-Befehl "
+"starten."
+
+#: ../duplicity/collections.py:669
+>>>>>>> MERGE-SOURCE
msgid "No orphaned or incomplete backup sets found."
msgstr "Keine verwaisten oder unvollständigen Sicherungssätze gefunden."
@@ -1226,9 +1635,14 @@
msgstr[0] "%d Datei besteht im Puffer"
msgstr[1] "%d Dateien besteht im Puffer"
+<<<<<<< TREE
#: ../duplicity/collections.py:748
msgid ""
"Warning, discarding last backup set, because of missing signature file."
+=======
+#: ../duplicity/collections.py:748
+msgid "Warning, discarding last backup set, because of missing signature file."
+>>>>>>> MERGE-SOURCE
msgstr ""
"Achtung, der letzte Sicherungssatz wird verworfen, weil die Signaturdatei "
"fehlt."
@@ -1314,6 +1728,7 @@
"No signature chain for the requested time. Using oldest available chain, "
"starting at time %s."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:1235
#, python-format
@@ -1328,6 +1743,10 @@
#: ../duplicity/collections.py:1237
msgid "Type of file change:"
msgstr "Art der Dateiänderung:"
+=======
+"Keine Signaturkette für die angeforderte Zeit. Nutze die älteste verfügbare "
+"Kette, starte bei der Zeit %s."
+>>>>>>> MERGE-SOURCE
#: ../duplicity/robust.py:61
#, python-format
@@ -1384,6 +1803,7 @@
msgid "Connection failed, please check your password: %s"
msgstr "Verbindung fehlgeschlagen, bitte Passwort prüfen: %s"
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:85
#, python-format
msgid "MultiBackend: Could not parse query string %s: %s "
@@ -1646,6 +2066,276 @@
"basis_file must be a (true) file or an object whose file attribute is the "
"underlying true file object"
msgstr ""
+=======
+#: ../duplicity/backends/multibackend.py:85
+#, python-format
+msgid "MultiBackend: Could not parse query string %s: %s "
+msgstr "MultiBackend: Konnte den angefragten String %s nicht auswerten: %s "
+
+#: ../duplicity/backends/multibackend.py:94
+#, python-format
+msgid "MultiBackend: Invalid query string %s: more than one value for %s"
+msgstr ""
+"MultiBackend: angefragter String %s ist nicht gültig: mehr als einen Wert "
+"für %s"
+
+#: ../duplicity/backends/multibackend.py:99
+#, python-format
+msgid "MultiBackend: Invalid query string %s: unknown parameter %s"
+msgstr ""
+"MultiBackend: angefragter String %s ist nicht gültig: unbekannter Parameter "
+"%s"
+
+#: ../duplicity/backends/multibackend.py:149
+#: ../duplicity/backends/multibackend.py:154
+#, python-format
+msgid "MultiBackend: illegal value for %s: %s"
+msgstr "MultiBackend: nicht erlaubter Wert für %s: %s"
+
+#: ../duplicity/backends/multibackend.py:162
+#, python-format
+msgid "MultiBackend: Url %s"
+msgstr "MehrfachHintergrundprogramm: Adresse %s"
+
+#: ../duplicity/backends/multibackend.py:166
+#, python-format
+msgid "MultiBackend: Could not load config file %s: %s "
+msgstr ""
+"MehrfachHintergrundprogramm: Konfigurationsdatei konnte nicht geladen werden "
+"%s: %s "
+
+#: ../duplicity/backends/multibackend.py:175
+#, python-format
+msgid "MultiBackend: use store %s"
+msgstr "MehrfachHintergrundprogramm: Speicher %s benutzen"
+
+#: ../duplicity/backends/multibackend.py:180
+#, python-format
+msgid "MultiBackend: set env %s = %s"
+msgstr "MehrfachHintergrundprogramm: env %s = %s einstellen"
+
+#: ../duplicity/backends/multibackend.py:206
+#, python-format
+msgid "MultiBackend: _put: write to store #%s (%s)"
+msgstr "MehrfachHintergrundprogramm: _put: Zum Speicher schreiben #%s (%s)"
+
+#: ../duplicity/backends/multibackend.py:219
+#, python-format
+msgid "MultiBackend: failed to write to store #%s (%s), try #%s, Exception: %s"
+msgstr ""
+"MehrfachHintergrundprogramm: Es konnte nicht zum Speicher geschrieben werden "
+"#%s (%s), bitte #%s versuchen, Ausnahmefall: %s"
+
+#: ../duplicity/backends/multibackend.py:226
+#, python-format
+msgid "MultiBackend: failed to write %s. Aborting process."
+msgstr ""
+"MehrfachHintergrundprogramm: Schreiben von %s ist fehlgeschlagen. Vorgang "
+"wird abgebrochen."
+
+#: ../duplicity/backends/multibackend.py:233
+#, python-format
+msgid ""
+"MultiBackend: failed to write %s. Tried all backing stores and none succeeded"
+msgstr ""
+"MehrfachHintergrundprogramm: %s konnte nicht geschrieben werden. Es wurden "
+"alle Hintergrundspeicher versucht, aber ohne Erfolg"
+
+#: ../duplicity/backends/multibackend.py:250
+#, python-format
+msgid "MultiBackend: failed to get %s to %s from %s"
+msgstr "MehrfachHintergrundprogramm: %s konnte nicht zu %s von %s gelangen"
+
+#: ../duplicity/backends/multibackend.py:253
+#, python-format
+msgid ""
+"MultiBackend: failed to get %s. Tried all backing stores and none succeeded"
+msgstr ""
+"MehrfachHintergrundprogramm: %s konnte nicht erhalten werden. Es wurden alle "
+"Hintergrundspeicher versucht, aber ohne Erfolg"
+
+#: ../duplicity/backends/multibackend.py:262
+#, python-format
+msgid "MultiBackend: list from %s: %s"
+msgstr "MehrfachHintergrundprogramm: Liste von %s: %s"
+
+#: ../duplicity/backends/multibackend.py:268
+#, python-format
+msgid "MultiBackend: combined list: %s"
+msgstr "MehrfachHintergrundprogramm: kombinierte Liste: %s"
+
+#: ../duplicity/backends/multibackend.py:290
+#, python-format
+msgid "MultiBackend: failed to delete %s from %s"
+msgstr "MehrfachHintergrundprogramm: %s konnte nicht von %s gelöscht werden"
+
+#: ../duplicity/backends/multibackend.py:294
+#, python-format
+msgid ""
+"MultiBackend: failed to delete %s. Tried all backing stores and none "
+"succeeded"
+msgstr ""
+"MehrfachHintergrundprogramm: %s konnte nicht gelöscht werden. Es wurden alle "
+"Hintergrundspeicher versucht, aber ohne Erfolg"
+
+#: ../duplicity/backends/pydrivebackend.py:143
+#, python-format
+msgid "PyDrive backend: multiple files called '%s'."
+msgstr "PyDrive-Hintergrundprogramm: mehrere Dateien aufgerufen »%s«."
+
+#: ../duplicity/backends/webdavbackend.py:61
+msgid "Missing socket or ssl python modules."
+msgstr "Es fehlt ein Socket oder ein SSL Python Modul."
+
+#: ../duplicity/backends/webdavbackend.py:79
+#, python-format
+msgid "Cacert database file '%s' is not readable."
+msgstr "Die Cacert Datenbankdatei '%s' ist nicht lesbar."
+
+#: ../duplicity/backends/webdavbackend.py:100
+msgid ""
+"Option '--ssl-cacert-path' is not supported with python 2.7.8 and below."
+msgstr ""
+"Die Option '--ssl-cacert-path' wird von Python 2.7.8 oder früher nicht "
+"unterstützt."
+
+#: ../duplicity/backends/webdavbackend.py:104
+#, python-format
+msgid ""
+"For certificate verification with python 2.7.8 or earlier a cacert database\n"
+"file is needed in one of these locations: %s\n"
+"Hints:\n"
+" Consult the man page, chapter 'SSL Certificate Verification'.\n"
+" Consider using the options --ssl-cacert-file, --ssl-no-check-certificate ."
+msgstr ""
+"Für zertifizierte Verifikation mit Phyton 2.7.8 oder früher ist eine Cacert "
+"Datenbankdatei\n"
+"an einer dieser Stellen notwendig: %s\n"
+"Hinweise:\n"
+" Lesen Sie die Hilfeseiten, im Kapitel 'SSL Certificate Verification'.\n"
+" Prüfen Sie die Optionen --ssl-cacert-file, --ssl-no-check-certificate ."
+
+#: ../duplicity/backends/webdavbackend.py:150
+#, python-format
+msgid "Using WebDAV protocol %s"
+msgstr "WebDAV-Protokol %s wird verwendet"
+
+#: ../duplicity/backends/webdavbackend.py:151
+#, python-format
+msgid "Using WebDAV host %s port %s"
+msgstr "WebDAV-Rechner %s Anschluss (Port) %s wird verwendet"
+
+#: ../duplicity/backends/webdavbackend.py:153
+#, python-format
+msgid "Using WebDAV directory %s"
+msgstr "WebDAV-Verzeichnis %s wird verwendet"
+
+#: ../duplicity/backends/webdavbackend.py:184
+#, python-format
+msgid "WebDAV create connection on '%s'"
+msgstr "WebDAV erzeugt eine Verbindung unter '%s'"
+
+#: ../duplicity/backends/webdavbackend.py:195
+#, python-format
+msgid "WebDAV Unknown URI scheme: %s"
+msgstr "WebDAV unbekanntes URI Schema: %s"
+
+#: ../duplicity/backends/webdavbackend.py:214
+#, python-format
+msgid "WebDAV %s %s request with headers: %s "
+msgstr "WebDAV %s %s Anfrage mit Headern: %s "
+
+#: ../duplicity/backends/webdavbackend.py:215
+#: ../duplicity/backends/webdavbackend.py:238
+#, python-format
+msgid "WebDAV data length: %s "
+msgstr "WebDAV Datenlänge: %s "
+
+#: ../duplicity/backends/webdavbackend.py:218
+#, python-format
+msgid "WebDAV response status %s with reason '%s'."
+msgstr "WebDAV Antwortstatus %s mit dem Grund '%s'."
+
+#: ../duplicity/backends/webdavbackend.py:224
+#, python-format
+msgid "WebDAV redirect to: %s "
+msgstr "WebDAV weitersenden an: %s "
+
+#: ../duplicity/backends/webdavbackend.py:226
+msgid "WebDAV redirected 10 times. Giving up."
+msgstr "WebDAV leitete 10 mal um. Gebe auf."
+
+#: ../duplicity/backends/webdavbackend.py:231
+msgid "WebDAV missing location header in redirect response."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:236
+msgid "WebDAV retry request with authentification headers."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:237
+#, python-format
+msgid "WebDAV %s %s request2 with headers: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:241
+#, python-format
+msgid "WebDAV response2 status %s with reason '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:258
+msgid ""
+"python-kerberos needed to use kerberos "
+"authorization, falling back to basic auth."
+msgstr ""
+"python-kerberos benötigt Kerberos-Legitimierung, auf die Basislegitimierung "
+"wird zurückgegriffen."
+
+#: ../duplicity/backends/webdavbackend.py:262
+#, python-format
+msgid ""
+"Kerberos authorization failed: %s. Falling back to "
+"basic auth."
+msgstr ""
+"Kerberos-Legitimierung ist fehlgeschlagen: %s. Auf die Basislegitimierung "
+"wird zurückgegriffen."
+
+#: ../duplicity/backends/webdavbackend.py:360
+#, python-format
+msgid "Creating missing directory %s"
+msgstr "Fehlendes Verzeichnis »%s« wird erstellt"
+
+#: ../duplicity/backends/webdavbackend.py:364
+#, python-format
+msgid "WebDAV MKCOL %s failed: %s %s"
+msgstr "WebDAV MKCOL %s fehlgeschlagen: %s %s"
+
+#: ../duplicity/backends/webdavbackend.py:377
+#, python-format
+msgid "WebDAV path decoding and translation: %s -> %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:422
+#, python-format
+msgid "WebDAV GET Bad status code %s reason %s."
+msgstr "WebDAV GET Falscher Statuscode %s Grund %s."
+
+#: ../duplicity/backends/webdavbackend.py:444
+#, python-format
+msgid "WebDAV PUT Bad status code %s reason %s."
+msgstr "WebDAV PUT Falscher Statuscode %s Grund %s."
+
+#: ../duplicity/backends/webdavbackend.py:464
+#, python-format
+msgid "WebDAV DEL Bad status code %s reason %s."
+msgstr "WebDAV DEL Falscher Statuscode %s Grund %s."
+
+#: ../duplicity/librsync.py:184
+msgid ""
+"basis_file must be a (true) file or an object whose file attribute is the "
+"underlying true file object"
+msgstr ""
+>>>>>>> MERGE-SOURCE
#: ../duplicity/manifest.py:91
#, python-format
@@ -1681,6 +2371,7 @@
"Archivverzeichnis zu sichern. Wenn dies kein Fehler ist, verwenden Sie den "
"»allow-source-mismatch«-Parameter, um diese Meldung auszuschalten."
+<<<<<<< TREE
#: ../duplicity/manifest.py:192
#, python-format
msgid "Found manifest volume %s"
@@ -1698,6 +2389,19 @@
msgstr ""
#: ../duplicity/manifest.py:213
+=======
+#: ../duplicity/manifest.py:192
+#, python-format
+msgid "Found manifest volume %s"
+msgstr "Manifest-Volumen %s gefunden"
+
+#: ../duplicity/manifest.py:199
+#, python-format
+msgid "Found %s volumes in manifest"
+msgstr "%s Volumen in Manifest gefunden"
+
+#: ../duplicity/manifest.py:213
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because different volume numbers"
msgstr "Manifests sind ungleich aufgrund verschiedener Datenträgerzahlen"
@@ -1913,3 +2617,123 @@
#, python-format
msgid "Releasing lockfile %s"
msgstr "Sperrdatei »%s« wird freigegeben"
+<<<<<<< TREE
+=======
+
+#~ msgid "Found old backup set at the following time:"
+#~ msgid_plural "Found old backup sets at the following times:"
+#~ msgstr[0] "Alten Sicherungssatz zum folgenden Zeitpunkt gefunden:"
+#~ msgstr[1] "Alte Sicherungssätze zu den folgenden Zeitpunkten gefunden:"
+
+#~ msgid "Error closing filelist %s"
+#~ msgstr "Fehler beim Schließen der Dateiliste %s"
+
+#~ msgid "%s not found in archive, no files restored."
+#~ msgstr "%s im Archiv nicht gefunden, keine Dateien wiederhergestellt."
+
+#~ msgid ""
+#~ "Error is:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Fehler:\n"
+#~ "%s"
+
+#~ msgid "paramiko|pexpect"
+#~ msgstr "paramiko|pexpect"
+
+#~ msgid "Deleting backup set at time:"
+#~ msgid_plural "Deleting backup sets at times:"
+#~ msgstr[0] "Sicherungssatz löschen, zum Zeitpunkt:"
+#~ msgstr[1] "Sicherungssatz löschen, zu den Zeitpunkten:"
+
+#~ msgid "Deleting incremental signature chain %s"
+#~ msgstr "Schrittweise Signaturkette wird gelöscht: %s"
+
+#~ msgid "Deleting incremental backup chain %s"
+#~ msgstr "Schrittweise Sicherungskette wird gelöscht: %s"
+
+#~ msgid "Unable to load gio backend: %s"
+#~ msgstr "gio‐Hintergrundprogramm konnte nicht geladen werden: %s"
+
+#~ msgid ""
+#~ "Warning: Option %s is supported by ssh pexpect backend only and will be "
+#~ "ignored."
+#~ msgstr ""
+#~ "Achtung: Die Option %s wird nur vom ssh-pexpect-Hintergrundprogramm "
+#~ "unterstützt und wird vernachlässigt."
+
+#~ msgid ""
+#~ "Warning: Selected ssh backend '%s' is neither 'paramiko nor 'pexpect'. "
+#~ "Will use default paramiko instead."
+#~ msgstr ""
+#~ "Warnung: Ausgewähltes ssh-Hintergrundprogramm »%s« ist weder »paramiko« "
+#~ "noch »pexpect«. Stattdessen wird die Vorgabe »paramiko« verwendet."
+
+#~ msgid ""
+#~ "No signature chain for the requested time. Using oldest available chain, "
+#~ "starting at time %s."
+#~ msgstr ""
+#~ "Keine Signaturkette für den angeforderten Zeitpunkt. Älteste verfügbare "
+#~ "Kette mit Beginn %s wird benutzt."
+
+#~ msgid "Reading filelist %s"
+#~ msgstr "Dateiliste wird gelesen %s"
+
+#~ msgid "Sorting filelist %s"
+#~ msgstr "Dateiliste wird sortiert %s"
+
+#~ msgid ""
+#~ "Warning: file specification '%s' in filelist %s\n"
+#~ "doesn't start with correct prefix %s. Ignoring."
+#~ msgstr ""
+#~ "Achtung: Dateiangabe »%s« in Dateiliste %s\n"
+#~ "beginnt nicht mit dem richtigen Präfix %s. Es wird vernachlässigt."
+
+#~ msgid "Attempt %s failed: %s: %s"
+#~ msgstr "Versuch %s ist fehlgeschlagen: %s: %s"
+
+#~ msgid "Unable to load gio module"
+#~ msgstr "gio-Modul kann nicht geladen werden"
+
+#~ msgid ""
+#~ "Sign key should be an 8 character hex string, like 'AA0E73D2'.\n"
+#~ "Received '%s' instead."
+#~ msgstr ""
+#~ "Signierschlüssel sollte eine 8 Zeichen lange Hexadezimalzahl sein, wie "
+#~ "»AA0E73D2«.\n"
+#~ "Stattdessen wurde »%s« empfangen."
+
+#~ msgid "Future prefix errors will not be logged."
+#~ msgstr "Weitere Präfixfehler werden nicht protokolliert."
+
+#~ msgid "Starting to write %s"
+#~ msgstr "Mit Schreibvorgang von %s wird begonnen"
+
+#~ msgid "Giving up trying to execute '%s' after %d attempt"
+#~ msgid_plural "Giving up trying to execute '%s' after %d attempts"
+#~ msgstr[0] "Ausführung von »%s« nach dem %d. Versuch aufgegeben"
+#~ msgstr[1] "Ausführung von »%s« nach %d Versuchen aufgegeben"
+
+#~ msgid "Running '%s' failed with code %d (attempt #%d)"
+#~ msgid_plural "Running '%s' failed with code %d (attempt #%d)"
+#~ msgstr[0] ""
+#~ "Ausführung von »%s« ist mit Code %d ist fehlgeschlagen (Versuch #%d)"
+#~ msgstr[1] ""
+#~ "Ausführung von »%s« ist mit Code %d ist fehlgeschlagen (Versuch #%d)"
+
+#~ msgid ""
+#~ "One only volume required.\n"
+#~ "Renaming %s to %s"
+#~ msgstr ""
+#~ "Es wird nur ein Datenträger benötigt.\n"
+#~ "%s wird zu %s umbenannt."
+
+#~ msgid "File: %s"
+#~ msgstr "Datei: %s"
+
+#~ msgid "Total number of backup: %d"
+#~ msgstr "Gesamtzahl an Sicherungen: %d"
+
+#~ msgid "Type of file change:"
+#~ msgstr "Art der Dateiänderung:"
+>>>>>>> MERGE-SOURCE
=== modified file 'po/duplicity.pot'
--- po/duplicity.pot 2019-02-22 20:25:02 +0000
+++ po/duplicity.pot 2019-03-04 12:09:45 +0000
@@ -8,7 +8,11 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+<<<<<<< TREE
"POT-Creation-Date: 2019-02-22 13:13-0600\n"
+=======
+"POT-Creation-Date: 2018-12-16 11:10-0600\n"
+>>>>>>> MERGE-SOURCE
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@xxxxxx>\n"
@@ -18,219 +22,354 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+<<<<<<< TREE
#: ../bin/duplicity:128
+=======
+#: ../bin/duplicity:124
+>>>>>>> MERGE-SOURCE
msgid "Reuse configured PASSPHRASE as SIGN_PASSPHRASE"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:135
+=======
+#: ../bin/duplicity:131
+>>>>>>> MERGE-SOURCE
msgid "Reuse configured SIGN_PASSPHRASE as PASSPHRASE"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:174
+=======
+#: ../bin/duplicity:170
+>>>>>>> MERGE-SOURCE
msgid "PASSPHRASE variable not set, asking user."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:189
+=======
+#: ../bin/duplicity:185
+>>>>>>> MERGE-SOURCE
msgid "GnuPG passphrase for signing key:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:194
+=======
+#: ../bin/duplicity:190
+>>>>>>> MERGE-SOURCE
msgid "GnuPG passphrase:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:199
+=======
+#: ../bin/duplicity:195
+>>>>>>> MERGE-SOURCE
msgid "Retype passphrase for signing key to confirm: "
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:201
+=======
+#: ../bin/duplicity:197
+>>>>>>> MERGE-SOURCE
msgid "Retype passphrase to confirm: "
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:204
+=======
+#: ../bin/duplicity:200
+>>>>>>> MERGE-SOURCE
msgid "First and second passphrases do not match! Please try again."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:211
+=======
+#: ../bin/duplicity:207
+>>>>>>> MERGE-SOURCE
msgid ""
"Cannot use empty passphrase with symmetric encryption! Please try again."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:268
+=======
+#: ../bin/duplicity:264
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"File %s complete in backup set.\n"
"Continuing restart on file %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:277
+=======
+#: ../bin/duplicity:273
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"File %s missing in backup set.\n"
"Continuing restart on file %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:326
+=======
+#: ../bin/duplicity:329
+#, python-format
+msgid "Remote filesize %d for %s does not match local size %d, retrying."
+msgstr ""
+
+#: ../bin/duplicity:336
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s was corrupted during upload."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:359
+=======
+#: ../bin/duplicity:369
+>>>>>>> MERGE-SOURCE
msgid ""
"Restarting backup, but current encryption settings do not match original "
"settings"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:382
+=======
+#: ../bin/duplicity:392
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Restarting after volume %s, file %s, block %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:452
+=======
+#: ../bin/duplicity:462
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:602
+=======
+#: ../bin/duplicity:611
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:606
+=======
+#: ../bin/duplicity:615
+>>>>>>> MERGE-SOURCE
msgid "No signatures found, switching to full backup."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:620
+=======
+#: ../bin/duplicity:629
+>>>>>>> MERGE-SOURCE
msgid "Backup Statistics"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:726
#, python-format
msgid "%s not found in archive - no files restored."
msgstr ""
#: ../bin/duplicity:730
+=======
+#: ../bin/duplicity:735
+#, python-format
+msgid "%s not found in archive - no files restored."
+msgstr ""
+
+#: ../bin/duplicity:739
+>>>>>>> MERGE-SOURCE
msgid "No files found in archive - nothing restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:763
+=======
+#: ../bin/duplicity:772
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d of %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:797
+=======
+#: ../bin/duplicity:806
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Invalid data - %s hash mismatch for file:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:800
+=======
+#: ../bin/duplicity:809
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Calculated hash: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:801
+=======
+#: ../bin/duplicity:810
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Manifest hash: %s"
msgstr ""
-#: ../bin/duplicity:844
+#: ../bin/duplicity:853
#, python-format
msgid "Volume was signed by key %s, not %s"
msgstr ""
-#: ../bin/duplicity:876
+#: ../bin/duplicity:885
#, python-format
msgid "Verify complete: %s, %s."
msgstr ""
-#: ../bin/duplicity:877
+#: ../bin/duplicity:886
#, python-format
msgid "%d file compared"
msgid_plural "%d files compared"
msgstr[0] ""
msgstr[1] ""
-#: ../bin/duplicity:879
+#: ../bin/duplicity:888
#, python-format
msgid "%d difference found"
msgid_plural "%d differences found"
msgstr[0] ""
msgstr[1] ""
-#: ../bin/duplicity:898
+#: ../bin/duplicity:907
msgid "No extraneous files found, nothing deleted in cleanup."
msgstr ""
-#: ../bin/duplicity:903
+#: ../bin/duplicity:912
msgid "Deleting this file from backend:"
msgid_plural "Deleting these files from backend:"
msgstr[0] ""
msgstr[1] ""
-#: ../bin/duplicity:914
+#: ../bin/duplicity:923
msgid "Found the following file to delete:"
msgid_plural "Found the following files to delete:"
msgstr[0] ""
msgstr[1] ""
-#: ../bin/duplicity:917
+#: ../bin/duplicity:926
msgid "Run duplicity again with the --force option to actually delete."
msgstr ""
-#: ../bin/duplicity:960
+#: ../bin/duplicity:969
msgid "There are backup set(s) at time(s):"
msgstr ""
-#: ../bin/duplicity:962
+#: ../bin/duplicity:971
msgid "Which can't be deleted because newer sets depend on them."
msgstr ""
-#: ../bin/duplicity:966
+#: ../bin/duplicity:975
msgid ""
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:979
+=======
+#: ../bin/duplicity:988
+>>>>>>> MERGE-SOURCE
msgid "No old backup sets found, nothing deleted."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:982
+=======
+#: ../bin/duplicity:991
+>>>>>>> MERGE-SOURCE
msgid "Deleting backup chain at time:"
msgid_plural "Deleting backup chains at times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:994
+=======
+#: ../bin/duplicity:1003
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting any incremental signature chain rooted at %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:996
+=======
+#: ../bin/duplicity:1005
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting any incremental backup chain rooted at %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:999
+=======
+#: ../bin/duplicity:1008
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete signature chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1001
+=======
+#: ../bin/duplicity:1010
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete backup chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1007
+=======
+#: ../bin/duplicity:1016
+>>>>>>> MERGE-SOURCE
msgid "Found old backup chain at the following time:"
msgid_plural "Found old backup chains at the following times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:1011
+=======
+#: ../bin/duplicity:1020
+>>>>>>> MERGE-SOURCE
msgid "Rerun command with --force option to actually delete."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1034
msgid "No old backup sets found."
msgstr ""
@@ -251,80 +390,143 @@
msgstr ""
#: ../bin/duplicity:1204
+=======
+#: ../bin/duplicity:1097
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting local %s (not authoritative at backend)."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1209
+=======
+#: ../bin/duplicity:1102
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Unable to delete %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1243 ../duplicity/dup_temp.py:267
+=======
+#: ../bin/duplicity:1133 ../duplicity/dup_temp.py:266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Failed to read %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1257
+=======
+#: ../bin/duplicity:1147
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Copying %s to local cache."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1305
+=======
+#: ../bin/duplicity:1195
+>>>>>>> MERGE-SOURCE
msgid "Local and Remote metadata are synchronized, no sync needed."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1310
+=======
+#: ../bin/duplicity:1200
+>>>>>>> MERGE-SOURCE
msgid "Synchronizing remote metadata to local cache..."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1322
+=======
+#: ../bin/duplicity:1212
+>>>>>>> MERGE-SOURCE
msgid "Sync would copy the following from remote to local:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1325
+=======
+#: ../bin/duplicity:1215
+>>>>>>> MERGE-SOURCE
msgid "Sync would remove the following spurious local files:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1369
+=======
+#: ../bin/duplicity:1258
+>>>>>>> MERGE-SOURCE
msgid "Unable to get free space on temp."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1377
+=======
+#: ../bin/duplicity:1266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp space has %d available, backup needs approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1380
+=======
+#: ../bin/duplicity:1269
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp has %d available, backup will use approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1388
+=======
+#: ../bin/duplicity:1277
+>>>>>>> MERGE-SOURCE
msgid "Unable to get max open files."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1392
+=======
+#: ../bin/duplicity:1281
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Max open files of %s is too low, should be >= 1024.\n"
"Use 'ulimit -n 1024' or higher to correct.\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1444
+=======
+#: ../bin/duplicity:1332
+>>>>>>> MERGE-SOURCE
msgid ""
"RESTART: The first volume failed to upload before termination.\n"
" Restart is impossible...starting backup from beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1450
+=======
+#: ../bin/duplicity:1338
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Volumes %d to %d failed to upload before termination.\n"
" Restarting backup at volume %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1457
+=======
+#: ../bin/duplicity:1345
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
@@ -333,7 +535,11 @@
" backup then restart the backup from the beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1478
+=======
+#: ../bin/duplicity:1366
+>>>>>>> MERGE-SOURCE
msgid ""
"\n"
"PYTHONOPTIMIZE in the environment causes duplicity to fail to\n"
@@ -343,59 +549,107 @@
"See https://bugs.launchpad.net/duplicity/+bug/931175\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1501
+=======
+#: ../bin/duplicity:1389
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Acquiring lockfile %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1559
+=======
+#: ../bin/duplicity:1447
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Last %s backup left a partial set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1563
+=======
+#: ../bin/duplicity:1451
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Cleaning up previous partial %s backup set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1575
+=======
+#: ../bin/duplicity:1463
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1577
+=======
+#: ../bin/duplicity:1465
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date: none"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1580
+=======
+#: ../bin/duplicity:1467
+>>>>>>> MERGE-SOURCE
msgid "Last full backup is too old, forcing full backup"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1629
+=======
+#: ../bin/duplicity:1511
+>>>>>>> MERGE-SOURCE
msgid ""
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1698
+=======
+#: ../bin/duplicity:1580
+>>>>>>> MERGE-SOURCE
msgid "INT intercepted...exiting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1706
+=======
+#: ../bin/duplicity:1588
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1716
+=======
+#: ../bin/duplicity:1598
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "User error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1726
+=======
+#: ../bin/duplicity:1608
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backend error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/rdiffdir:63 ../duplicity/commandline.py:269
+=======
+#: ../bin/rdiffdir:61 ../duplicity/commandline.py:259
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Error opening file %s"
msgstr ""
@@ -415,8 +669,13 @@
msgid "Error initializing file %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/selection.py:129 ../duplicity/selection.py:154
#: ../duplicity/selection.py:463
+=======
+#: ../duplicity/selection.py:127 ../duplicity/selection.py:152
+#: ../duplicity/selection.py:459
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Error accessing possibly locked file %s"
msgstr ""
@@ -476,7 +735,11 @@
"This may not be what you intended"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:78
+=======
+#: ../duplicity/commandline.py:71
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Warning: Option %s is pending deprecation and will be removed in a future "
@@ -484,7 +747,11 @@
"Use of default filenames is strongly suggested."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:85
+=======
+#: ../duplicity/commandline.py:78
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Warning: Option %s is pending deprecation and will be removed in a future "
@@ -493,7 +760,11 @@
"should be used instead."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:95
+=======
+#: ../duplicity/commandline.py:88
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Warning: Option %s is pending deprecation and will be removed in a future "
@@ -505,10 +776,17 @@
#. Used in usage help to represent a Unix-style path name. Example:
#. --archive-dir <path>
+<<<<<<< TREE
#: ../duplicity/commandline.py:290 ../duplicity/commandline.py:300
#: ../duplicity/commandline.py:321 ../duplicity/commandline.py:395
#: ../duplicity/commandline.py:413 ../duplicity/commandline.py:634
#: ../duplicity/commandline.py:667 ../duplicity/commandline.py:866
+=======
+#: ../duplicity/commandline.py:280 ../duplicity/commandline.py:290
+#: ../duplicity/commandline.py:311 ../duplicity/commandline.py:385
+#: ../duplicity/commandline.py:403 ../duplicity/commandline.py:595
+#: ../duplicity/commandline.py:814
+>>>>>>> MERGE-SOURCE
msgid "path"
msgstr ""
@@ -518,9 +796,15 @@
#. --hidden-encrypt-key <gpg_key_id>
#. Used in usage help to represent an ID for a GnuPG key. Example:
#. --encrypt-key <gpg_key_id>
+<<<<<<< TREE
#: ../duplicity/commandline.py:316 ../duplicity/commandline.py:323
#: ../duplicity/commandline.py:419 ../duplicity/commandline.py:618
#: ../duplicity/commandline.py:839
+=======
+#: ../duplicity/commandline.py:306 ../duplicity/commandline.py:313
+#: ../duplicity/commandline.py:409 ../duplicity/commandline.py:579
+#: ../duplicity/commandline.py:787
+>>>>>>> MERGE-SOURCE
msgid "gpg-key-id"
msgstr ""
@@ -528,43 +812,74 @@
#. matching one or more files, as described in the documentation.
#. Example:
#. --exclude <shell_pattern>
+<<<<<<< TREE
#: ../duplicity/commandline.py:331 ../duplicity/commandline.py:444
#: ../duplicity/commandline.py:889
+=======
+#: ../duplicity/commandline.py:321 ../duplicity/commandline.py:434
+#: ../duplicity/commandline.py:837
+>>>>>>> MERGE-SOURCE
msgid "shell_pattern"
msgstr ""
#. Used in usage help to represent the name of a file. Example:
#. --log-file <filename>
+<<<<<<< TREE
#: ../duplicity/commandline.py:337 ../duplicity/commandline.py:346
#: ../duplicity/commandline.py:353 ../duplicity/commandline.py:446
#: ../duplicity/commandline.py:453 ../duplicity/commandline.py:466
#: ../duplicity/commandline.py:835
+=======
+#: ../duplicity/commandline.py:327 ../duplicity/commandline.py:336
+#: ../duplicity/commandline.py:343 ../duplicity/commandline.py:436
+#: ../duplicity/commandline.py:443 ../duplicity/commandline.py:456
+#: ../duplicity/commandline.py:783
+>>>>>>> MERGE-SOURCE
msgid "filename"
msgstr ""
#. Used in usage help to represent a regular expression (regexp).
+<<<<<<< TREE
#: ../duplicity/commandline.py:360 ../duplicity/commandline.py:457
+=======
+#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+>>>>>>> MERGE-SOURCE
msgid "regular_expression"
msgstr ""
#. Used in usage help to represent a time spec for a previous
#. point in time, as described in the documentation. Example:
#. duplicity remove-older-than time [options] target_url
+<<<<<<< TREE
#: ../duplicity/commandline.py:364 ../duplicity/commandline.py:407
#: ../duplicity/commandline.py:528 ../duplicity/commandline.py:921
+=======
+#: ../duplicity/commandline.py:354 ../duplicity/commandline.py:397
+#: ../duplicity/commandline.py:518 ../duplicity/commandline.py:869
+>>>>>>> MERGE-SOURCE
msgid "time"
msgstr ""
#. Used in usage help. (Should be consistent with the "Options:"
#. header.) Example:
#. duplicity [full|incremental] [options] source_dir target_url
+<<<<<<< TREE
#: ../duplicity/commandline.py:415 ../duplicity/commandline.py:508
#: ../duplicity/commandline.py:531 ../duplicity/commandline.py:626
#: ../duplicity/commandline.py:854
+=======
+#: ../duplicity/commandline.py:405 ../duplicity/commandline.py:498
+#: ../duplicity/commandline.py:521 ../duplicity/commandline.py:587
+#: ../duplicity/commandline.py:802
+>>>>>>> MERGE-SOURCE
msgid "options"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:430
+=======
+#: ../duplicity/commandline.py:420
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Running in 'ignore errors' mode due to %s; please re-consider if this was "
@@ -572,31 +887,52 @@
msgstr ""
#. Used in usage help to represent an imap mailbox
+<<<<<<< TREE
#: ../duplicity/commandline.py:442
+=======
+#: ../duplicity/commandline.py:432
+>>>>>>> MERGE-SOURCE
msgid "imap_mailbox"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:460
+=======
+#: ../duplicity/commandline.py:450
+>>>>>>> MERGE-SOURCE
msgid "file_descriptor"
msgstr ""
#. Used in usage help to represent a desired number of
#. something. Example:
#. --num-retries <number>
+<<<<<<< TREE
#: ../duplicity/commandline.py:471 ../duplicity/commandline.py:493
#: ../duplicity/commandline.py:505 ../duplicity/commandline.py:514
#: ../duplicity/commandline.py:558 ../duplicity/commandline.py:563
#: ../duplicity/commandline.py:567 ../duplicity/commandline.py:586
#: ../duplicity/commandline.py:592 ../duplicity/commandline.py:596
#: ../duplicity/commandline.py:662 ../duplicity/commandline.py:849
+=======
+#: ../duplicity/commandline.py:461 ../duplicity/commandline.py:483
+#: ../duplicity/commandline.py:495 ../duplicity/commandline.py:504
+#: ../duplicity/commandline.py:545 ../duplicity/commandline.py:550
+#: ../duplicity/commandline.py:554 ../duplicity/commandline.py:623
+#: ../duplicity/commandline.py:797
+>>>>>>> MERGE-SOURCE
msgid "number"
msgstr ""
#. Used in usage help (noun)
+<<<<<<< TREE
#: ../duplicity/commandline.py:474
+=======
+#: ../duplicity/commandline.py:464
+>>>>>>> MERGE-SOURCE
msgid "backup name"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:581
msgid "policy"
msgstr ""
@@ -605,21 +941,40 @@
msgid "Hot|Cool|Archive"
msgstr ""
+=======
+>>>>>>> MERGE-SOURCE
#. noun
+<<<<<<< TREE
#: ../duplicity/commandline.py:602 ../duplicity/commandline.py:605
#: ../duplicity/commandline.py:820
+=======
+#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
+#: ../duplicity/commandline.py:768
+>>>>>>> MERGE-SOURCE
msgid "command"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:608
+=======
+#: ../duplicity/commandline.py:569
+>>>>>>> MERGE-SOURCE
msgid "pyrax|cloudfiles"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:629
+=======
+#: ../duplicity/commandline.py:590
+>>>>>>> MERGE-SOURCE
msgid "pem formatted bundle of certificate authorities"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:630
+=======
+#: ../duplicity/commandline.py:591
+>>>>>>> MERGE-SOURCE
msgid "path to a folder with certificate authority files"
msgstr ""
@@ -629,113 +984,190 @@
#. --backend-retry-delay <seconds>
#. Used in usage help. Example:
#. --timeout <seconds>
+<<<<<<< TREE
#: ../duplicity/commandline.py:639 ../duplicity/commandline.py:673
#: ../duplicity/commandline.py:883
+=======
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+>>>>>>> MERGE-SOURCE
msgid "seconds"
msgstr ""
#. abbreviation for "character" (noun)
+<<<<<<< TREE
#: ../duplicity/commandline.py:645 ../duplicity/commandline.py:817
+=======
+#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+>>>>>>> MERGE-SOURCE
msgid "char"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:783
+=======
+#: ../duplicity/commandline.py:731
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Using archive dir: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:784
+=======
+#: ../duplicity/commandline.py:732
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Using backup name: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:791
+=======
+#: ../duplicity/commandline.py:739
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Command line error: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:792
+=======
+#: ../duplicity/commandline.py:740
+>>>>>>> MERGE-SOURCE
msgid "Enter 'duplicity --help' for help screen."
msgstr ""
#. Used in usage help to represent a Unix-style path name. Example:
#. rsync://user[:password]@other_host[:port]//absolute_path
+<<<<<<< TREE
#: ../duplicity/commandline.py:805
+=======
+#: ../duplicity/commandline.py:753
+>>>>>>> MERGE-SOURCE
msgid "absolute_path"
msgstr ""
#. Used in usage help. Example:
#. tahoe://alias/some_dir
+<<<<<<< TREE
#: ../duplicity/commandline.py:809
+=======
+#: ../duplicity/commandline.py:757
+>>>>>>> MERGE-SOURCE
msgid "alias"
msgstr ""
#. Used in help to represent a "bucket name" for Amazon Web
#. Services' Simple Storage Service (S3). Example:
#. s3://other.host/bucket_name[/prefix]
+<<<<<<< TREE
#: ../duplicity/commandline.py:814
+=======
+#: ../duplicity/commandline.py:762
+>>>>>>> MERGE-SOURCE
msgid "bucket_name"
msgstr ""
#. Used in usage help to represent the name of a container in
#. Amazon Web Services' Cloudfront. Example:
#. cf+http://container_name
+<<<<<<< TREE
#: ../duplicity/commandline.py:825
+=======
+#: ../duplicity/commandline.py:773
+>>>>>>> MERGE-SOURCE
msgid "container_name"
msgstr ""
#. noun
+<<<<<<< TREE
#: ../duplicity/commandline.py:828
+=======
+#: ../duplicity/commandline.py:776
+>>>>>>> MERGE-SOURCE
msgid "count"
msgstr ""
#. Used in usage help to represent the name of a file directory
+<<<<<<< TREE
#: ../duplicity/commandline.py:831
+=======
+#: ../duplicity/commandline.py:779
+>>>>>>> MERGE-SOURCE
msgid "directory"
msgstr ""
#. Used in usage help, e.g. to represent the name of a code
#. module. Example:
#. rsync://user[:password]@other.host[:port]::/module/some_dir
+<<<<<<< TREE
#: ../duplicity/commandline.py:844
+=======
+#: ../duplicity/commandline.py:792
+>>>>>>> MERGE-SOURCE
msgid "module"
msgstr ""
#. Used in usage help to represent an internet hostname. Example:
#. ftp://user[:password]@other.host[:port]/some_dir
+<<<<<<< TREE
#: ../duplicity/commandline.py:858
+=======
+#: ../duplicity/commandline.py:806
+>>>>>>> MERGE-SOURCE
msgid "other.host"
msgstr ""
#. Used in usage help. Example:
#. ftp://user[:password]@other.host[:port]/some_dir
+<<<<<<< TREE
#: ../duplicity/commandline.py:862
+=======
+#: ../duplicity/commandline.py:810
+>>>>>>> MERGE-SOURCE
msgid "password"
msgstr ""
#. Used in usage help to represent a TCP port number. Example:
#. ftp://user[:password]@other.host[:port]/some_dir
+<<<<<<< TREE
#: ../duplicity/commandline.py:870
+=======
+#: ../duplicity/commandline.py:818
+>>>>>>> MERGE-SOURCE
msgid "port"
msgstr ""
#. Used in usage help. This represents a string to be used as a
#. prefix to names for backup files created by Duplicity. Example:
#. s3://other.host/bucket_name[/prefix]
+<<<<<<< TREE
#: ../duplicity/commandline.py:875
+=======
+#: ../duplicity/commandline.py:823
+>>>>>>> MERGE-SOURCE
msgid "prefix"
msgstr ""
#. Used in usage help to represent a Unix-style path name. Example:
#. rsync://user[:password]@other.host[:port]/relative_path
+<<<<<<< TREE
#: ../duplicity/commandline.py:879
+=======
+#: ../duplicity/commandline.py:827
+>>>>>>> MERGE-SOURCE
msgid "relative_path"
msgstr ""
#. Used in usage help to represent the name of a single file
#. directory or a Unix-style path to a directory. Example:
#. file:///some_dir
+<<<<<<< TREE
#: ../duplicity/commandline.py:894
+=======
+#: ../duplicity/commandline.py:842
+>>>>>>> MERGE-SOURCE
msgid "some_dir"
msgstr ""
@@ -743,14 +1175,22 @@
#. directory or a Unix-style path to a directory where files will be
#. coming FROM. Example:
#. duplicity [full|incremental] [options] source_dir target_url
+<<<<<<< TREE
#: ../duplicity/commandline.py:900
+=======
+#: ../duplicity/commandline.py:848
+>>>>>>> MERGE-SOURCE
msgid "source_dir"
msgstr ""
#. Used in usage help to represent a URL files will be coming
#. FROM. Example:
#. duplicity [restore] [options] source_url target_dir
+<<<<<<< TREE
#: ../duplicity/commandline.py:905
+=======
+#: ../duplicity/commandline.py:853
+>>>>>>> MERGE-SOURCE
msgid "source_url"
msgstr ""
@@ -758,91 +1198,155 @@
#. directory or a Unix-style path to a directory. where files will be
#. going TO. Example:
#. duplicity [restore] [options] source_url target_dir
+<<<<<<< TREE
#: ../duplicity/commandline.py:911
+=======
+#: ../duplicity/commandline.py:859
+>>>>>>> MERGE-SOURCE
msgid "target_dir"
msgstr ""
#. Used in usage help to represent a URL files will be going TO.
#. Example:
#. duplicity [full|incremental] [options] source_dir target_url
+<<<<<<< TREE
#: ../duplicity/commandline.py:916
+=======
+#: ../duplicity/commandline.py:864
+>>>>>>> MERGE-SOURCE
msgid "target_url"
msgstr ""
#. Used in usage help to represent a user name (i.e. login).
#. Example:
#. ftp://user[:password]@other.host[:port]/some_dir
+<<<<<<< TREE
#: ../duplicity/commandline.py:926
+=======
+#: ../duplicity/commandline.py:874
+>>>>>>> MERGE-SOURCE
msgid "user"
msgstr ""
#. account id for b2. Example: b2://account_id@bucket/
+<<<<<<< TREE
#: ../duplicity/commandline.py:929
+=======
+#: ../duplicity/commandline.py:877
+>>>>>>> MERGE-SOURCE
msgid "account_id"
msgstr ""
#. application_key for b2.
#. Example: b2://account_id:application_key@bucket/
+<<<<<<< TREE
#: ../duplicity/commandline.py:933
+=======
+#: ../duplicity/commandline.py:881
+>>>>>>> MERGE-SOURCE
msgid "application_key"
msgstr ""
#. Header in usage help
+<<<<<<< TREE
#: ../duplicity/commandline.py:952
+=======
+#: ../duplicity/commandline.py:899
+>>>>>>> MERGE-SOURCE
msgid "Backends and their URL formats:"
msgstr ""
#. Header in usage help
+<<<<<<< TREE
#: ../duplicity/commandline.py:984
+=======
+#: ../duplicity/commandline.py:930
+>>>>>>> MERGE-SOURCE
msgid "Commands:"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1009
+=======
+#: ../duplicity/commandline.py:954
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Specified archive directory '%s' does not exist, or is not a directory"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1018
+=======
+#: ../duplicity/commandline.py:963
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Sign key should be an 8, 16 alt. 40 character hex string, like 'AA0E73D2'.\n"
"Received '%s' instead."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1078
+=======
+#: ../duplicity/commandline.py:1023
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Restore destination directory %s already exists.\n"
"Will not overwrite."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1083
+=======
+#: ../duplicity/commandline.py:1028
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Verify directory %s does not exist"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1089
+=======
+#: ../duplicity/commandline.py:1034
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backup source directory %s does not exist."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1120
+=======
+#: ../duplicity/commandline.py:1065
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Command line warning: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1120
+=======
+#: ../duplicity/commandline.py:1065
+>>>>>>> MERGE-SOURCE
msgid ""
"Selection options --exclude/--include\n"
"currently work only when backing up,not restoring."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1156
+=======
+#: ../duplicity/commandline.py:1101
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG binary is %s, version %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1183
+=======
+#: ../duplicity/commandline.py:1129
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Bad URL '%s'.\n"
@@ -850,7 +1354,11 @@
"\"file:///usr/local\". See the man page for more information."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:1213
+=======
+#: ../duplicity/commandline.py:1154
+>>>>>>> MERGE-SOURCE
msgid "Main action: "
msgstr ""
@@ -879,17 +1387,29 @@
msgid "Attempt %s failed. %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backend.py:493
+=======
+#: ../duplicity/backend.py:488
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Reading results of '%s'"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backend.py:519
+=======
+#: ../duplicity/backend.py:514
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Writing %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backend.py:560
+=======
+#: ../duplicity/backend.py:555
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s not found locally after get from backend"
msgstr ""
@@ -945,142 +1465,262 @@
msgid "Writing %s of type %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:178 ../duplicity/collections.py:192
+=======
+#: ../duplicity/collections.py:158 ../duplicity/collections.py:172
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "BackupSet.delete: missing %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:217
+=======
+#: ../duplicity/collections.py:197
+>>>>>>> MERGE-SOURCE
msgid "Fatal Error: No manifests found for most recent backup"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:226
+=======
+#: ../duplicity/collections.py:206
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Remote manifest does not match local one. Either the remote "
"backup set or the local archive directory has been corrupted."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:234
+=======
+#: ../duplicity/collections.py:214
+>>>>>>> MERGE-SOURCE
msgid "Fatal Error: Neither remote nor local manifest is readable."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:245
+=======
+#: ../duplicity/collections.py:225
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processing local manifest %s (%s)"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:257
+=======
+#: ../duplicity/collections.py:237
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Error processing remote manifest (%s): %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:260
+=======
+#: ../duplicity/collections.py:240
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processing remote manifest %s (%s)"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:356
+=======
+#: ../duplicity/collections.py:323
+>>>>>>> MERGE-SOURCE
msgid "Preferring Backupset over previous one!"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:359
+=======
+#: ../duplicity/collections.py:326
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Ignoring incremental Backupset (start_time: %s; needed: %s)"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:364
+=======
+#: ../duplicity/collections.py:331
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Added incremental Backupset (start_time: %s / end_time: %s)"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:434
+=======
+#: ../duplicity/collections.py:401
+>>>>>>> MERGE-SOURCE
msgid "Chain start time: "
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:435
+=======
+#: ../duplicity/collections.py:402
+>>>>>>> MERGE-SOURCE
msgid "Chain end time: "
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:436
+=======
+#: ../duplicity/collections.py:403
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Number of contained backup sets: %d"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:438
+=======
+#: ../duplicity/collections.py:405
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Total number of contained volumes: %d"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:440 ../duplicity/collections.py:1236
+=======
+#: ../duplicity/collections.py:407
+>>>>>>> MERGE-SOURCE
msgid "Type of backup set:"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:440 ../duplicity/collections.py:1236
+=======
+#: ../duplicity/collections.py:407
+>>>>>>> MERGE-SOURCE
msgid "Time:"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:440
+=======
+#: ../duplicity/collections.py:407
+>>>>>>> MERGE-SOURCE
msgid "Num volumes:"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:444 ../duplicity/collections.py:1242
+=======
+#: ../duplicity/collections.py:411
+>>>>>>> MERGE-SOURCE
msgid "Full"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:447 ../duplicity/collections.py:1244
+=======
+#: ../duplicity/collections.py:414
+>>>>>>> MERGE-SOURCE
msgid "Incremental"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:507
+=======
+#: ../duplicity/collections.py:474
+>>>>>>> MERGE-SOURCE
msgid "local"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:509
+=======
+#: ../duplicity/collections.py:476
+>>>>>>> MERGE-SOURCE
msgid "remote"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:664
+=======
+#: ../duplicity/collections.py:632
+>>>>>>> MERGE-SOURCE
msgid "Collection Status"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:666
+=======
+#: ../duplicity/collections.py:634
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Connecting with backend: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:668
+=======
+#: ../duplicity/collections.py:636
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Archive dir: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:671
+=======
+#: ../duplicity/collections.py:639
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Found %d secondary backup chain."
msgid_plural "Found %d secondary backup chains."
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:676
+=======
+#: ../duplicity/collections.py:644
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Secondary chain %d of %d:"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:682
+=======
+#: ../duplicity/collections.py:650
+>>>>>>> MERGE-SOURCE
msgid "Found primary backup chain with matching signature chain:"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:686
+=======
+#: ../duplicity/collections.py:654
+>>>>>>> MERGE-SOURCE
msgid "No backup chains with active signatures found"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:689
+=======
+#: ../duplicity/collections.py:657
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Also found %d backup set not part of any chain,"
msgid_plural "Also found %d backup sets not part of any chain,"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:693
+=======
+#: ../duplicity/collections.py:661
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "and %d incomplete backup set."
msgid_plural "and %d incomplete backup sets."
@@ -1088,101 +1728,174 @@
msgstr[1] ""
#. "cleanup" is a hard-coded command, so do not translate it
+<<<<<<< TREE
#: ../duplicity/collections.py:698
+=======
+#: ../duplicity/collections.py:666
+>>>>>>> MERGE-SOURCE
msgid "These may be deleted by running duplicity with the \"cleanup\" command."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:701
+=======
+#: ../duplicity/collections.py:669
+>>>>>>> MERGE-SOURCE
msgid "No orphaned or incomplete backup sets found."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:717
+=======
+#: ../duplicity/collections.py:685
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file exists on backend"
msgid_plural "%d files exist on backend"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:727
+=======
+#: ../duplicity/collections.py:695
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file exists in cache"
msgid_plural "%d files exist in cache"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:780
+=======
+#: ../duplicity/collections.py:748
+>>>>>>> MERGE-SOURCE
msgid "Warning, discarding last backup set, because of missing signature file."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:803
+=======
+#: ../duplicity/collections.py:771
+>>>>>>> MERGE-SOURCE
msgid "Warning, found the following local orphaned signature file:"
msgid_plural "Warning, found the following local orphaned signature files:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:812
+=======
+#: ../duplicity/collections.py:780
+>>>>>>> MERGE-SOURCE
msgid "Warning, found the following remote orphaned signature file:"
msgid_plural "Warning, found the following remote orphaned signature files:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:821
+=======
+#: ../duplicity/collections.py:789
+>>>>>>> MERGE-SOURCE
msgid "Warning, found signatures but no corresponding backup files"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:825
+=======
+#: ../duplicity/collections.py:793
+>>>>>>> MERGE-SOURCE
msgid ""
"Warning, found incomplete backup sets, probably left from aborted session"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:829
+=======
+#: ../duplicity/collections.py:797
+>>>>>>> MERGE-SOURCE
msgid "Warning, found the following orphaned backup file:"
msgid_plural "Warning, found the following orphaned backup files:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:846
+=======
+#: ../duplicity/collections.py:814
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Extracting backup chains from list of files: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:857
+=======
+#: ../duplicity/collections.py:825
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s is part of known set"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:860
+=======
+#: ../duplicity/collections.py:828
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s is not part of a known set; creating new set"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:865
+=======
+#: ../duplicity/collections.py:833
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Ignoring file (rejected by backup set) '%s'"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:881
+=======
+#: ../duplicity/collections.py:849
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Found backup chain %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:886
+=======
+#: ../duplicity/collections.py:854
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Added set %s to pre-existing chain %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:890
+=======
+#: ../duplicity/collections.py:858
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Found orphaned set %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:1040
+=======
+#: ../duplicity/collections.py:1012
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"No signature chain for the requested time. Using oldest available chain, "
"starting at time %s."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/collections.py:1234
#, python-format
msgid "File: %s"
@@ -1198,6 +1911,9 @@
msgstr ""
#: ../duplicity/robust.py:64
+=======
+#: ../duplicity/robust.py:61
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Error listing directory %s"
msgstr ""
@@ -1232,17 +1948,29 @@
msgid "D %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/lazy.py:352
+=======
+#: ../duplicity/lazy.py:334
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Warning: oldindex %s >= newindex %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/lazy.py:427
+=======
+#: ../duplicity/lazy.py:409
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Error '%s' processing %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/lazy.py:437
+=======
+#: ../duplicity/lazy.py:419
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Skipping %s because of previous error"
msgstr ""
@@ -1252,100 +1980,173 @@
msgid "Connection failed, please check your password: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:89
+=======
+#: ../duplicity/backends/multibackend.py:85
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: Could not parse query string %s: %s "
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:98
+=======
+#: ../duplicity/backends/multibackend.py:94
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: Invalid query string %s: more than one value for %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:103
+=======
+#: ../duplicity/backends/multibackend.py:99
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: Invalid query string %s: unknown parameter %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:153
#: ../duplicity/backends/multibackend.py:158
+=======
+#: ../duplicity/backends/multibackend.py:149
+#: ../duplicity/backends/multibackend.py:154
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: illegal value for %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:166
+=======
+#: ../duplicity/backends/multibackend.py:162
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: Url %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:170
+=======
+#: ../duplicity/backends/multibackend.py:166
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: Could not load config file %s: %s "
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:179
+=======
+#: ../duplicity/backends/multibackend.py:175
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: use store %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:184
+=======
+#: ../duplicity/backends/multibackend.py:180
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: set env %s = %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:197
#, python-format
msgid "Multibackend: register affinity for prefix %s"
msgstr ""
#: ../duplicity/backends/multibackend.py:238
+=======
+#: ../duplicity/backends/multibackend.py:206
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: _put: write to store #%s (%s)"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:251
+=======
+#: ../duplicity/backends/multibackend.py:219
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: failed to write to store #%s (%s), try #%s, Exception: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:258
+=======
+#: ../duplicity/backends/multibackend.py:226
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: failed to write %s. Aborting process."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:265
+=======
+#: ../duplicity/backends/multibackend.py:233
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"MultiBackend: failed to write %s. Tried all backing stores and none succeeded"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:284
+=======
+#: ../duplicity/backends/multibackend.py:250
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: failed to get %s to %s from %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:287
+=======
+#: ../duplicity/backends/multibackend.py:253
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"MultiBackend: failed to get %s. Tried all backing stores and none succeeded"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:296
+=======
+#: ../duplicity/backends/multibackend.py:262
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: list from %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:302
+=======
+#: ../duplicity/backends/multibackend.py:268
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: combined list: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:327
+=======
+#: ../duplicity/backends/multibackend.py:290
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "MultiBackend: failed to delete %s from %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:331
+=======
+#: ../duplicity/backends/multibackend.py:294
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"MultiBackend: failed to delete %s. Tried all backing stores and none "
@@ -1522,16 +2323,25 @@
"seeing this message"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:216
+=======
+#: ../duplicity/manifest.py:192
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Found manifest volume %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:223
+=======
+#: ../duplicity/manifest.py:199
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Found %s volumes in manifest"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:240
#, python-format
msgid ""
@@ -1539,38 +2349,73 @@
msgstr ""
#: ../duplicity/manifest.py:259
+=======
+#: ../duplicity/manifest.py:213
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because different volume numbers"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:264
+=======
+#: ../duplicity/manifest.py:218
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because volume lists differ"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:269
+=======
+#: ../duplicity/manifest.py:223
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because hosts or directories differ"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:426
+=======
+#: ../duplicity/manifest.py:370
+>>>>>>> MERGE-SOURCE
msgid "Warning, found extra Volume identifier"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:452
+=======
+#: ../duplicity/manifest.py:396
+>>>>>>> MERGE-SOURCE
msgid "Other is not VolumeInfo"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:455
+=======
+#: ../duplicity/manifest.py:399
+>>>>>>> MERGE-SOURCE
msgid "Volume numbers don't match"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:458
+=======
+#: ../duplicity/manifest.py:402
+>>>>>>> MERGE-SOURCE
msgid "start_indicies don't match"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:461
+=======
+#: ../duplicity/manifest.py:405
+>>>>>>> MERGE-SOURCE
msgid "end_index don't match"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:468
+=======
+#: ../duplicity/manifest.py:412
+>>>>>>> MERGE-SOURCE
msgid "Hashes don't match"
msgstr ""
@@ -1657,7 +2502,11 @@
msgid "GPG process %d terminated before wait()"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/dup_time.py:62
+=======
+#: ../duplicity/dup_time.py:61
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Bad interval string \"%s\"\n"
@@ -1667,7 +2516,11 @@
"page for more information."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/dup_time.py:68
+=======
+#: ../duplicity/dup_time.py:67
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Bad time string \"%s\"\n"
@@ -1720,12 +2573,20 @@
msgid "Cleanup of temporary directory %s failed - this is probably a bug."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/util.py:128
+=======
+#: ../duplicity/util.py:95
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "IGNORED_ERROR: Warning: ignoring error as requested: %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/util.py:195
+=======
+#: ../duplicity/util.py:162
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Releasing lockfile %s"
msgstr ""
=== modified file 'po/el.po'
--- po/el.po 2018-02-25 05:44:50 +0000
+++ po/el.po 2019-03-04 12:09:45 +0000
@@ -6,17 +6,29 @@
msgid ""
msgstr ""
"Project-Id-Version: duplicity\n"
+<<<<<<< TREE
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2018-02-24 06:05+0000\n"
"PO-Revision-Date: 2018-02-23 13:10+0000\n"
+=======
+"Report-Msgid-Bugs-To: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+"POT-Creation-Date: 2018-08-21 10:58-0500\n"
+"PO-Revision-Date: 2010-12-14 18:55+0000\n"
+>>>>>>> MERGE-SOURCE
"Last-Translator: DimitrisT <Unknown>\n"
"Language-Team: Greek <el@xxxxxx>\n"
+"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+<<<<<<< TREE
"X-Launchpad-Export-Date: 2018-02-25 05:44+0000\n"
"X-Generator: Launchpad (build 18561)\n"
+=======
+"X-Launchpad-Export-Date: 2018-08-12 04:35+0000\n"
+"X-Generator: Launchpad (build 18747)\n"
+>>>>>>> MERGE-SOURCE
#: ../bin/duplicity:133
msgid "Reuse configured PASSPHRASE as SIGN_PASSPHRASE"
@@ -69,138 +81,248 @@
"Continuing restart on file %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:331
+=======
+#: ../bin/duplicity:336
+#, python-format
+msgid "Remote filesize %d for %s does not match local size %d, retrying."
+msgstr ""
+
+#: ../bin/duplicity:343
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s was corrupted during upload."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:364
+=======
+#: ../bin/duplicity:376
+>>>>>>> MERGE-SOURCE
msgid ""
"Restarting backup, but current encryption settings do not match original "
"settings"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:387
+=======
+#: ../bin/duplicity:399
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Restarting after volume %s, file %s, block %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:457
+=======
+#: ../bin/duplicity:469
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:606
+=======
+#: ../bin/duplicity:618
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:610
+=======
+#: ../bin/duplicity:622
+>>>>>>> MERGE-SOURCE
msgid "No signatures found, switching to full backup."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:624
+=======
+#: ../bin/duplicity:636
+>>>>>>> MERGE-SOURCE
msgid "Backup Statistics"
msgstr "Στατιστικά αντιγράφων ασφαλείας"
+<<<<<<< TREE
#: ../bin/duplicity:730
+=======
+#: ../bin/duplicity:742
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%s not found in archive - no files restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:734
+=======
+#: ../bin/duplicity:746
+>>>>>>> MERGE-SOURCE
msgid "No files found in archive - nothing restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:767
+=======
+#: ../bin/duplicity:779
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d of %d"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:801
+=======
+#: ../bin/duplicity:813
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Invalid data - %s hash mismatch for file:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:804
+=======
+#: ../bin/duplicity:816
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Calculated hash: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:805
+=======
+#: ../bin/duplicity:817
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Manifest hash: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:848
+=======
+#: ../bin/duplicity:860
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Volume was signed by key %s, not %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:880
+=======
+#: ../bin/duplicity:892
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Verify complete: %s, %s."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:881
+=======
+#: ../bin/duplicity:893
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file compared"
msgid_plural "%d files compared"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:883
+=======
+#: ../bin/duplicity:895
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d difference found"
msgid_plural "%d differences found"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:902
+=======
+#: ../bin/duplicity:914
+>>>>>>> MERGE-SOURCE
msgid "No extraneous files found, nothing deleted in cleanup."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:907
+=======
+#: ../bin/duplicity:919
+>>>>>>> MERGE-SOURCE
msgid "Deleting this file from backend:"
msgid_plural "Deleting these files from backend:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:918
+=======
+#: ../bin/duplicity:930
+>>>>>>> MERGE-SOURCE
msgid "Found the following file to delete:"
msgid_plural "Found the following files to delete:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:921
+=======
+#: ../bin/duplicity:933
+>>>>>>> MERGE-SOURCE
msgid "Run duplicity again with the --force option to actually delete."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:964
+=======
+#: ../bin/duplicity:976
+>>>>>>> MERGE-SOURCE
msgid "There are backup set(s) at time(s):"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:966
+=======
+#: ../bin/duplicity:978
+>>>>>>> MERGE-SOURCE
msgid "Which can't be deleted because newer sets depend on them."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:970
+=======
+#: ../bin/duplicity:982
+>>>>>>> MERGE-SOURCE
msgid ""
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:983
+=======
+#: ../bin/duplicity:995
+>>>>>>> MERGE-SOURCE
msgid "No old backup sets found, nothing deleted."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:986
+=======
+#: ../bin/duplicity:998
+>>>>>>> MERGE-SOURCE
msgid "Deleting backup chain at time:"
msgid_plural "Deleting backup chains at times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:998
#, python-format
msgid "Deleting any incremental signature chain rooted at %s"
@@ -212,25 +334,51 @@
msgstr ""
#: ../bin/duplicity:1003
+=======
+#: ../bin/duplicity:1010
+#, python-format
+msgid "Deleting any incremental signature chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1012
+#, python-format
+msgid "Deleting any incremental backup chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1015
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete signature chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1005
+=======
+#: ../bin/duplicity:1017
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete backup chain %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1011
+=======
+#: ../bin/duplicity:1023
+>>>>>>> MERGE-SOURCE
msgid "Found old backup chain at the following time:"
msgid_plural "Found old backup chains at the following times:"
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../bin/duplicity:1015
+=======
+#: ../bin/duplicity:1027
+>>>>>>> MERGE-SOURCE
msgid "Rerun command with --force option to actually delete."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1028
msgid "No old backup sets found."
msgstr ""
@@ -251,80 +399,143 @@
msgstr ""
#: ../bin/duplicity:1092
+=======
+#: ../bin/duplicity:1104
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting local %s (not authoritative at backend)."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1097
+=======
+#: ../bin/duplicity:1109
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Unable to delete %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1128 ../duplicity/dup_temp.py:266
+=======
+#: ../bin/duplicity:1140 ../duplicity/dup_temp.py:266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Failed to read %s: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1142
+=======
+#: ../bin/duplicity:1154
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Copying %s to local cache."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1190
+=======
+#: ../bin/duplicity:1202
+>>>>>>> MERGE-SOURCE
msgid "Local and Remote metadata are synchronized, no sync needed."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1195
+=======
+#: ../bin/duplicity:1207
+>>>>>>> MERGE-SOURCE
msgid "Synchronizing remote metadata to local cache..."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1207
+=======
+#: ../bin/duplicity:1219
+>>>>>>> MERGE-SOURCE
msgid "Sync would copy the following from remote to local:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1210
+=======
+#: ../bin/duplicity:1222
+>>>>>>> MERGE-SOURCE
msgid "Sync would remove the following spurious local files:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1253
+=======
+#: ../bin/duplicity:1265
+>>>>>>> MERGE-SOURCE
msgid "Unable to get free space on temp."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1261
+=======
+#: ../bin/duplicity:1273
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp space has %d available, backup needs approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1264
+=======
+#: ../bin/duplicity:1276
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp has %d available, backup will use approx %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1272
+=======
+#: ../bin/duplicity:1284
+>>>>>>> MERGE-SOURCE
msgid "Unable to get max open files."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1276
+=======
+#: ../bin/duplicity:1288
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"Max open files of %s is too low, should be >= 1024.\n"
"Use 'ulimit -n 1024' or higher to correct.\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1327
+=======
+#: ../bin/duplicity:1339
+>>>>>>> MERGE-SOURCE
msgid ""
"RESTART: The first volume failed to upload before termination.\n"
" Restart is impossible...starting backup from beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1333
+=======
+#: ../bin/duplicity:1345
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Volumes %d to %d failed to upload before termination.\n"
" Restarting backup at volume %d."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1340
+=======
+#: ../bin/duplicity:1352
+>>>>>>> MERGE-SOURCE
#, python-format
msgid ""
"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
@@ -333,7 +544,11 @@
" backup then restart the backup from the beginning."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1361
+=======
+#: ../bin/duplicity:1373
+>>>>>>> MERGE-SOURCE
msgid ""
"\n"
"PYTHONOPTIMIZE in the environment causes duplicity to fail to\n"
@@ -343,54 +558,100 @@
"See https://bugs.launchpad.net/duplicity/+bug/931175\n"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1384
#, python-format
msgid "Acquiring lockfile %s"
+=======
+#: ../bin/duplicity:1396
+#, python-format
+msgid "Acquiring lockfile %s"
+>>>>>>> MERGE-SOURCE
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1442
+=======
+#: ../bin/duplicity:1454
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Last %s backup left a partial set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1446
+=======
+#: ../bin/duplicity:1458
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Cleaning up previous partial %s backup set, restarting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1458
+=======
+#: ../bin/duplicity:1470
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date:"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1460
+=======
+#: ../bin/duplicity:1472
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date: none"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1462
+=======
+#: ../bin/duplicity:1474
+>>>>>>> MERGE-SOURCE
msgid "Last full backup is too old, forcing full backup"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1506
+=======
+#: ../bin/duplicity:1518
+>>>>>>> MERGE-SOURCE
msgid ""
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1575
+=======
+#: ../bin/duplicity:1587
+>>>>>>> MERGE-SOURCE
msgid "INT intercepted...exiting."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1583
+=======
+#: ../bin/duplicity:1595
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1593
+=======
+#: ../bin/duplicity:1605
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "User error detail: %s"
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1603
+=======
+#: ../bin/duplicity:1615
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backend error detail: %s"
msgstr ""
@@ -484,6 +745,7 @@
"Use of default filenames is strongly suggested."
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:78
#, python-format
msgid ""
@@ -504,6 +766,28 @@
msgstr ""
#. TRANSL: Used in usage help to represent a Unix-style path name. Example:
+=======
+#: ../duplicity/commandline.py:78
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"--include-filelist and --exclude-filelist now accept globbing characters and "
+"should be used instead."
+msgstr ""
+
+#: ../duplicity/commandline.py:88
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"On many GNU/Linux systems, stdin is represented by /dev/stdin and\n"
+"--include-filelist=/dev/stdin or --exclude-filelist=/dev/stdin could\n"
+"be used as a substitute."
+msgstr ""
+
+#. Used in usage help to represent a Unix-style path name. Example:
+>>>>>>> MERGE-SOURCE
#. --archive-dir <path>
#: ../duplicity/commandline.py:280 ../duplicity/commandline.py:290
#: ../duplicity/commandline.py:311 ../duplicity/commandline.py:385
@@ -542,8 +826,13 @@
msgid "filename"
msgstr "όνομα αρχείου"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent a regular expression (regexp).
#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+=======
+#. Used in usage help to represent a regular expression (regexp).
+#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+>>>>>>> MERGE-SOURCE
msgid "regular_expression"
msgstr ""
@@ -571,8 +860,13 @@
"not intended"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent an imap mailbox
#: ../duplicity/commandline.py:432
+=======
+#. Used in usage help to represent an imap mailbox
+#: ../duplicity/commandline.py:432
+>>>>>>> MERGE-SOURCE
msgid "imap_mailbox"
msgstr ""
@@ -591,11 +885,17 @@
msgid "number"
msgstr "αριθμός"
+<<<<<<< TREE
#. TRANSL: Used in usage help (noun)
#: ../duplicity/commandline.py:464
+=======
+#. Used in usage help (noun)
+#: ../duplicity/commandline.py:464
+>>>>>>> MERGE-SOURCE
msgid "backup name"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/commandline.py:567
msgid "policy"
msgstr ""
@@ -603,6 +903,11 @@
#. TRANSL: noun
#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
#: ../duplicity/commandline.py:768
+=======
+#. noun
+#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
+#: ../duplicity/commandline.py:768
+>>>>>>> MERGE-SOURCE
msgid "command"
msgstr "εντολή"
@@ -614,23 +919,43 @@
msgid "pem formatted bundle of certificate authorities"
msgstr ""
-#: ../duplicity/commandline.py:591
-msgid "path to a folder with certificate authority files"
-msgstr ""
-
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --backend-retry-delay <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
-#: ../duplicity/commandline.py:831
+<<<<<<< TREE
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr ""
+
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. TRANSL: Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+=======
+#: ../duplicity/commandline.py:591
+msgid "path to a folder with certificate authority files"
+msgstr ""
+
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#. Used in usage help. Example:
+#. --backend-retry-delay <seconds>
+#. Used in usage help. Example:
+#. --timeout <seconds>
+#: ../duplicity/commandline.py:600 ../duplicity/commandline.py:629
+#: ../duplicity/commandline.py:831
+>>>>>>> MERGE-SOURCE
msgid "seconds"
msgstr "δευτερόλεπτα"
+<<<<<<< TREE
#. TRANSL: abbreviation for "character" (noun)
#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+=======
+#. abbreviation for "character" (noun)
+#: ../duplicity/commandline.py:606 ../duplicity/commandline.py:765
+>>>>>>> MERGE-SOURCE
msgid "char"
msgstr "χαρακτήρας"
@@ -679,13 +1004,23 @@
msgid "container_name"
msgstr ""
+<<<<<<< TREE
#. TRANSL: noun
#: ../duplicity/commandline.py:776
+=======
+#. noun
+#: ../duplicity/commandline.py:776
+>>>>>>> MERGE-SOURCE
msgid "count"
msgstr "υπολογισμός"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent the name of a file directory
#: ../duplicity/commandline.py:779
+=======
+#. Used in usage help to represent the name of a file directory
+#: ../duplicity/commandline.py:779
+>>>>>>> MERGE-SOURCE
msgid "directory"
msgstr "κατάλογος"
@@ -771,6 +1106,7 @@
msgid "user"
msgstr "χρήστης"
+<<<<<<< TREE
#. TRANSL: account id for b2. Example: b2://account_id@bucket/
#: ../duplicity/commandline.py:877
msgid "account_id"
@@ -784,18 +1120,37 @@
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:899
+=======
+#. account id for b2. Example: b2://account_id@bucket/
+#: ../duplicity/commandline.py:877
+msgid "account_id"
+msgstr ""
+
+#. application_key for b2.
+#. Example: b2://account_id:application_key@bucket/
+#: ../duplicity/commandline.py:881
+msgid "application_key"
+msgstr ""
+
+#. Header in usage help
+#: ../duplicity/commandline.py:899
+>>>>>>> MERGE-SOURCE
msgid "Backends and their URL formats:"
msgstr ""
+<<<<<<< TREE
#. TRANSL: Header in usage help
#: ../duplicity/commandline.py:930
+=======
+#. Header in usage help
+#: ../duplicity/commandline.py:930
+>>>>>>> MERGE-SOURCE
msgid "Commands:"
msgstr "Εντολές:"
#: ../duplicity/commandline.py:954
#, python-format
-msgid ""
-"Specified archive directory '%s' does not exist, or is not a directory"
+msgid "Specified archive directory '%s' does not exist, or is not a directory"
msgstr ""
#: ../duplicity/commandline.py:963
@@ -1083,12 +1438,20 @@
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#. TRANSL: "cleanup" is a hard-coded command, so do not translate it
#: ../duplicity/collections.py:666
msgid ""
"These may be deleted by running duplicity with the \"cleanup\" command."
msgstr ""
+=======
+#. "cleanup" is a hard-coded command, so do not translate it
+#: ../duplicity/collections.py:666
+msgid "These may be deleted by running duplicity with the \"cleanup\" command."
+msgstr ""
+
+>>>>>>> MERGE-SOURCE
#: ../duplicity/collections.py:669
msgid "No orphaned or incomplete backup sets found."
msgstr ""
@@ -1107,9 +1470,14 @@
msgstr[0] ""
msgstr[1] ""
+<<<<<<< TREE
#: ../duplicity/collections.py:748
msgid ""
"Warning, discarding last backup set, because of missing signature file."
+=======
+#: ../duplicity/collections.py:748
+msgid "Warning, discarding last backup set, because of missing signature file."
+>>>>>>> MERGE-SOURCE
msgstr ""
#: ../duplicity/collections.py:771
@@ -1250,6 +1618,7 @@
msgid "Connection failed, please check your password: %s"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/backends/multibackend.py:85
#, python-format
msgid "MultiBackend: Could not parse query string %s: %s "
@@ -1495,6 +1864,247 @@
msgid ""
"basis_file must be a (true) file or an object whose file attribute is the "
"underlying true file object"
+=======
+#: ../duplicity/backends/multibackend.py:85
+#, python-format
+msgid "MultiBackend: Could not parse query string %s: %s "
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:94
+#, python-format
+msgid "MultiBackend: Invalid query string %s: more than one value for %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:99
+#, python-format
+msgid "MultiBackend: Invalid query string %s: unknown parameter %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:149
+#: ../duplicity/backends/multibackend.py:154
+#, python-format
+msgid "MultiBackend: illegal value for %s: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:162
+#, python-format
+msgid "MultiBackend: Url %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:166
+#, python-format
+msgid "MultiBackend: Could not load config file %s: %s "
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:175
+#, python-format
+msgid "MultiBackend: use store %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:180
+#, python-format
+msgid "MultiBackend: set env %s = %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:206
+#, python-format
+msgid "MultiBackend: _put: write to store #%s (%s)"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:219
+#, python-format
+msgid "MultiBackend: failed to write to store #%s (%s), try #%s, Exception: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:226
+#, python-format
+msgid "MultiBackend: failed to write %s. Aborting process."
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:233
+#, python-format
+msgid ""
+"MultiBackend: failed to write %s. Tried all backing stores and none succeeded"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:250
+#, python-format
+msgid "MultiBackend: failed to get %s to %s from %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:253
+#, python-format
+msgid ""
+"MultiBackend: failed to get %s. Tried all backing stores and none succeeded"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:262
+#, python-format
+msgid "MultiBackend: list from %s: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:268
+#, python-format
+msgid "MultiBackend: combined list: %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:290
+#, python-format
+msgid "MultiBackend: failed to delete %s from %s"
+msgstr ""
+
+#: ../duplicity/backends/multibackend.py:294
+#, python-format
+msgid ""
+"MultiBackend: failed to delete %s. Tried all backing stores and none "
+"succeeded"
+msgstr ""
+
+#: ../duplicity/backends/pydrivebackend.py:143
+#, python-format
+msgid "PyDrive backend: multiple files called '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:61
+msgid "Missing socket or ssl python modules."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:79
+#, python-format
+msgid "Cacert database file '%s' is not readable."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:100
+msgid ""
+"Option '--ssl-cacert-path' is not supported with python 2.7.8 and below."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:104
+#, python-format
+msgid ""
+"For certificate verification with python 2.7.8 or earlier a cacert database\n"
+"file is needed in one of these locations: %s\n"
+"Hints:\n"
+" Consult the man page, chapter 'SSL Certificate Verification'.\n"
+" Consider using the options --ssl-cacert-file, --ssl-no-check-certificate ."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:150
+#, python-format
+msgid "Using WebDAV protocol %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:151
+#, python-format
+msgid "Using WebDAV host %s port %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:153
+#, python-format
+msgid "Using WebDAV directory %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:184
+#, python-format
+msgid "WebDAV create connection on '%s'"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:195
+#, python-format
+msgid "WebDAV Unknown URI scheme: %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:214
+#, python-format
+msgid "WebDAV %s %s request with headers: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:215
+#: ../duplicity/backends/webdavbackend.py:238
+#, python-format
+msgid "WebDAV data length: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:218
+#, python-format
+msgid "WebDAV response status %s with reason '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:224
+#, python-format
+msgid "WebDAV redirect to: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:226
+msgid "WebDAV redirected 10 times. Giving up."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:231
+msgid "WebDAV missing location header in redirect response."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:236
+msgid "WebDAV retry request with authentification headers."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:237
+#, python-format
+msgid "WebDAV %s %s request2 with headers: %s "
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:241
+#, python-format
+msgid "WebDAV response2 status %s with reason '%s'."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:258
+msgid ""
+"python-kerberos needed to use kerberos "
+"authorization, falling back to basic auth."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:262
+#, python-format
+msgid ""
+"Kerberos authorization failed: %s. Falling back to "
+"basic auth."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:360
+#, python-format
+msgid "Creating missing directory %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:364
+#, python-format
+msgid "WebDAV MKCOL %s failed: %s %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:377
+#, python-format
+msgid "WebDAV path decoding and translation: %s -> %s"
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:422
+#, python-format
+msgid "WebDAV GET Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:444
+#, python-format
+msgid "WebDAV PUT Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/backends/webdavbackend.py:464
+#, python-format
+msgid "WebDAV DEL Bad status code %s reason %s."
+msgstr ""
+
+#: ../duplicity/librsync.py:184
+msgid ""
+"basis_file must be a (true) file or an object whose file attribute is the "
+"underlying true file object"
+>>>>>>> MERGE-SOURCE
msgstr ""
#: ../duplicity/manifest.py:91
@@ -1521,6 +2131,7 @@
"seeing this message"
msgstr ""
+<<<<<<< TREE
#: ../duplicity/manifest.py:192
#, python-format
msgid "Found manifest volume %s"
@@ -1538,6 +2149,19 @@
msgstr ""
#: ../duplicity/manifest.py:213
+=======
+#: ../duplicity/manifest.py:192
+#, python-format
+msgid "Found manifest volume %s"
+msgstr ""
+
+#: ../duplicity/manifest.py:199
+#, python-format
+msgid "Found %s volumes in manifest"
+msgstr ""
+
+#: ../duplicity/manifest.py:213
+>>>>>>> MERGE-SOURCE
msgid "Manifests not equal because different volume numbers"
msgstr ""
=== modified file 'po/en_AU.po'
--- po/en_AU.po 2018-02-25 05:44:50 +0000
+++ po/en_AU.po 2019-03-04 12:09:45 +0000
@@ -6,17 +6,30 @@
msgid ""
msgstr ""
"Project-Id-Version: duplicity\n"
+<<<<<<< TREE
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2018-02-24 06:05+0000\n"
"PO-Revision-Date: 2018-02-23 13:10+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+=======
+"Report-Msgid-Bugs-To: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+"POT-Creation-Date: 2018-08-21 10:58-0500\n"
+"PO-Revision-Date: 2014-04-29 08:07+0000\n"
+"Last-Translator: Kenneth Loafman <kenneth@xxxxxxxxxxx>\n"
+>>>>>>> MERGE-SOURCE
"Language-Team: English (Australia) <en_AU@xxxxxx>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+<<<<<<< TREE
"X-Launchpad-Export-Date: 2018-02-25 05:44+0000\n"
"X-Generator: Launchpad (build 18561)\n"
+=======
+"X-Launchpad-Export-Date: 2018-08-12 04:35+0000\n"
+"X-Generator: Launchpad (build 18747)\n"
+>>>>>>> MERGE-SOURCE
#: ../bin/duplicity:133
msgid "Reuse configured PASSPHRASE as SIGN_PASSPHRASE"
@@ -50,6 +63,7 @@
msgid "First and second passphrases do not match! Please try again."
msgstr "First and second passphrases do not match! Please try again."
+<<<<<<< TREE
#: ../bin/duplicity:216
msgid ""
"Cannot use empty passphrase with symmetric encryption! Please try again."
@@ -75,11 +89,47 @@
"Continuing restart on file %s."
#: ../bin/duplicity:331
+=======
+#: ../bin/duplicity:216
+msgid ""
+"Cannot use empty passphrase with symmetric encryption! Please try again."
+msgstr ""
+"Cannot use empty passphrase with symmetric encryption! Please try again."
+
+#: ../bin/duplicity:273
+#, python-format
+msgid ""
+"File %s complete in backup set.\n"
+"Continuing restart on file %s."
+msgstr ""
+"File %s complete in backup set.\n"
+"Continuing restart on file %s."
+
+#: ../bin/duplicity:282
+#, python-format
+msgid ""
+"File %s missing in backup set.\n"
+"Continuing restart on file %s."
+msgstr ""
+"File %s missing in backup set.\n"
+"Continuing restart on file %s."
+
+#: ../bin/duplicity:336
+#, python-format
+msgid "Remote filesize %d for %s does not match local size %d, retrying."
+msgstr ""
+
+#: ../bin/duplicity:343
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "File %s was corrupted during upload."
msgstr "File %s was corrupted during upload."
+<<<<<<< TREE
#: ../bin/duplicity:364
+=======
+#: ../bin/duplicity:376
+>>>>>>> MERGE-SOURCE
msgid ""
"Restarting backup, but current encryption settings do not match original "
"settings"
@@ -87,17 +137,29 @@
"Restarting backup, but current encryption settings do not match original "
"settings"
+<<<<<<< TREE
#: ../bin/duplicity:387
+=======
+#: ../bin/duplicity:399
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Restarting after volume %s, file %s, block %s"
msgstr "Restarting after volume %s, file %s, block %s"
+<<<<<<< TREE
#: ../bin/duplicity:457
+=======
+#: ../bin/duplicity:469
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d"
msgstr "Processed volume %d"
+<<<<<<< TREE
#: ../bin/duplicity:606
+=======
+#: ../bin/duplicity:618
+>>>>>>> MERGE-SOURCE
msgid ""
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
@@ -105,96 +167,172 @@
"Fatal Error: Unable to start incremental backup. Old signatures not found "
"and incremental specified"
+<<<<<<< TREE
#: ../bin/duplicity:610
+=======
+#: ../bin/duplicity:622
+>>>>>>> MERGE-SOURCE
msgid "No signatures found, switching to full backup."
msgstr "No signatures found, switching to full backup."
+<<<<<<< TREE
#: ../bin/duplicity:624
+=======
+#: ../bin/duplicity:636
+>>>>>>> MERGE-SOURCE
msgid "Backup Statistics"
msgstr "Backup Statistics"
+<<<<<<< TREE
#: ../bin/duplicity:730
+=======
+#: ../bin/duplicity:742
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%s not found in archive - no files restored."
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:734
+=======
+#: ../bin/duplicity:746
+>>>>>>> MERGE-SOURCE
msgid "No files found in archive - nothing restored."
msgstr "No files found in archive - nothing restored."
+<<<<<<< TREE
#: ../bin/duplicity:767
+=======
+#: ../bin/duplicity:779
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Processed volume %d of %d"
msgstr "Processed volume %d of %d"
+<<<<<<< TREE
#: ../bin/duplicity:801
+=======
+#: ../bin/duplicity:813
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Invalid data - %s hash mismatch for file:"
msgstr "Invalid data - %s hash mismatch for file:"
+<<<<<<< TREE
#: ../bin/duplicity:804
+=======
+#: ../bin/duplicity:816
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Calculated hash: %s"
msgstr "Calculated hash: %s"
+<<<<<<< TREE
#: ../bin/duplicity:805
+=======
+#: ../bin/duplicity:817
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Manifest hash: %s"
msgstr "Manifest hash: %s"
+<<<<<<< TREE
#: ../bin/duplicity:848
+=======
+#: ../bin/duplicity:860
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Volume was signed by key %s, not %s"
msgstr "Volume was signed by key %s, not %s"
+<<<<<<< TREE
#: ../bin/duplicity:880
+=======
+#: ../bin/duplicity:892
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Verify complete: %s, %s."
msgstr "Verify complete: %s, %s."
+<<<<<<< TREE
#: ../bin/duplicity:881
+=======
+#: ../bin/duplicity:893
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d file compared"
msgid_plural "%d files compared"
msgstr[0] "%d file compared"
msgstr[1] "%d files compared"
+<<<<<<< TREE
#: ../bin/duplicity:883
+=======
+#: ../bin/duplicity:895
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "%d difference found"
msgid_plural "%d differences found"
msgstr[0] "%d difference found"
msgstr[1] "%d differences found"
+<<<<<<< TREE
#: ../bin/duplicity:902
+=======
+#: ../bin/duplicity:914
+>>>>>>> MERGE-SOURCE
msgid "No extraneous files found, nothing deleted in cleanup."
msgstr "No extraneous files found, nothing deleted in cleanup."
+<<<<<<< TREE
#: ../bin/duplicity:907
+=======
+#: ../bin/duplicity:919
+>>>>>>> MERGE-SOURCE
msgid "Deleting this file from backend:"
msgid_plural "Deleting these files from backend:"
msgstr[0] "Deleting this file from backend:"
msgstr[1] "Deleting these files from backend:"
+<<<<<<< TREE
#: ../bin/duplicity:918
+=======
+#: ../bin/duplicity:930
+>>>>>>> MERGE-SOURCE
msgid "Found the following file to delete:"
msgid_plural "Found the following files to delete:"
msgstr[0] "Found the following file to delete:"
msgstr[1] "Found the following files to delete:"
+<<<<<<< TREE
#: ../bin/duplicity:921
+=======
+#: ../bin/duplicity:933
+>>>>>>> MERGE-SOURCE
msgid "Run duplicity again with the --force option to actually delete."
msgstr "Run duplicity again with the --force option to actually delete."
+<<<<<<< TREE
#: ../bin/duplicity:964
+=======
+#: ../bin/duplicity:976
+>>>>>>> MERGE-SOURCE
msgid "There are backup set(s) at time(s):"
msgstr "There are backup set(s) at time(s):"
+<<<<<<< TREE
#: ../bin/duplicity:966
+=======
+#: ../bin/duplicity:978
+>>>>>>> MERGE-SOURCE
msgid "Which can't be deleted because newer sets depend on them."
msgstr "Which can't be deleted because newer sets depend on them."
+<<<<<<< TREE
#: ../bin/duplicity:970
+=======
+#: ../bin/duplicity:982
+>>>>>>> MERGE-SOURCE
msgid ""
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
@@ -202,16 +340,25 @@
"Current active backup chain is older than specified time. However, it will "
"not be deleted. To remove all your backups, manually purge the repository."
+<<<<<<< TREE
#: ../bin/duplicity:983
+=======
+#: ../bin/duplicity:995
+>>>>>>> MERGE-SOURCE
msgid "No old backup sets found, nothing deleted."
msgstr "No old backup sets found, nothing deleted."
+<<<<<<< TREE
#: ../bin/duplicity:986
+=======
+#: ../bin/duplicity:998
+>>>>>>> MERGE-SOURCE
msgid "Deleting backup chain at time:"
msgid_plural "Deleting backup chains at times:"
msgstr[0] "Deleting backup chain at time:"
msgstr[1] "Deleting backup chains at times:"
+<<<<<<< TREE
#: ../bin/duplicity:998
#, python-format
msgid "Deleting any incremental signature chain rooted at %s"
@@ -223,25 +370,51 @@
msgstr ""
#: ../bin/duplicity:1003
+=======
+#: ../bin/duplicity:1010
+#, python-format
+msgid "Deleting any incremental signature chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1012
+#, python-format
+msgid "Deleting any incremental backup chain rooted at %s"
+msgstr ""
+
+#: ../bin/duplicity:1015
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete signature chain %s"
msgstr "Deleting complete signature chain %s"
+<<<<<<< TREE
#: ../bin/duplicity:1005
+=======
+#: ../bin/duplicity:1017
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting complete backup chain %s"
msgstr "Deleting complete backup chain %s"
+<<<<<<< TREE
#: ../bin/duplicity:1011
+=======
+#: ../bin/duplicity:1023
+>>>>>>> MERGE-SOURCE
msgid "Found old backup chain at the following time:"
msgid_plural "Found old backup chains at the following times:"
msgstr[0] "Found old backup chain at the following time:"
msgstr[1] "Found old backup chains at the following times:"
+<<<<<<< TREE
#: ../bin/duplicity:1015
+=======
+#: ../bin/duplicity:1027
+>>>>>>> MERGE-SOURCE
msgid "Rerun command with --force option to actually delete."
msgstr "Rerun command with --force option to actually delete."
+<<<<<<< TREE
#: ../bin/duplicity:1028
msgid "No old backup sets found."
msgstr ""
@@ -262,59 +435,107 @@
msgstr ""
#: ../bin/duplicity:1092
+=======
+#: ../bin/duplicity:1104
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Deleting local %s (not authoritative at backend)."
msgstr "Deleting local %s (not authoritative at backend)."
+<<<<<<< TREE
#: ../bin/duplicity:1097
+=======
+#: ../bin/duplicity:1109
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Unable to delete %s: %s"
msgstr "Unable to delete %s: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1128 ../duplicity/dup_temp.py:266
+=======
+#: ../bin/duplicity:1140 ../duplicity/dup_temp.py:266
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Failed to read %s: %s"
msgstr "Failed to read %s: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1142
+=======
+#: ../bin/duplicity:1154
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Copying %s to local cache."
msgstr "Copying %s to local cache."
+<<<<<<< TREE
#: ../bin/duplicity:1190
+=======
+#: ../bin/duplicity:1202
+>>>>>>> MERGE-SOURCE
msgid "Local and Remote metadata are synchronized, no sync needed."
msgstr "Local and Remote metadata are synchronised, no sync needed."
+<<<<<<< TREE
#: ../bin/duplicity:1195
+=======
+#: ../bin/duplicity:1207
+>>>>>>> MERGE-SOURCE
msgid "Synchronizing remote metadata to local cache..."
msgstr "Synchronising remote metadata to local cache..."
+<<<<<<< TREE
#: ../bin/duplicity:1207
+=======
+#: ../bin/duplicity:1219
+>>>>>>> MERGE-SOURCE
msgid "Sync would copy the following from remote to local:"
msgstr "Sync would copy the following from remote to local:"
+<<<<<<< TREE
#: ../bin/duplicity:1210
+=======
+#: ../bin/duplicity:1222
+>>>>>>> MERGE-SOURCE
msgid "Sync would remove the following spurious local files:"
msgstr "Sync would remove the following spurious local files:"
+<<<<<<< TREE
#: ../bin/duplicity:1253
+=======
+#: ../bin/duplicity:1265
+>>>>>>> MERGE-SOURCE
msgid "Unable to get free space on temp."
msgstr "Unable to get free space on temp."
+<<<<<<< TREE
#: ../bin/duplicity:1261
+=======
+#: ../bin/duplicity:1273
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp space has %d available, backup needs approx %d."
msgstr "Temp space has %d available, backup needs approx %d."
+<<<<<<< TREE
#: ../bin/duplicity:1264
+=======
+#: ../bin/duplicity:1276
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Temp has %d available, backup will use approx %d."
msgstr "Temp has %d available, backup will use approx %d."
+<<<<<<< TREE
#: ../bin/duplicity:1272
+=======
+#: ../bin/duplicity:1284
+>>>>>>> MERGE-SOURCE
msgid "Unable to get max open files."
msgstr "Unable to get max open files."
+<<<<<<< TREE
#: ../bin/duplicity:1276
#, python-format
msgid ""
@@ -355,6 +576,48 @@
" backup then restart the backup from the beginning."
#: ../bin/duplicity:1361
+=======
+#: ../bin/duplicity:1288
+#, python-format
+msgid ""
+"Max open files of %s is too low, should be >= 1024.\n"
+"Use 'ulimit -n 1024' or higher to correct.\n"
+msgstr ""
+"Max open files of %s is too low, should be >= 1024.\n"
+"Use 'ulimit -n 1024' or higher to correct.\n"
+
+#: ../bin/duplicity:1339
+msgid ""
+"RESTART: The first volume failed to upload before termination.\n"
+" Restart is impossible...starting backup from beginning."
+msgstr ""
+"RESTART: The first volume failed to upload before termination.\n"
+" Restart is impossible...starting backup from beginning."
+
+#: ../bin/duplicity:1345
+#, python-format
+msgid ""
+"RESTART: Volumes %d to %d failed to upload before termination.\n"
+" Restarting backup at volume %d."
+msgstr ""
+"RESTART: Volumes %d to %d failed to upload before termination.\n"
+" Restarting backup at volume %d."
+
+#: ../bin/duplicity:1352
+#, python-format
+msgid ""
+"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
+" Restart is impossible ... duplicity will clean off the last "
+"partial\n"
+" backup then restart the backup from the beginning."
+msgstr ""
+"RESTART: Impossible backup state: manifest has %d vols, remote has %d vols.\n"
+" Restart is impossible ... duplicity will clean off the last "
+"partial\n"
+" backup then restart the backup from the beginning."
+
+#: ../bin/duplicity:1373
+>>>>>>> MERGE-SOURCE
msgid ""
"\n"
"PYTHONOPTIMIZE in the environment causes duplicity to fail to\n"
@@ -370,34 +633,64 @@
"\n"
"See https://bugs.launchpad.net/duplicity/+bug/931175\n"
+<<<<<<< TREE
#: ../bin/duplicity:1384
#, python-format
msgid "Acquiring lockfile %s"
+=======
+#: ../bin/duplicity:1396
+#, python-format
+msgid "Acquiring lockfile %s"
+>>>>>>> MERGE-SOURCE
msgstr ""
+<<<<<<< TREE
#: ../bin/duplicity:1442
+=======
+#: ../bin/duplicity:1454
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Last %s backup left a partial set, restarting."
msgstr "Last %s backup left a partial set, restarting."
+<<<<<<< TREE
#: ../bin/duplicity:1446
+=======
+#: ../bin/duplicity:1458
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Cleaning up previous partial %s backup set, restarting."
msgstr "Cleaning up previous partial %s backup set, restarting."
+<<<<<<< TREE
#: ../bin/duplicity:1458
+=======
+#: ../bin/duplicity:1470
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date:"
msgstr "Last full backup date:"
+<<<<<<< TREE
#: ../bin/duplicity:1460
+=======
+#: ../bin/duplicity:1472
+>>>>>>> MERGE-SOURCE
msgid "Last full backup date: none"
msgstr "Last full backup date: none"
+<<<<<<< TREE
#: ../bin/duplicity:1462
+=======
+#: ../bin/duplicity:1474
+>>>>>>> MERGE-SOURCE
msgid "Last full backup is too old, forcing full backup"
msgstr "Last full backup is too old, forcing full backup"
+<<<<<<< TREE
#: ../bin/duplicity:1506
+=======
+#: ../bin/duplicity:1518
+>>>>>>> MERGE-SOURCE
msgid ""
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
@@ -405,21 +698,37 @@
"When using symmetric encryption, the signing passphrase must equal the "
"encryption passphrase."
+<<<<<<< TREE
#: ../bin/duplicity:1575
+=======
+#: ../bin/duplicity:1587
+>>>>>>> MERGE-SOURCE
msgid "INT intercepted...exiting."
msgstr "INT intercepted...exiting."
+<<<<<<< TREE
#: ../bin/duplicity:1583
+=======
+#: ../bin/duplicity:1595
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "GPG error detail: %s"
msgstr "GPG error detail: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1593
+=======
+#: ../bin/duplicity:1605
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "User error detail: %s"
msgstr "User error detail: %s"
+<<<<<<< TREE
#: ../bin/duplicity:1603
+=======
+#: ../bin/duplicity:1615
+>>>>>>> MERGE-SOURCE
#, python-format
msgid "Backend error detail: %s"
msgstr "Backend error detail: %s"
@@ -531,6 +840,7 @@
"release.\n"
"Use of default filenames is strongly suggested."
+<<<<<<< TREE
#: ../duplicity/commandline.py:78
#, python-format
msgid ""
@@ -551,6 +861,28 @@
msgstr ""
#. TRANSL: Used in usage help to represent a Unix-style path name. Example:
+=======
+#: ../duplicity/commandline.py:78
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"--include-filelist and --exclude-filelist now accept globbing characters and "
+"should be used instead."
+msgstr ""
+
+#: ../duplicity/commandline.py:88
+#, python-format
+msgid ""
+"Warning: Option %s is pending deprecation and will be removed in a future "
+"release.\n"
+"On many GNU/Linux systems, stdin is represented by /dev/stdin and\n"
+"--include-filelist=/dev/stdin or --exclude-filelist=/dev/stdin could\n"
+"be used as a substitute."
+msgstr ""
+
+#. Used in usage help to represent a Unix-style path name. Example:
+>>>>>>> MERGE-SOURCE
#. --archive-dir <path>
#: ../duplicity/commandline.py:280 ../duplicity/commandline.py:290
#: ../duplicity/commandline.py:311 ../duplicity/commandline.py:385
@@ -589,8 +921,13 @@
msgid "filename"
msgstr "filename"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent a regular expression (regexp).
#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+=======
+#. Used in usage help to represent a regular expression (regexp).
+#: ../duplicity/commandline.py:350 ../duplicity/commandline.py:447
+>>>>>>> MERGE-SOURCE
msgid "regular_expression"
msgstr "regular_expression"
@@ -620,8 +957,13 @@
"Running in 'ignore errors' mode due to %s; please re-consider if this was "
"not intended"
+<<<<<<< TREE
#. TRANSL: Used in usage help to represent an imap mailbox
#: ../duplicity/commandline.py:432
+=======
+#. Used in usage help to represent an imap mailbox
+#: ../duplicity/commandline.py:432
+>>>>>>> MERGE-SOURCE
msgid "imap_mailbox"
msgstr "imap_mailbox"
@@ -640,11 +982,17 @@
msgid "number"
msgstr "number"
+<<<<<<< TREE
#. TRANSL: Used in usage help (noun)
#: ../duplicity/commandline.py:464
+=======
+#. Used in usage help (noun)
+#: ../duplicity/commandline.py:464
+>>>>>>> MERGE-SOURCE
msgid "backup name"
msgstr "backup name"
+<<<<<<< TREE
#: ../duplicity/commandline.py:567
msgid "policy"
msgstr ""
@@ -652,6 +1000,11 @@
#. TRANSL: noun
#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
#: ../duplicity/commandline.py:768
+=======
+#. noun
+#: ../duplicity/commandline.py:563 ../duplicity/commandline.py:566
+#: ../duplicity/commandline.py:768
+>>>>>>> MERGE-SOURCE
msgid "command"
msgstr "command"
@@ -663,23 +1016,43 @@
msgid "pem formatted bundle of certificate authorities"
msgstr "pem formatted bundle of certificate authorities"
-#: ../duplicity/commandline.py:591
-msgid "path to a folder with certificate authority files"
-msgstr ""
-
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --backend-retry-delay <seconds>
-#. TRANSL: Used in usage help. Example:
-#. --timeout <seconds>
-#: ../duplicity/commandline.py:6
Follow ups