ports/149923: [PATCH] sysutils/duplicity-devel: fix ftpbackend bug
Jase Thew
freebsd at beardz.net
Mon Aug 23 23:10:02 UTC 2010
>Number: 149923
>Category: ports
>Synopsis: [PATCH] sysutils/duplicity-devel: fix ftpbackend bug
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: update
>Submitter-Id: current-users
>Arrival-Date: Mon Aug 23 23:10:01 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator: Jase Thew
>Release: FreeBSD 8.1-RELEASE amd64
>Organization:
>Environment:
System: FreeBSD jail-ports.localdomain 8.1-RELEASE FreeBSD 8.1-RELEASE #0 r210200M: Wed Jul 21 14:21:18 CEST
>Description:
- Bring in commit r665 from upstream which fixes a bug (613448) in the ftpbackend which prevents
destination directories being created.
Added file(s):
- files/patch-r665-bug613448.diff
Port maintainer (peter.schuller at infidyne.com) is cc'd.
Generated with FreeBSD Port Tools 0.99
>How-To-Repeat:
>Fix:
--- duplicity-devel-0.6.09_1.patch begins here ---
diff -ruN --exclude=CVS /usr/ports/sysutils/duplicity-devel.orig/Makefile /usr/ports/sysutils/duplicity-devel/Makefile
--- /usr/ports/sysutils/duplicity-devel.orig/Makefile 2010-07-30 12:55:57.000000000 +0100
+++ /usr/ports/sysutils/duplicity-devel/Makefile 2010-08-23 23:53:50.550800378 +0100
@@ -7,6 +7,7 @@
PORTNAME= duplicity
PORTVERSION= 0.6.09
+PORTREVISION= 1
CATEGORIES= sysutils
MASTER_SITES= http://launchpad.net/duplicity/0.6-series/${PORTVERSION}/+download/
PKGNAMESUFFIX= -devel
diff -ruN --exclude=CVS /usr/ports/sysutils/duplicity-devel.orig/files/patch-r665-bug613448.diff /usr/ports/sysutils/duplicity-devel/files/patch-r665-bug613448.diff
--- /usr/ports/sysutils/duplicity-devel.orig/files/patch-r665-bug613448.diff 1970-01-01 01:00:00.000000000 +0100
+++ /usr/ports/sysutils/duplicity-devel/files/patch-r665-bug613448.diff 2010-08-23 23:51:33.546547324 +0100
@@ -0,0 +1,136 @@
+=== modified file 'duplicity/backend.py'
+--- src/backend.py 2010-05-23 15:52:45 +0000
++++ src/backend.py 2010-08-09 18:56:03 +0000
+@@ -372,78 +372,76 @@
+ else:
+ return commandline
+
+- """
+- DEPRECATED:
+- run_command(_persist) - legacy wrappers for subprocess_popen(_persist)
+- """
+ def run_command(self, commandline):
+- return self.subprocess_popen(commandline)
++ """
++ Execute the given command line, interpreted as a shell
++ command, with logging and error detection. If execution fails,
++ raise a BackendException.
++ """
++ private = self.munge_password(commandline)
++ log.Info(_("Running '%s'") % private)
++ if os.system(commandline):
++ raise BackendException("Error running '%s'" % private)
++
+ def run_command_persist(self, commandline):
+- return self.subprocess_popen_persist(commandline)
++ """
++ Like run_command(), but repeat the attempt several times (with
++ a delay in between) if it fails.
++ """
++ private = self.munge_password(commandline)
++ for n in range(1, globals.num_retries+1):
++ if n > 1:
++ # sleep before retry
++ time.sleep(30)
++ log.Info(gettext.ngettext("Running '%s' (attempt #%d)",
++ "Running '%s' (attempt #%d)", n) %
++ (private, n))
++ if not os.system(commandline):
++ return
++ log.Warn(gettext.ngettext("Running '%s' failed (attempt #%d)",
++ "Running '%s' failed (attempt #%d)", n) %
++ (private, n), 1)
++ log.Warn(gettext.ngettext("Giving up trying to execute '%s' after %d attempt",
++ "Giving up trying to execute '%s' after %d attempts",
++ globals.num_retries) % (private, globals.num_retries))
++ raise BackendException("Error running '%s'" % private)
+
+- """
+- DEPRECATED:
+- popen(_persist) - legacy wrappers for subprocess_popen(_persist)
+- """
+ def popen(self, commandline):
+- result, stdout, stderr = self.subprocess_popen(commandline)
+- return stdout
++ """
++ Like run_command(), but capture stdout and return it (the
++ contents read from stdout) as a string.
++ """
++ private = self.munge_password(commandline)
++ log.Info(_("Reading results of '%s'") % private)
++ fout = os.popen(commandline)
++ results = fout.read()
++ if fout.close():
++ raise BackendException("Error running '%s'" % private)
++ return results
++
+ def popen_persist(self, commandline):
+- result, stdout, stderr = self.subprocess_popen_persist(commandline)
+- return stdout
+-
+- def _subprocess_popen(self, commandline):
+- """
+- For internal use.
+- Execute the given command line, interpreted as a shell command.
+- Returns int Exitcode, string StdOut, string StdErr
+- """
+- from subprocess import Popen, PIPE
+- p = Popen(commandline, shell=True, stdout=PIPE, stderr=PIPE)
+- stdout, stderr = p.communicate()
+-
+- return p.returncode, stdout, stderr
+-
+- def subprocess_popen(self, commandline):
+- """
+- Execute the given command line with error check.
+- Returns int Exitcode, string StdOut, string StdErr
+-
+- Raise a BackendException on failure.
+- """
+- private = self.munge_password(commandline)
+- log.Info(_("Reading results of '%s'") % private)
+- result, stdout, stderr = self._subprocess_popen(commandline)
+- if result != 0:
+- raise BackendException("Error running '%s'" % private)
+- return result, stdout, stderr
+-
+- def subprocess_popen_persist(self, commandline):
+- """
+- Execute the given command line with error check.
+- Retries globals.num_retries times with 30s delay.
+- Returns int Exitcode, string StdOut, string StdErr
+-
+- Raise a BackendException on failure.
++ """
++ Like run_command_persist(), but capture stdout and return it
++ (the contents read from stdout) as a string.
+ """
+ private = self.munge_password(commandline)
+ for n in range(1, globals.num_retries+1):
+- # sleep before retry
+ if n > 1:
++ # sleep before retry
+ time.sleep(30)
+ log.Info(_("Reading results of '%s'") % private)
+- result, stdout, stderr = self._subprocess_popen(commandline)
+- if result == 0:
+- return result, stdout, stderr
+- elif result == 1280 and self.parsed_url.scheme == 'ftp':
++ fout = os.popen(commandline)
++ results = fout.read()
++ result_status = fout.close()
++ if not result_status:
++ return results
++ elif result_status == 1280 and self.parsed_url.scheme == 'ftp':
+ # This squelches the "file not found" result fromm ncftpls when
+ # the ftp backend looks for a collection that does not exist.
+ return ''
+ log.Warn(gettext.ngettext("Running '%s' failed (attempt #%d)",
+ "Running '%s' failed (attempt #%d)", n) %
+ (private, n))
+- if stdout or stderr:
+- log.Warn(_("Error is:\n%s") % stderr + (stderr and stdout and "\n") + stdout)
+ log.Warn(gettext.ngettext("Giving up trying to execute '%s' after %d attempt",
+ "Giving up trying to execute '%s' after %d attempts",
+ globals.num_retries) % (private, globals.num_retries))
+
--- duplicity-devel-0.6.09_1.patch ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list