[apt-proxy-devel] r604 - people/halls/rework/apt_proxy

Chris Halls halls at costa.debian.org
Tue Apr 25 09:00:19 UTC 2006


Author: halls
Date: Tue Apr 25 09:00:18 2006
New Revision: 604

Modified:
   people/halls/rework/apt_proxy/fetchers.py
Log:
* Allow port number in rsync URL specification
* Fix error handling
* Log rsync command line


Modified: people/halls/rework/apt_proxy/fetchers.py
==============================================================================
--- people/halls/rework/apt_proxy/fetchers.py	(original)
+++ people/halls/rework/apt_proxy/fetchers.py	Tue Apr 25 09:00:18 2006
@@ -23,7 +23,7 @@
 
 import re, os, string, time, glob, signal
 from twisted.web import static, http
-from twisted.internet import protocol, reactor, defer
+from twisted.internet import protocol, reactor, defer, error
 from twisted.python import failure
 from twisted.protocols import policies, ftp
 
@@ -795,7 +795,16 @@
           log.msg('Deleting stale tempfile:' + file, 'rsyncFetcher')
           unlink(file)
 
-        uri = 'rsync://'+ self.backendServer.host \
+        # rsync needs the destination directory in place, so create it if necessary
+        if(not os.path.exists(self.cache_dir)):
+            os.makedirs(self.cache_dir)
+
+        if self.backendServer.port:
+            portspec = ':' + str(self.backendServer.port)
+        else:
+            portspec = ''
+
+        uri = 'rsync://'+ self.backendServer.host + portspec \
               +self.backendServer.path+'/' + self.request_uri
 
         if(log.isEnabled('rsync',9)):
@@ -806,8 +815,7 @@
             args = (self.rsyncCommand, '--quiet', '--times', uri, '.',
                     '--timeout',  "%d"%(self.backendServer.backend.config.timeout),
                     )
-        #if(not os.path.exists(self.cache_dir)):
-        #    os.makedirs(self.cache_dir)
+        log.debug('rsync command: %s' %(string.join(args,' ')), 'rsyncFetcher')
         self.rsyncProcess = reactor.spawnProcess(self, self.rsyncCommand, args, None,
                                             self.cache_dir)
 
@@ -883,28 +891,25 @@
         self.rsyncTempFile = None
         self.rsyncProcess = None
 
-        if isinstance(status_object, failure.Failure):
-            log.debug("rsync failure: %s" %(status_object)
-                  ,'rsync_client')
-            self.parent.fetcher_internal_error("Error in rsync")
-        else:
+        log.debug("rsync terminated: %s" %(status_object)
+                ,'rsync_client')
+        r = status_object.trap(error.ProcessTerminated, error.ProcessDone)
+        if r == error.ProcessDone:
+            # File received.  Send to clients.
+            self.parent.server_mtime(os.stat(self.cache_path)[stat.ST_MTIME])
+            reactor.callLater(0, self.sendData)
+        elif r == error.ProcessTerminated:
             log.debug("Status: %d" %(status_object.value.exitCode)
                       ,'rsync_client')
-    
-            # Success?
             exitcode = status_object.value.exitCode
-    
-            if exitcode == 0:
-                # File received.  Send to clients.
-                self.parent.server_mtime(os.stat(self.cache_path)[stat.ST_MTIME])
-                reactor.callLater(0, self.sendData)
+            if exitcode == 10:
+                # Host not found
+                self.parent.connection_failed('rsync connection to %s failed'
+                                                % (self.backendServer.host))
+            elif exitcode == 23:
+                self.parent.file_not_found()
             else:
-                if exitcode == 10:
-                    # Host not found
-                    self.parent.connection_failed('rsync connection to %s failed'
-                                                   % (self.backendServer.host))
-                else:
-                    self.parent.file_not_found()
+                self.parent.fetcher_internal_error("Error in rsync")
 
     def disconnect(self):
         "Kill rsync process"



More information about the apt-proxy-devel mailing list