Dear mentors, I am looking for a sponsor for the version 1.2.8-7 of my package "rdiff-backup". The upload would fix these bugs: 585508, 587370 The package can be found on mentors.debian.net: * http://mentors.debian.net/package/rdiff-backup $ dget http://mentors.debian.net/debian/pool/main/r/rdiff-backup/rdiff-backup_1.2.8-7.dsc This is a Non-maintainer upload, before change it myself, I've waited for an answer long enough on both bugs (585508 615729) without a reply. So I just made the changes needed to fix both bugs and ask someone to sponsor it. I would be glad if someone uploaded this package for me. I am attaching also the debdiff. This new version should be pushed to stable, testing and sid (the package version is the same on all cases). Thanks! -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Carlos Alberto Lopez Perez http://neutrino.es Igalia - Free Software Engineering http://www.igalia.com ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -u rdiff-backup-1.2.8/debian/changelog rdiff-backup-1.2.8/debian/changelog
--- rdiff-backup-1.2.8/debian/changelog
+++ rdiff-backup-1.2.8/debian/changelog
@@ -1,3 +1,13 @@
+rdiff-backup (1.2.8-7) unstable; urgency=low
+
+ * Non-maintainer upload
+ * Added debian/patches/02_python_2.6_deprecationwarning.dpatch
+ - Fixes annoying deprecation warning with python 2.6 (Closes: #587370).
+ * Added debian/patches/03_fix_hardlinks.dpatch
+ - Fixes hardlink bug (Closes: #558035).
+
+ -- Carlos Alberto Lopez Perez <clopez@igalia.com> Tue, 03 Jan 2012 11:51:55 +0100
+
rdiff-backup (1.2.8-6) unstable; urgency=low
* debian/control
diff -u rdiff-backup-1.2.8/debian/patches/00list rdiff-backup-1.2.8/debian/patches/00list
--- rdiff-backup-1.2.8/debian/patches/00list
+++ rdiff-backup-1.2.8/debian/patches/00list
@@ -1,0 +2,2 @@
+02_python_2.6_deprecationwarning.dpatch
+03_fix_hardlinks.dpatch
only in patch2:
unchanged:
--- rdiff-backup-1.2.8.orig/debian/patches/02_python_2.6_deprecationwarning.dpatch
+++ rdiff-backup-1.2.8/debian/patches/02_python_2.6_deprecationwarning.dpatch
@@ -0,0 +1,27 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 02_python_2.6_deprecationwarning.dpatch by <andreas@pc13267v15.midgard.liu.se>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: patch adapted from the one at https://savannah.nongnu.org/bugs/?26064
+## DP: This fix the following warning: "DeprecationWarning: os.popen2 is
+## DP: deprecated. Use the subprocess module."
+## DP: Also, the *nix version of rdiff-backup requires shell=True instead of
+## DP: shell=False in the subprocess.Popen call
+
+@DPATCH@
+diff -urNad rdiff-backup-1.2.8~/rdiff_backup/SetConnections.py rdiff-backup-1.2.8/rdiff_backup/SetConnections.py
+--- rdiff-backup-1.2.8~/rdiff_backup/SetConnections.py 2009-03-16 15:36:21.000000000 +0100
++++ rdiff-backup-1.2.8/rdiff_backup/SetConnections.py 2009-10-03 19:27:54.935647306 +0200
+@@ -135,10 +135,10 @@
+ if not remote_cmd: return Globals.local_connection
+
+ Log("Executing " + remote_cmd, 4)
+- if os.name == "nt":
++ if map(int, sys.version.split()[0].split('.')[:2]) >= [2, 6]:
+ import subprocess
+ try:
+- process = subprocess.Popen(remote_cmd, shell=False, bufsize=0,
++ process = subprocess.Popen(remote_cmd, shell=True, bufsize=0,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE)
+ (stdin, stdout) = (process.stdin, process.stdout)
only in patch2:
unchanged:
--- rdiff-backup-1.2.8.orig/debian/patches/03_fix_hardlinks.dpatch
+++ rdiff-backup-1.2.8/debian/patches/03_fix_hardlinks.dpatch
@@ -0,0 +1,98 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## fix_hardlinks.dpatch by <clopez@igalia.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Apply hard-links bug fix patch
+## DP: https://savannah.nongnu.org/bugs/index.php?26848
+
+@DPATCH@
+diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' rdiff-backup-1.2.8~/rdiff_backup/Hardlink.py rdiff-backup-1.2.8/rdiff_backup/Hardlink.py
+--- rdiff-backup-1.2.8~/rdiff_backup/Hardlink.py 2009-03-16 14:36:21.000000000 +0000
++++ rdiff-backup-1.2.8/rdiff_backup/Hardlink.py 2012-01-03 11:44:21.708987145 +0000
+@@ -95,7 +95,13 @@
+ src_rorp.getnumlinks() == dest_rorp.getnumlinks() == 1):
+ return 1 # Hard links don't apply
+
+- if src_rorp.getnumlinks() < dest_rorp.getnumlinks(): return 0
++ """The sha1 of linked files is only stored in the metadata of the first
++ linked file on the dest side. If the first linked file on the src side is
++ deleted, then the sha1 will also be deleted on the dest side, so we test for this
++ & report not equal so that another sha1 will be stored with the next linked
++ file on the dest side"""
++ if (not islinked(src_rorp) and not dest_rorp.has_sha1()): return 0
++ if src_rorp.getnumlinks() != dest_rorp.getnumlinks(): return 0
+ src_key = get_inode_key(src_rorp)
+ index, remaining, dest_key, digest = _inode_index[src_key]
+ if dest_key == "NA":
+diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' rdiff-backup-1.2.8~/rdiff_backup/compare.py rdiff-backup-1.2.8/rdiff_backup/compare.py
+--- rdiff-backup-1.2.8~/rdiff_backup/compare.py 2009-03-16 14:36:21.000000000 +0000
++++ rdiff-backup-1.2.8/rdiff_backup/compare.py 2012-01-03 11:43:33.792989189 +0000
+@@ -25,7 +25,7 @@
+ """
+
+ from __future__ import generators
+-import Globals, restore, rorpiter, log, backup, static, rpath, hash, robust
++import Globals, restore, rorpiter, log, backup, static, rpath, hash, robust, Hardlink
+
+ def Compare(src_rp, mirror_rp, inc_rp, compare_time):
+ """Compares metadata in src_rp dir with metadata in mirror_rp at time"""
+@@ -80,14 +80,15 @@
+ bad_files = 0
+ for repo_rorp in repo_iter:
+ if not repo_rorp.isreg(): continue
+- if not repo_rorp.has_sha1():
++ verify_sha1 = get_hash(repo_rorp)
++ if not verify_sha1:
+ log.Log("Warning: Cannot find SHA1 digest for file %s,\n"
+ "perhaps because this feature was added in v1.1.1"
+ % (repo_rorp.get_indexpath(),), 2)
+ continue
+ fp = RepoSide.rf_cache.get_fp(base_index + repo_rorp.index, repo_rorp)
+ computed_hash = hash.compute_sha1_fp(fp)
+- if computed_hash == repo_rorp.get_sha1():
++ if computed_hash == verify_sha1:
+ log.Log("Verified SHA1 digest of " + repo_rorp.get_indexpath(), 5)
+ else:
+ bad_files += 1
+@@ -95,11 +96,24 @@
+ "doesn't match recorded digest of\n %s\n"
+ "Your backup repository may be corrupted!" %
+ (repo_rorp.get_indexpath(), computed_hash,
+- repo_rorp.get_sha1()), 2)
++ verify_sha1), 2)
+ RepoSide.close_rf_cache()
+ if not bad_files: log.Log("Every file verified successfully.", 3)
+ return bad_files
+
++def get_hash (repo_rorp):
++ """ Try to get a sha1 digest from the repository. If hardlinks
++ are saved in the metadata, get the sha1 from the first hardlink """
++ Hardlink.add_rorp(repo_rorp)
++ if Hardlink.islinked(repo_rorp):
++ verify_sha1 = Hardlink.get_sha1(repo_rorp)
++ elif repo_rorp.has_sha1():
++ verify_sha1 = repo_rorp.get_sha1()
++ else:
++ verify_sha1 = None
++ Hardlink.del_rorp(repo_rorp)
++ return verify_sha1
++
+ def print_reports(report_iter):
+ """Given an iter of CompareReport objects, print them to screen"""
+ assert not Globals.server
+@@ -199,12 +213,13 @@
+ """Like above, but also compare sha1 sums of any regular files"""
+ def hashes_changed(src_rp, mir_rorp):
+ """Return 0 if their data hashes same, 1 otherwise"""
+- if not mir_rorp.has_sha1():
++ verify_sha1 = get_hash(mir_rorp)
++ if not verify_sha1:
+ log.Log("Warning: Metadata file has no digest for %s, "
+ "unable to compare." % (mir_rorp.get_indexpath(),), 2)
+ return 0
+ elif (src_rp.getsize() == mir_rorp.getsize() and
+- hash.compute_sha1(src_rp) == mir_rorp.get_sha1()):
++ hash.compute_sha1(src_rp) == verify_sha1):
+ return 0
+ return 1
+
Attachment:
signature.asc
Description: OpenPGP digital signature