mbligh | c6b01ed | 2006-10-13 17:03:26 +0000 | [diff] [blame] | 1 | #!/usr/bin/python |
mbligh | 2c6e693 | 2006-10-07 22:08:47 +0000 | [diff] [blame] | 2 | import os |
| 3 | |
| 4 | class rsync: |
| 5 | command = '/usr/bin/rsync -rltvz' |
| 6 | |
| 7 | def __init__(self, prefix, target, excludes = []): |
| 8 | if not os.path.isdir(target): |
mbligh | 2276cb7 | 2006-10-07 23:40:38 +0000 | [diff] [blame] | 9 | os.makedirs(target) |
mbligh | 2c6e693 | 2006-10-07 22:08:47 +0000 | [diff] [blame] | 10 | 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): |
mbligh | 9fb0c6b | 2006-10-08 15:44:42 +0000 | [diff] [blame] | 27 | os.makedirs(dest) |
mbligh | 2c6e693 | 2006-10-07 22:08:47 +0000 | [diff] [blame] | 28 | src = os.path.join(self.prefix, src) |
| 29 | cmd = self.command + ' %s "%s" "%s"' % (self.exclude, src, dest) |
mbligh | 6b1ef87 | 2006-10-07 23:12:18 +0000 | [diff] [blame] | 30 | # print cmd + ' >> %s 2>&1' % self.tmpfile |
| 31 | if os.system(cmd + ' >> %s 2>&1' % self.tmpfile): |
mbligh | 2c6e693 | 2006-10-07 22:08:47 +0000 | [diff] [blame] | 32 | raise 'rsync command failed' |