#!/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)
