Michael Terry has proposed merging lp:~mterry/duplicity/more-accurate-sync into 
lp:duplicity.

Requested reviews:
  duplicity-team (duplicity-team)

For more details, see:
https://code.launchpad.net/~mterry/duplicity/more-accurate-sync/+merge/68884

The current sync'ing code breaks down a bit if you don't correctly tell 
duplicity whether to use encryption.

You'll see that if you have an archive of unencrypted backups, clear your 
cache, then run, say, collection-status against the archive (without passing 
--no-encryption), that you'll get an error saying duplicity couldn't find 
duplicity-full-signatures...sigtar.gpg on the backend.  Which doesn't really 
tell the user much about why they are seeing that error.

The reason is because duplicity breaks down what it sees on the backend 
(sigtar.gz) then builds a filename back up again based on what it would expect 
to see due to the command line (in this case, sigtar.gpg).  This seems a bit 
willfully ignorant of information it already has.

This branch will always sync what is actually on the remote end, not what we 
thought would be there.

Of course, the rest of duplicity will handle the mismatch with more or less 
grace, but this particular error seemed obscure and unnecessary.
-- 
https://code.launchpad.net/~mterry/duplicity/more-accurate-sync/+merge/68884
Your team duplicity-team is requested to review the proposed merge of 
lp:~mterry/duplicity/more-accurate-sync into lp:duplicity.
=== modified file 'duplicity-bin'
--- duplicity-bin	2011-07-08 18:14:35 +0000
+++ duplicity-bin	2011-07-22 17:33:26 +0000
@@ -877,24 +877,18 @@
         @return: (parsedresult, local_name, remote_name)
         """
         pr = file_naming.parse(fn)
-        if pr.manifest:
-            suffix = file_naming.get_suffix(globals.encryption, False)
-        else:
-            suffix = file_naming.get_suffix(globals.encryption, not globals.encryption)
-        rem_name = fn + suffix
-
-        if pr.manifest:
-            suffix = file_naming.get_suffix(False, False)
-        else:
-            suffix = file_naming.get_suffix(False, True)
-        loc_name = fn + suffix
-
-        return (pr, loc_name, rem_name)
+
+        base, ext = os.path.splitext(fn)
+        if ext not in suffixes:
+            base = fn
+
+        suffix = file_naming.get_suffix(False, not pr.manifest)
+        loc_name = base + suffix
+
+        return (pr, loc_name, fn)
 
     def remove_local(fn):
-        pr, loc_name, rem_name = resolve_basename(fn)
-
-        del_name = globals.archive_dir.append(loc_name).name
+        del_name = globals.archive_dir.append(fn).name
 
         log.Notice(_("Deleting local %s (not authoritative at backend).") % del_name)
         try:
@@ -943,7 +937,7 @@
 
         pr, loc_name, rem_name = resolve_basename(fn)
 
-        fileobj = globals.backend.get_fileobj_read(rem_name)
+        fileobj = globals.backend.get_fileobj_read(fn)
         src_iter = SrcIter(fileobj)
         if pr.manifest:
             copy_raw(src_iter,
@@ -976,14 +970,14 @@
         # complete in this case (seems we got interrupted before we could move
         # it to its final location).
         if key not in local_keys and key not in local_partials:
-            local_missing.append(key)
+            local_missing.append(remote_metafiles[key])
 
     for key in local_keys:
         # If we have a file locally that is unnecessary, delete it.  Also
         # delete final versions of partial files because if we have both, it
         # means the write of the final version got interrupted.
         if key not in remote_keys or key in local_partials:
-            local_spurious.append(key)
+            local_spurious.append(local_metafiles[key])
 
     # finally finish the process
     if not local_missing and not local_spurious:

_______________________________________________
Mailing list: https://launchpad.net/~duplicity-team
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~duplicity-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to