sync: Add CLI flag for globally disabling submodule fetch

A global setting for disabling fetching of submodules is useful
since this can currently otherwise only be done by modifying
the manifest, or by explicitly providing projects on command line.

Add this setting as --no-fetch-submodules to mirror the existing
--fetch-submodules.

Change-Id: Ic727c54f11a594aa52315751284b87138cf246bb
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/607641
Commit-Queue: Josef Malmstrom <Josef.Malmstrom@arm.com>
Reviewed-by: Gavin Mak <gavinmak@google.com>
Tested-by: Josef Malmstrom <Josef.Malmstrom@arm.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
This commit is contained in:
Josef Malmström authored and gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com committed 2026-07-16 01:19:51 -07:00
1 parent 0398c6718e
commit 978adb7ea5
7 files changed
+83 -8

No files matched your search

+16 -4
View File
@@ -17,6 +17,7 @@ import multiprocessing
import optparse
import os
import re
from typing import TYPE_CHECKING
from error import InvalidProjectGroupsError
from error import NoSuchProjectError
@@ -25,6 +26,10 @@ from event_log import EventLog
import progress
if TYPE_CHECKING:
from project import Project
# Are we generating man-pages?
GENERATE_MANPAGES = os.environ.get("_REPO_GENERATE_MANPAGES_") == " indeed! "
@@ -375,7 +380,7 @@ class Command:
manifest=None,
groups="",
missing_ok=False,
submodules_ok=False,
submodules_ok=None,
all_manifests=False,
):
"""A list of projects that match the arguments.
@@ -385,7 +390,9 @@ class Command:
manifest: an XmlManifest, the manifest to use, or None for default.
groups: a string, the manifest groups in use.
missing_ok: a boolean, whether to allow missing projects.
submodules_ok: a boolean, whether to allow submodules.
submodules_ok: whether to allow submodules. True allows them for
all projects, False disallows them for all projects, and None
defers to each project's sync-s setting.
all_manifests: a boolean, if True then all manifests and
submanifests are used. If False, then only the local
(sub)manifest is used.
@@ -403,6 +410,11 @@ class Command:
all_projects_list = manifest.projects
result = []
def should_include_submodules(project: "Project") -> bool:
if submodules_ok is None:
return project.sync_s
return submodules_ok
if not groups:
groups = manifest.GetManifestGroupsStr()
groups = [x for x in re.split(r"[,\s]+", groups) if x]
@@ -410,7 +422,7 @@ class Command:
if not args:
derived_projects = {}
for project in all_projects_list:
if submodules_ok or project.sync_s:
if should_include_submodules(project):
derived_projects.update(
(p.RelPath(local=False), p)
for p in project.GetDerivedSubprojects()
@@ -452,7 +464,7 @@ class Command:
if (
project
and not project.Derived
and (submodules_ok or project.sync_s)
and should_include_submodules(project)
):
search_again = False
for subproject in project.GetDerivedSubprojects():