diff --git a/manifest_xml.py b/manifest_xml.py index 9189eec4..c9e5c405 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -228,7 +228,11 @@ class XmlManifest(object): @property def manifest_server(self): self._Load() - return self._manifest_server + + if self._manifest_server: + return self._manifest_server + + return self.manifestProject.config.GetString('repo.manifest-server') @property def IsMirror(self): diff --git a/repo b/repo index 0e779833..1c71f072 100755 --- a/repo +++ b/repo @@ -28,7 +28,7 @@ if __name__ == '__main__': del magic # increment this whenever we make important changes to this script -VERSION = (1, 13) +VERSION = (1, 14) # increment this if the MAINTAINER_KEYS block is modified KEYRING_VERSION = (1,0) @@ -149,7 +149,7 @@ def _Init(args): """Installs repo by cloning it over the network. """ opt, args = init_optparse.parse_args(args) - if args or not opt.manifest_url: + if args: init_optparse.print_usage() sys.exit(1) diff --git a/subcmds/init.py b/subcmds/init.py index 1c23d620..e80d698b 100644 --- a/subcmds/init.py +++ b/subcmds/init.py @@ -23,6 +23,7 @@ from error import ManifestParseError from project import SyncBuffer from git_config import GitConfig from git_command import git_require, MIN_GIT_VERSION +from git_config import GitConfig class Init(InteractiveCommand, MirrorSafeCommand): common = True @@ -36,6 +37,20 @@ The latest repo source code and manifest collection is downloaded from the server and is installed in the .repo/ directory in the current working directory. +The optional -u argument can be used to specify a URL to the +manifest project. It is also possible to have a git configuration +section as below to use 'identifier' as argument to -u: + + [repo-manifest "identifier"] + url = ... + server = ... + reference = ... + +Only the url is required - the others are optional. + +If no -u argument is specified, the 'repo-manifest' section named +'default' will be used if present. + The optional -b argument can be used to select the manifest branch to checkout and use. If no branch is specified, master is assumed. @@ -69,7 +84,7 @@ to update the working directory files. # Manifest g = p.add_option_group('Manifest options') g.add_option('-u', '--manifest-url', - dest='manifest_url', + dest='manifest_url', default='default', help='manifest repository location', metavar='URL') g.add_option('-b', '--manifest-branch', dest='manifest_branch', @@ -102,10 +117,25 @@ to update the working directory files. def _SyncManifest(self, opt): m = self.manifest.manifestProject is_new = not m.Exists + manifest_server = None + + # The manifest url may point out a manifest section in the config + key = 'repo-manifest.%s.' % opt.manifest_url + if GitConfig.ForUser().GetString(key + 'url'): + opt.manifest_url = GitConfig.ForUser().GetString(key + 'url') + + # Also copy other options to the manifest config if not specified already. + if not opt.reference: + opt.reference = GitConfig.ForUser().GetString(key + 'reference') + manifest_server = GitConfig.ForUser().GetString(key + 'server') if is_new: - if not opt.manifest_url: - print >>sys.stderr, 'fatal: manifest url (-u) is required.' + if not opt.manifest_url or opt.manifest_url == 'default': + print >>sys.stderr, """\ +fatal: missing manifest url (-u) and no default found. + + tip: The global git configuration key 'repo-manifest.default.url' can + be used to specify a default url.""" sys.exit(1) if not opt.quiet: @@ -129,6 +159,9 @@ to update the working directory files. r.ResetFetch() r.Save() + if manifest_server: + m.config.SetString('repo.manifest-server', manifest_server) + if opt.reference: m.config.SetString('repo.reference', opt.reference)