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 |
