diff --git a/docs/internal-fs-layout.md b/docs/internal-fs-layout.md index 5e8690b..3537dfd 100644 --- a/docs/internal-fs-layout.md +++ b/docs/internal-fs-layout.md @@ -134,6 +134,7 @@ User controlled settings are initialized when running `repo init`. |-------------------|---------------------------|-------------| | manifest.groups | `--groups` & `--platform` | The manifest groups to sync | | repo.archive | `--archive` | Use `git archive` for checkouts | +| repo.clonebundle | `--clone-bundle` | Whether the initial sync used clone.bundle explicitly | | repo.clonefilter | `--clone-filter` | Filter setting when using [partial git clones] | | repo.depth | `--depth` | Create shallow checkouts when cloning | | repo.dissociate | `--dissociate` | Dissociate from any reference/mirrors after initial clone | diff --git a/manifest_xml.py b/manifest_xml.py index b2918ca..b6aef51 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -501,6 +501,14 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md self._Load() return self._manifest_server + @property + def CloneBundle(self): + clone_bundle = self.manifestProject.config.GetBoolean('repo.clonebundle') + if clone_bundle is None: + return False if self.manifestProject.config.GetBoolean('repo.partialclone') else True + else: + return clone_bundle + @property def CloneFilter(self): if self.manifestProject.config.GetBoolean('repo.partialclone'): diff --git a/repo b/repo index be59c87..18c7e77 100755 --- a/repo +++ b/repo @@ -317,9 +317,11 @@ def GetParser(gitc_init=False): help='restrict manifest projects to ones with a specified ' 'platform group [auto|all|none|linux|darwin|...]', metavar='PLATFORM') + group.add_option('--clone-bundle', action='store_true', + help='enable use of /clone.bundle on HTTP/HTTPS (default if not --partial-clone)') group.add_option('--no-clone-bundle', - dest='clone_bundle', default=True, action='store_false', - help='disable use of /clone.bundle on HTTP/HTTPS') + dest='clone_bundle', action='store_false', + help='disable use of /clone.bundle on HTTP/HTTPS (default if --partial-clone)') group.add_option('--no-tags', dest='tags', default=True, action='store_false', help="don't fetch tags in the manifest") @@ -502,6 +504,9 @@ def _Init(args, gitc_init=False): opt.quiet = opt.output_mode is False opt.verbose = opt.output_mode is True + if opt.clone_bundle is None: + opt.clone_bundle = False if opt.partial_clone else True + url = opt.repo_url or REPO_URL rev = opt.repo_rev or REPO_REV diff --git a/subcmds/init.py b/subcmds/init.py index ce8b018..eb82e2e 100644 --- a/subcmds/init.py +++ b/subcmds/init.py @@ -155,9 +155,11 @@ to update the working directory files. help='restrict manifest projects to ones with a specified ' 'platform group [auto|all|none|linux|darwin|...]', metavar='PLATFORM') + g.add_option('--clone-bundle', action='store_true', + help='force use of /clone.bundle on HTTP/HTTPS (default if not --partial-clone)') g.add_option('--no-clone-bundle', - dest='clone_bundle', default=True, action='store_false', - help='disable use of /clone.bundle on HTTP/HTTPS') + dest='clone_bundle', action='store_false', + help='disable use of /clone.bundle on HTTP/HTTPS (default if --partial-clone)') g.add_option('--no-tags', dest='tags', default=True, action='store_false', help="don't fetch tags in the manifest") @@ -303,6 +305,11 @@ to update the working directory files. else: opt.clone_filter = None + if opt.clone_bundle is None: + opt.clone_bundle = False if opt.partial_clone else True + else: + m.config.SetString('repo.clonebundle', 'true' if opt.clone_bundle else 'false') + if opt.submodules: m.config.SetString('repo.submodules', 'true') diff --git a/subcmds/sync.py b/subcmds/sync.py index efd3961..a40dd5e 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py @@ -247,8 +247,9 @@ later is required to fix a server side protocol bug. p.add_option('-m', '--manifest-name', dest='manifest_name', help='temporary manifest to use for this sync', metavar='NAME.xml') - p.add_option('--no-clone-bundle', - dest='clone_bundle', default=True, action='store_false', + p.add_option('--clone-bundle', action='store_true', + help='enable use of /clone.bundle on HTTP/HTTPS') + p.add_option('--no-clone-bundle', dest='clone_bundle', action='store_false', help='disable use of /clone.bundle on HTTP/HTTPS') p.add_option('-u', '--manifest-server-username', action='store', dest='manifest_server_username', @@ -836,6 +837,9 @@ later is required to fix a server side protocol bug. smart_sync_manifest_path = os.path.join( self.manifest.manifestProject.worktree, 'smart_sync_override.xml') + if opt.clone_bundle is None: + opt.clone_bundle = self.manifest.CloneBundle + if opt.smart_sync or opt.smart_tag: manifest_name = self._SmartSyncSetup(opt, smart_sync_manifest_path) else: