Implement downloading code to a robot from Bazel

Change-Id: I6d9ab28b0cbcbb1b2a59476548220c548efb3773
diff --git a/aos/prime/downloader/downloader.py b/aos/prime/downloader/downloader.py
index de3f872..55b3115 100644
--- a/aos/prime/downloader/downloader.py
+++ b/aos/prime/downloader/downloader.py
@@ -2,15 +2,46 @@
 # macro. Everything before the first -- is a hard-coded list of files to
 # download.
 
+from __future__ import print_function
+
 import sys
 import subprocess
+import re
+import os
 
 def main(argv):
   srcs = argv[:argv.index('--')]
   args = argv[argv.index('--') + 1:]
 
-  # TODO(Brian): Actually do something useful...
-  subprocess.check_call(['echo', 'scp'] + srcs + ['%s:/tmp' % args[0]])
+  ROBORIO_TARGET_DIR = '/home/admin/robot_code'
+  ROBORIO_USER = 'admin'
+
+  target_dir = ROBORIO_TARGET_DIR
+  user = ROBORIO_USER
+  destination = args[-1]
+
+  result = re.match('(?:([^:@]+)@)?([^:@]+)(?::([^:@]+))?', destination)
+  if not result:
+    print('Not sure how to parse destination "%s"!' % destination,
+          file=sys.stderr)
+    return 1
+  if result.group(1):
+    user = result.group(1)
+  hostname = result.group(2)
+  if result.group(3):
+    target_dir = result.group(3)
+
+  ssh_target = '%s@%s' % (user, hostname)
+
+  subprocess.check_call(
+      ['rsync', '-z', '--copy-links'] + srcs +
+      ['%s:%s' % (ssh_target, target_dir)])
+  subprocess.check_call(
+      ('ssh', ssh_target, '&&'.join([
+          'chmod u+s %s/starter_exe' % target_dir,
+          'echo \'Done moving new executables into place\'',
+          'bash -c \'sync && sync && sync\'',
+        ])))
 
 if __name__ == '__main__':
   main(sys.argv)