#!/usr/bin/python import sys import os import deb822 def get_filenames(f): base = os.path.dirname(f) if f.endswith('.dsc'): d = deb822.Dsc(file(f)) elif f.endswith('.changes'): d = deb822.Changes(file(f)) return [os.path.join(base, elt['name']) for elt in d['Files']] + [f] def get_distro(files_list): "Runs sed on the .diff.gz to find what pbuilder to run." ## Assumes that pbuilders are named in the pbuilder-sed , pbuilder-gutsy ## style. for file in files_list: if file.endswith('.changes'): changes_file = file.open(file, 'r') for line in changes_file.readlines(): if line.split(';')[0].split()[-1] == True: return line.split(';')[0].split()[-1] def get_dsc(files_list): for file in files_list: if file.endswith('.dsc'): return file if len (sys.argv) < 3: print "Usage: drsync foo.dsc [OPTIONS...] user@host:/path/to/incomming" print "See man rsync(1) for accepted Options" dest = sys.argv[-1] files = [] for f in sys.argv[1:-1]: files += get_filenames(f) distro = get_distro(files) if dest.endswith('/') == False: rdsc = dest.split(':')[-1] + '/' + get_dsc(files) else: rdsc = dest.split(':')[-1] + get_dsc(files) os.execvp('rsync', ['rsync'] + files + [dest]) os.execvp('ssh', ['ssh'] + [dest] + '": pbuilder-' + distro + 'build ' + rdsc)