[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RFS: Non-maintainer upload for rdiff-backup



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


Reply to: