#!/usr/bin/env python import sys import subprocess NAME = 'unwrap_externals.py' USAGE = 'USAGE: %s [uri]'%NAME def unwrap_external(uri): cmd = ['svn', 'propget', 'svn:externals', uri] output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0] ret = [] for l in output.split('\n'): if len(l) > 0: ls = l.split() r = None if len(ls) == 2: n, u = ls else: n, r, u = ls # r should be of the form -r123; extract the number if r[0:2] == '-r': r = r[2:] # Recurse sub_ret = unwrap_external(u) if sub_ret == []: ret.append([n,r,u]) else: ret.extend(sub_ret) return ret def get_svn_revision_from_uri(uri): cmd = ['svn', 'info', uri] output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0] for l in output.split('\n'): if l.startswith('Revision'): rev = l.split()[1] return rev return None def write_rosconfig_file(entries): for n, r, u in entries: if r: rev = r else: rev = get_svn_revision_from_uri(u) print '- svn:' # Use the @ syntax, for archival purposes print ' uri: %s@%s'%(u, rev) print ' local-name: %s'%(n) if __name__ == '__main__': if len(sys.argv) != 2: print USAGE sys.exit(1) uri = sys.argv[1] entries = unwrap_external(uri) write_rosconfig_file(entries)