Abstract manifest branch creation from init to the manifest object

This permits the XML style manifest to use 'default', while other
types can use their own creation strategy for the current branch.

Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/manifest.py b/manifest.py
index 0762098..a2fc960 100644
--- a/manifest.py
+++ b/manifest.py
@@ -40,5 +40,8 @@
   def projects(self):
     return {}
 
+  def InitBranch(self):
+    pass
+
   def SetMRefs(self, project):
     pass
diff --git a/manifest_xml.py b/manifest_xml.py
index 66cdf3e..45896be 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -169,6 +169,12 @@
     self._Load()
     return self._default
 
+  def InitBranch(self):
+    m = self.manifestProject
+    if m.CurrentBranch is None:
+      return m.StartBranch('default')
+    return True
+
   def SetMRefs(self, project):
     if self.branch:
       project._InitAnyMRef(R_M + self.branch)
diff --git a/subcmds/init.py b/subcmds/init.py
index ec87d03..0075b0b 100644
--- a/subcmds/init.py
+++ b/subcmds/init.py
@@ -130,10 +130,9 @@
     m.Sync_LocalHalf(syncbuf)
     syncbuf.Finish()
 
-    if is_new or m.CurrentBranch is None:
-      if not m.StartBranch('default'):
-        print >>sys.stderr, 'fatal: cannot create default in manifest'
-        sys.exit(1)
+    if not self.manifest.InitBranch():
+      print >>sys.stderr, 'fatal: cannot create branch in manifest'
+      sys.exit(1)
 
   def _LinkManifest(self, name):
     if not name: