init: add -o, --origin to name manifest remote

The -o option permits the user to control the name of the manifest's
remote, which normally is hardcoded to be 'origin', but can differ
because we derive it at runtime from the configuration file.

Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/subcmds/init.py b/subcmds/init.py
index 0586721..53c3a01 100644
--- a/subcmds/init.py
+++ b/subcmds/init.py
@@ -62,6 +62,10 @@
     g.add_option('-b', '--manifest-branch',
                  dest='manifest_branch',
                  help='manifest branch or revision', metavar='REVISION')
+    g.add_option('-o', '--origin',
+                 dest='manifest_origin',
+                 help="use REMOTE instead of 'origin' to track upstream",
+                 metavar='REMOTE')
     if isinstance(self.manifest, XmlManifest) \
     or not self.manifest.manifestProject.Exists:
       g.add_option('-m', '--manifest-name',
@@ -84,6 +88,27 @@
                  dest='no_repo_verify', action='store_true',
                  help='do not verify repo source code')
 
+  def _ApplyOptions(self, opt, is_new):
+    m = self.manifest.manifestProject
+
+    if is_new:
+      if opt.manifest_origin:
+        m.remote.name = opt.manifest_origin
+
+      if opt.manifest_branch:
+        m.revisionExpr = opt.manifest_branch
+      else:
+        m.revisionExpr = 'refs/heads/master'
+    else:
+      if opt.manifest_origin:
+        print >>sys.stderr, 'fatal: cannot change origin name'
+        sys.exit(1)
+
+      if opt.manifest_branch:
+        m.revisionExpr = opt.manifest_branch
+      else:
+        m.PreSync()
+
   def _SyncManifest(self, opt):
     m = self.manifest.manifestProject
     is_new = not m.Exists
@@ -98,16 +123,7 @@
         print >>sys.stderr, '   from %s' % opt.manifest_url
       m._InitGitDir()
 
-      if opt.manifest_branch:
-        m.revisionExpr = opt.manifest_branch
-      else:
-        m.revisionExpr = 'refs/heads/master'
-    else:
-      if opt.manifest_branch:
-        m.revisionExpr = opt.manifest_branch
-      else:
-        m.PreSync()
-
+    self._ApplyOptions(opt, is_new)
     if opt.manifest_url:
       r = m.GetRemote(m.remote.name)
       r.url = opt.manifest_url