[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