diff options
-rw-r--r-- | project.py | 21 | ||||
-rw-r--r-- | subcmds/init.py | 26 |
2 files changed, 36 insertions, 11 deletions
@@ -2311,6 +2311,27 @@ class Project(object): | |||
2311 | # Enable the extension! | 2311 | # Enable the extension! |
2312 | self.config.SetString('extensions.%s' % (key,), value) | 2312 | self.config.SetString('extensions.%s' % (key,), value) |
2313 | 2313 | ||
2314 | def ResolveRemoteHead(self, name=None): | ||
2315 | """Find out what the default branch (HEAD) points to. | ||
2316 | |||
2317 | Normally this points to refs/heads/master, but projects are moving to main. | ||
2318 | Support whatever the server uses rather than hardcoding "master" ourselves. | ||
2319 | """ | ||
2320 | if name is None: | ||
2321 | name = self.remote.name | ||
2322 | |||
2323 | # The output will look like (NB: tabs are separators): | ||
2324 | # ref: refs/heads/master HEAD | ||
2325 | # 5f6803b100bb3cd0f534e96e88c91373e8ed1c44 HEAD | ||
2326 | output = self.bare_git.ls_remote('-q', '--symref', '--exit-code', name, 'HEAD') | ||
2327 | |||
2328 | for line in output.splitlines(): | ||
2329 | lhs, rhs = line.split('\t', 1) | ||
2330 | if rhs == 'HEAD' and lhs.startswith('ref:'): | ||
2331 | return lhs[4:].strip() | ||
2332 | |||
2333 | return None | ||
2334 | |||
2314 | def _CheckForImmutableRevision(self): | 2335 | def _CheckForImmutableRevision(self): |
2315 | try: | 2336 | try: |
2316 | # if revision (sha or tag) is not present then following function | 2337 | # if revision (sha or tag) is not present then following function |
diff --git a/subcmds/init.py b/subcmds/init.py index 41578076..5ba0d074 100644 --- a/subcmds/init.py +++ b/subcmds/init.py | |||
@@ -54,7 +54,8 @@ from the server and is installed in the .repo/ directory in the | |||
54 | current working directory. | 54 | current working directory. |
55 | 55 | ||
56 | The optional -b argument can be used to select the manifest branch | 56 | The optional -b argument can be used to select the manifest branch |
57 | to checkout and use. If no branch is specified, master is assumed. | 57 | to checkout and use. If no branch is specified, the remote's default |
58 | branch is used. | ||
58 | 59 | ||
59 | The optional -m argument can be used to specify an alternate manifest | 60 | The optional -m argument can be used to specify an alternate manifest |
60 | to be used. If no manifest is specified, the manifest default.xml | 61 | to be used. If no manifest is specified, the manifest default.xml |
@@ -215,24 +216,27 @@ to update the working directory files. | |||
215 | 216 | ||
216 | m._InitGitDir(mirror_git=mirrored_manifest_git) | 217 | m._InitGitDir(mirror_git=mirrored_manifest_git) |
217 | 218 | ||
218 | if opt.manifest_branch: | ||
219 | m.revisionExpr = opt.manifest_branch | ||
220 | else: | ||
221 | m.revisionExpr = 'refs/heads/master' | ||
222 | else: | ||
223 | if opt.manifest_branch: | ||
224 | m.revisionExpr = opt.manifest_branch | ||
225 | else: | ||
226 | m.PreSync() | ||
227 | |||
228 | self._ConfigureDepth(opt) | 219 | self._ConfigureDepth(opt) |
229 | 220 | ||
221 | # Set the remote URL before the remote branch as we might need it below. | ||
230 | if opt.manifest_url: | 222 | if opt.manifest_url: |
231 | r = m.GetRemote(m.remote.name) | 223 | r = m.GetRemote(m.remote.name) |
232 | r.url = opt.manifest_url | 224 | r.url = opt.manifest_url |
233 | r.ResetFetch() | 225 | r.ResetFetch() |
234 | r.Save() | 226 | r.Save() |
235 | 227 | ||
228 | if opt.manifest_branch: | ||
229 | m.revisionExpr = opt.manifest_branch | ||
230 | else: | ||
231 | if is_new: | ||
232 | default_branch = m.ResolveRemoteHead() | ||
233 | if default_branch is None: | ||
234 | # If the remote doesn't have HEAD configured, default to master. | ||
235 | default_branch = 'refs/heads/master' | ||
236 | m.revisionExpr = default_branch | ||
237 | else: | ||
238 | m.PreSync() | ||
239 | |||
236 | groups = re.split(r'[,\s]+', opt.groups) | 240 | groups = re.split(r'[,\s]+', opt.groups) |
237 | all_platforms = ['linux', 'darwin', 'windows'] | 241 | all_platforms = ['linux', 'darwin', 'windows'] |
238 | platformize = lambda x: 'platform-' + x | 242 | platformize = lambda x: 'platform-' + x |