blob: 0133cb67f755952034a3937f8650c78e4f254d31 [file] [log] [blame]
mblighc6b01ed2006-10-13 17:03:26 +00001#!/usr/bin/python
mbligh2c6e6932006-10-07 22:08:47 +00002import os
3
4class rsync:
5 command = '/usr/bin/rsync -rltvz'
6
7 def __init__(self, prefix, target, excludes = []):
8 if not os.path.isdir(target):
mbligh2276cb72006-10-07 23:40:38 +00009 os.makedirs(target)
mbligh2c6e6932006-10-07 22:08:47 +000010 self.prefix = prefix
11 self.target = target
12 # Have to use a tmpfile rather than a pipe, else we could
13 # trigger from a file that's still only partially mirrored
14 self.tmpfile = '/tmp/mirror.%d' % os.getpid()
15 if os.path.exists(self.tmpfile):
16 os.remove(self.tmpfile)
17 self.exclude = ' '.join(['--exclude ' + x for x in excludes])
18
19
20 def __del__(self):
21 os.remove(self.tmpfile)
22
23
24 def sync(self, src, dest):
25 os.chdir(self.target)
26 if not os.path.isdir(dest):
mbligh9fb0c6b2006-10-08 15:44:42 +000027 os.makedirs(dest)
mbligh2c6e6932006-10-07 22:08:47 +000028 src = os.path.join(self.prefix, src)
29 cmd = self.command + ' %s "%s" "%s"' % (self.exclude, src, dest)
mbligh6b1ef872006-10-07 23:12:18 +000030 # print cmd + ' >> %s 2>&1' % self.tmpfile
31 if os.system(cmd + ' >> %s 2>&1' % self.tmpfile):
mbligh2c6e6932006-10-07 22:08:47 +000032 raise 'rsync command failed'