summaryrefslogtreecommitdiffstats
path: root/subcmds/init.py
diff options
context:
space:
mode:
Diffstat (limited to 'subcmds/init.py')
-rw-r--r--subcmds/init.py76
1 files changed, 58 insertions, 18 deletions
diff --git a/subcmds/init.py b/subcmds/init.py
index 17edfa05..2ca4e163 100644
--- a/subcmds/init.py
+++ b/subcmds/init.py
@@ -21,6 +21,9 @@ from command import InteractiveCommand, MirrorSafeCommand
21from error import ManifestParseError 21from error import ManifestParseError
22from project import SyncBuffer 22from project import SyncBuffer
23from git_command import git_require, MIN_GIT_VERSION 23from git_command import git_require, MIN_GIT_VERSION
24from manifest_submodule import SubmoduleManifest
25from manifest_xml import XmlManifest
26from subcmds.sync import _ReloadManifest
24 27
25class Init(InteractiveCommand, MirrorSafeCommand): 28class Init(InteractiveCommand, MirrorSafeCommand):
26 common = True 29 common = True
@@ -72,9 +75,15 @@ to update the working directory files.
72 g.add_option('-b', '--manifest-branch', 75 g.add_option('-b', '--manifest-branch',
73 dest='manifest_branch', 76 dest='manifest_branch',
74 help='manifest branch or revision', metavar='REVISION') 77 help='manifest branch or revision', metavar='REVISION')
75 g.add_option('-m', '--manifest-name', 78 g.add_option('-o', '--origin',
76 dest='manifest_name', default='default.xml', 79 dest='manifest_origin',
77 help='initial manifest file', metavar='NAME.xml') 80 help="use REMOTE instead of 'origin' to track upstream",
81 metavar='REMOTE')
82 if isinstance(self.manifest, XmlManifest) \
83 or not self.manifest.manifestProject.Exists:
84 g.add_option('-m', '--manifest-name',
85 dest='manifest_name', default='default.xml',
86 help='initial manifest file', metavar='NAME.xml')
78 g.add_option('--mirror', 87 g.add_option('--mirror',
79 dest='mirror', action='store_true', 88 dest='mirror', action='store_true',
80 help='mirror the forrest') 89 help='mirror the forrest')
@@ -94,30 +103,42 @@ to update the working directory files.
94 dest='no_repo_verify', action='store_true', 103 dest='no_repo_verify', action='store_true',
95 help='do not verify repo source code') 104 help='do not verify repo source code')
96 105
97 def _SyncManifest(self, opt): 106 def _ApplyOptions(self, opt, is_new):
98 m = self.manifest.manifestProject 107 m = self.manifest.manifestProject
99 is_new = not m.Exists
100 108
101 if is_new: 109 if is_new:
102 if not opt.manifest_url: 110 if opt.manifest_origin:
103 print >>sys.stderr, 'fatal: manifest url (-u) is required.' 111 m.remote.name = opt.manifest_origin
104 sys.exit(1)
105
106 if not opt.quiet:
107 print >>sys.stderr, 'Getting manifest ...'
108 print >>sys.stderr, ' from %s' % opt.manifest_url
109 m._InitGitDir()
110 112
111 if opt.manifest_branch: 113 if opt.manifest_branch:
112 m.revisionExpr = opt.manifest_branch 114 m.revisionExpr = opt.manifest_branch
113 else: 115 else:
114 m.revisionExpr = 'refs/heads/master' 116 m.revisionExpr = 'refs/heads/master'
115 else: 117 else:
118 if opt.manifest_origin:
119 print >>sys.stderr, 'fatal: cannot change origin name'
120 sys.exit(1)
121
116 if opt.manifest_branch: 122 if opt.manifest_branch:
117 m.revisionExpr = opt.manifest_branch 123 m.revisionExpr = opt.manifest_branch
118 else: 124 else:
119 m.PreSync() 125 m.PreSync()
120 126
127 def _SyncManifest(self, opt):
128 m = self.manifest.manifestProject
129 is_new = not m.Exists
130
131 if is_new:
132 if not opt.manifest_url:
133 print >>sys.stderr, 'fatal: manifest url (-u) is required.'
134 sys.exit(1)
135
136 if not opt.quiet:
137 print >>sys.stderr, 'Getting manifest ...'
138 print >>sys.stderr, ' from %s' % opt.manifest_url
139 m._InitGitDir()
140
141 self._ApplyOptions(opt, is_new)
121 if opt.manifest_url: 142 if opt.manifest_url:
122 r = m.GetRemote(m.remote.name) 143 r = m.GetRemote(m.remote.name)
123 r.url = opt.manifest_url 144 r.url = opt.manifest_url
@@ -130,6 +151,7 @@ to update the working directory files.
130 if opt.mirror: 151 if opt.mirror:
131 if is_new: 152 if is_new:
132 m.config.SetString('repo.mirror', 'true') 153 m.config.SetString('repo.mirror', 'true')
154 m.config.ClearCache()
133 else: 155 else:
134 print >>sys.stderr, 'fatal: --mirror not supported on existing client' 156 print >>sys.stderr, 'fatal: --mirror not supported on existing client'
135 sys.exit(1) 157 sys.exit(1)
@@ -139,14 +161,33 @@ to update the working directory files.
139 print >>sys.stderr, 'fatal: cannot obtain manifest %s' % r.url 161 print >>sys.stderr, 'fatal: cannot obtain manifest %s' % r.url
140 sys.exit(1) 162 sys.exit(1)
141 163
164 if is_new and SubmoduleManifest.IsBare(m):
165 new = self.GetManifest(reparse=True, type=SubmoduleManifest)
166 if m.gitdir != new.manifestProject.gitdir:
167 os.rename(m.gitdir, new.manifestProject.gitdir)
168 new = self.GetManifest(reparse=True, type=SubmoduleManifest)
169 m = new.manifestProject
170 self._ApplyOptions(opt, is_new)
171
172 if not is_new:
173 # Force the manifest to load if it exists, the old graph
174 # may be needed inside of _ReloadManifest().
175 #
176 self.manifest.projects
177
142 syncbuf = SyncBuffer(m.config) 178 syncbuf = SyncBuffer(m.config)
143 m.Sync_LocalHalf(syncbuf) 179 m.Sync_LocalHalf(syncbuf)
144 syncbuf.Finish() 180 syncbuf.Finish()
145 181
146 if is_new or m.CurrentBranch is None: 182 if isinstance(self.manifest, XmlManifest):
147 if not m.StartBranch('default'): 183 self._LinkManifest(opt.manifest_name)
148 print >>sys.stderr, 'fatal: cannot create default in manifest' 184 _ReloadManifest(self)
149 sys.exit(1) 185
186 self._ApplyOptions(opt, is_new)
187
188 if not self.manifest.InitBranch():
189 print >>sys.stderr, 'fatal: cannot create branch in manifest'
190 sys.exit(1)
150 191
151 def _LinkManifest(self, name): 192 def _LinkManifest(self, name):
152 if not name: 193 if not name:
@@ -229,7 +270,6 @@ to update the working directory files.
229 def Execute(self, opt, args): 270 def Execute(self, opt, args):
230 git_require(MIN_GIT_VERSION, fail=True) 271 git_require(MIN_GIT_VERSION, fail=True)
231 self._SyncManifest(opt) 272 self._SyncManifest(opt)
232 self._LinkManifest(opt.manifest_name)
233 273
234 if os.isatty(0) and os.isatty(1) and not self.manifest.IsMirror: 274 if os.isatty(0) and os.isatty(1) and not self.manifest.IsMirror:
235 self._ConfigureUser() 275 self._ConfigureUser()