"""Compare local and remote dictionaries and transfer differing files -- like rdist.""" import sys from repr import repr import FSProxy import time import os def main(): pwd = os.getcwd() s = raw_input("chdir [%s] " % pwd) if s: os.chdir(s) pwd = os.getcwd() host = ask("host", 'voorn.cwi.nl') port = 4127 verbose = 1 mode = '' print """\ Mode should be a string of characters, indicating what to do with differences. r - read different files to local file system w - write different files to remote file system c - create new files, either remote or local d - delete disappearing files, either remote or local """ s = raw_input("mode [%s] " % mode) if s: mode = s address = (host, port) t1 = time.time() local = FSProxy.FSProxyLocal() remote = FSProxy.FSProxyClient(address, verbose) compare(local, remote, mode) remote._close() local._close() t2 = time.time() dt = t2-t1 mins, secs = divmod(dt, 60) print mins, "minutes and", round(secs), "seconds" raw_input("[Return to exit] ") def ask(prompt, default): s = raw_input("%s [%s] " % (prompt, default)) return s or default def askint(prompt, default): s = raw_input("%s [%s] " % (prompt, str(default))) if s: return string.atoi(s) return default def compare(local, remote, mode): print print "PWD =", repr(os.getcwd()) sums_id = remote._send('sumlist') subdirs_id = remote._send('listsubdirs') remote._flush() print "calculating local sums ..." lsumdict = {} for name, info in local.sumlist(): lsumdict[name] = info print "getting remote sums ..." sums = remote._recv(sums_id) print "got", len(sums) rsumdict = {} for name, rsum in sums: rsumdict[name] = rsum if not lsumdict.has_key(name): print repr(name), "only remote" if 'r' in mode and 'c' in mode: recvfile(local, remote, name) else: lsum = lsumdict[name] if lsum != rsum: print repr(name), rmtime = remote.mtime(name) lmtime = local.mtime(name) if rmtime > lmtime: print "remote newer", if 'r' in mode: recvfile(local, remote, name) elif lmtime > rmtime: print "local newer", if 'w' in mode: sendfile(local, remote, name) else: print "same mtime but different sum?!?!", print for name in lsumdict.keys(): if not rsumdict.keys(): print repr(name), "only locally", fl() if 'w' in mode and 'c' in mode: sendfile(local, remote, name) elif 'r' in mode and 'd' in mode: os.unlink(name) print "removed." print print "gettin subdirs ..." subdirs = remote._recv(subdirs_id) common = [] for name in subdirs: if local.isdir(name): print "Common subdirectory", repr(name) common.append(name) else: print "Remote subdirectory", repr(name), "not found locally" if 'r' in mode and 'c' in mode: pr = "Create local subdirectory %s? [y] " % \ repr(name) if 'y' in mode: ok = 'y' else: ok = ask(pr, "y") if ok[:1] in ('y', 'Y'): local.mkdir(name) print "Subdirectory %s made" % \ repr(name) common.append(name) lsubdirs = local.listsubdirs() for name in lsubdirs: if name not in subdirs: print "Local subdirectory", repr(name), "not found remotely" for name in common: print "Entering subdirectory", repr(name) local.cd(name) remote.cd(name) compare(local, remote, mode) remote.back() local.back() def sendfile(local, remote, name): try: remote.create(name) except (IOError, os.error), msg: print "cannot create:", msg return print "sending ...", fl() data = open(name).read() t1 = time.time() remote._send_noreply('write', name, data) remote._flush() t2 = time.time() dt = t2-t1 print len(data), "bytes in", round(dt), "seconds", if dt: print "i.e.", round(len(data)/dt), "bytes/sec", print def recvfile(local, remote, name): ok = 0 try: rv = recvfile_real(local, remote, name) ok = 1 return rv finally: if not ok: print "*** recvfile of %r failed, deleting" % (name,) local.delete(name) def recvfile_real(local, remote, name): try: local.create(name) except (IOError, os.error), msg: print "cannot create:", msg return print "receiving ...", fl() f = open(name, 'w') t1 = time.time() length = 4*1024 offset = 0 id = remote._send('read', name, offset, length) remote._flush() while 1: newoffset = offset + length newid = remote._send('read', name, newoffset, length) data = remote._recv(id) id = newid if not data: break f.seek(offset) f.write(data) offset = newoffset size = f.tell() t2 = time.time() f.close() dt = t2-t1 print size, "bytes in", round(dt), "seconds", if dt: print "i.e.", size//dt, "bytes/sec", print remote._recv(id) # ignored def fl(): sys.stdout.flush() if __name__ == '__main__': main()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
.FSProxy.pyo.40009 | File | 12.49 KB | 0644 |
|
.RCSProxy.pyo.40009 | File | 7.57 KB | 0644 |
|
.client.pyo.40009 | File | 6.57 KB | 0644 |
|
.cmdfw.pyo.40009 | File | 5.12 KB | 0644 |
|
.cmptree.pyo.40009 | File | 5.98 KB | 0644 |
|
.cvslib.pyo.40009 | File | 12.83 KB | 0644 |
|
.cvslock.pyo.40009 | File | 8.36 KB | 0644 |
|
.mac.pyo.40009 | File | 597 B | 0644 |
|
.makechangelog.pyo.40009 | File | 3.04 KB | 0644 |
|
.rcsclient.pyo.40009 | File | 2.05 KB | 0644 |
|
.rcslib.pyo.40009 | File | 11.28 KB | 0644 |
|
.rcvs.pyo.40009 | File | 14.08 KB | 0644 |
|
.rrcs.pyo.40009 | File | 5.5 KB | 0644 |
|
.security.pyo.40009 | File | 1.64 KB | 0644 |
|
.server.pyo.40009 | File | 5.83 KB | 0644 |
|
.sumtree.pyo.40009 | File | 903 B | 0644 |
|
FSProxy.py | File | 7.64 KB | 0644 |
|
FSProxy.pyc | File | 12.49 KB | 0644 |
|
FSProxy.pyo | File | 12.49 KB | 0644 |
|
RCSProxy.py | File | 4.61 KB | 0755 |
|
RCSProxy.pyc | File | 7.57 KB | 0644 |
|
RCSProxy.pyo | File | 7.57 KB | 0644 |
|
README | File | 4.16 KB | 0644 |
|
client.py | File | 4.6 KB | 0644 |
|
client.pyc | File | 6.57 KB | 0644 |
|
client.pyo | File | 6.57 KB | 0644 |
|
cmdfw.py | File | 4.53 KB | 0644 |
|
cmdfw.pyc | File | 5.12 KB | 0644 |
|
cmdfw.pyo | File | 5.12 KB | 0644 |
|
cmptree.py | File | 5.64 KB | 0644 |
|
cmptree.pyc | File | 5.98 KB | 0644 |
|
cmptree.pyo | File | 5.98 KB | 0644 |
|
cvslib.py | File | 9.94 KB | 0644 |
|
cvslib.pyc | File | 12.83 KB | 0644 |
|
cvslib.pyo | File | 12.83 KB | 0644 |
|
cvslock.py | File | 6.61 KB | 0644 |
|
cvslock.pyc | File | 8.36 KB | 0644 |
|
cvslock.pyo | File | 8.36 KB | 0644 |
|
mac.py | File | 352 B | 0644 |
|
mac.pyc | File | 597 B | 0644 |
|
mac.pyo | File | 597 B | 0644 |
|
makechangelog.py | File | 2.92 KB | 0755 |
|
makechangelog.pyc | File | 3.04 KB | 0644 |
|
makechangelog.pyo | File | 3.04 KB | 0644 |
|
rcsbump | File | 742 B | 0755 |
|
rcsclient.py | File | 1.76 KB | 0644 |
|
rcsclient.pyc | File | 2.05 KB | 0644 |
|
rcsclient.pyo | File | 2.05 KB | 0644 |
|
rcslib.py | File | 10.08 KB | 0644 |
|
rcslib.pyc | File | 11.28 KB | 0644 |
|
rcslib.pyo | File | 11.28 KB | 0644 |
|
rcvs | File | 114 B | 0755 |
|
rcvs.py | File | 13.33 KB | 0755 |
|
rcvs.pyc | File | 14.08 KB | 0644 |
|
rcvs.pyo | File | 14.08 KB | 0644 |
|
rrcs | File | 114 B | 0755 |
|
rrcs.py | File | 3.9 KB | 0755 |
|
rrcs.pyc | File | 5.5 KB | 0644 |
|
rrcs.pyo | File | 5.5 KB | 0644 |
|
security.py | File | 1.07 KB | 0644 |
|
security.pyc | File | 1.64 KB | 0644 |
|
security.pyo | File | 1.64 KB | 0644 |
|
server.py | File | 4.47 KB | 0644 |
|
server.pyc | File | 5.83 KB | 0644 |
|
server.pyo | File | 5.83 KB | 0644 |
|
sumtree.py | File | 518 B | 0644 |
|
sumtree.pyc | File | 903 B | 0644 |
|
sumtree.pyo | File | 903 B | 0644 |
|