summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/manifest-format.md4
-rw-r--r--manifest_xml.py41
-rw-r--r--project.py5
-rw-r--r--subcmds/info.py3
4 files changed, 39 insertions, 14 deletions
diff --git a/docs/manifest-format.md b/docs/manifest-format.md
index 6e671080..0d26296d 100644
--- a/docs/manifest-format.md
+++ b/docs/manifest-format.md
@@ -66,6 +66,7 @@ following DTD:
66 <!ATTLIST submanifest revision CDATA #IMPLIED> 66 <!ATTLIST submanifest revision CDATA #IMPLIED>
67 <!ATTLIST submanifest path CDATA #IMPLIED> 67 <!ATTLIST submanifest path CDATA #IMPLIED>
68 <!ATTLIST submanifest groups CDATA #IMPLIED> 68 <!ATTLIST submanifest groups CDATA #IMPLIED>
69 <!ATTLIST submanifest default-groups CDATA #IMPLIED>
69 70
70 <!ELEMENT project (annotation*, 71 <!ELEMENT project (annotation*,
71 project*, 72 project*,
@@ -302,6 +303,9 @@ in the included submanifest belong. This appends and recurses, meaning
302all projects in submanifests carry all parent submanifest groups. 303all projects in submanifests carry all parent submanifest groups.
303Same syntax as the corresponding element of `project`. 304Same syntax as the corresponding element of `project`.
304 305
306Attribute `default-groups`: The list of manifest groups to sync if no
307`--groups=` parameter was specified at init. When that list is empty, use this
308list instead of "default" as the list of groups to sync.
305 309
306### Element project 310### Element project
307 311
diff --git a/manifest_xml.py b/manifest_xml.py
index dbab974b..3c43295e 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -214,6 +214,7 @@ class _XmlSubmanifest:
214 revision: a string, the commitish. 214 revision: a string, the commitish.
215 manifestName: a string, the submanifest file name. 215 manifestName: a string, the submanifest file name.
216 groups: a list of strings, the groups to add to all projects in the submanifest. 216 groups: a list of strings, the groups to add to all projects in the submanifest.
217 default_groups: a list of strings, the default groups to sync.
217 path: a string, the relative path for the submanifest checkout. 218 path: a string, the relative path for the submanifest checkout.
218 parent: an XmlManifest, the parent manifest. 219 parent: an XmlManifest, the parent manifest.
219 annotations: (derived) a list of annotations. 220 annotations: (derived) a list of annotations.
@@ -226,6 +227,7 @@ class _XmlSubmanifest:
226 revision=None, 227 revision=None,
227 manifestName=None, 228 manifestName=None,
228 groups=None, 229 groups=None,
230 default_groups=None,
229 path=None, 231 path=None,
230 parent=None): 232 parent=None):
231 self.name = name 233 self.name = name
@@ -234,6 +236,7 @@ class _XmlSubmanifest:
234 self.revision = revision 236 self.revision = revision
235 self.manifestName = manifestName 237 self.manifestName = manifestName
236 self.groups = groups 238 self.groups = groups
239 self.default_groups = default_groups
237 self.path = path 240 self.path = path
238 self.parent = parent 241 self.parent = parent
239 self.annotations = [] 242 self.annotations = []
@@ -250,7 +253,8 @@ class _XmlSubmanifest:
250 os.path.join(parent.path_prefix, self.relpath), MANIFEST_FILE_NAME) 253 os.path.join(parent.path_prefix, self.relpath), MANIFEST_FILE_NAME)
251 rc = self.repo_client = RepoClient( 254 rc = self.repo_client = RepoClient(
252 parent.repodir, linkFile, parent_groups=','.join(groups) or '', 255 parent.repodir, linkFile, parent_groups=','.join(groups) or '',
253 submanifest_path=self.relpath, outer_client=outer_client) 256 submanifest_path=self.relpath, outer_client=outer_client,
257 default_groups=default_groups)
254 258
255 self.present = os.path.exists(manifestFile) 259 self.present = os.path.exists(manifestFile)
256 260
@@ -264,6 +268,7 @@ class _XmlSubmanifest:
264 self.revision == other.revision and 268 self.revision == other.revision and
265 self.manifestName == other.manifestName and 269 self.manifestName == other.manifestName and
266 self.groups == other.groups and 270 self.groups == other.groups and
271 self.default_groups == other.default_groups and
267 self.path == other.path and 272 self.path == other.path and
268 sorted(self.annotations) == sorted(other.annotations)) 273 sorted(self.annotations) == sorted(other.annotations))
269 274
@@ -284,6 +289,7 @@ class _XmlSubmanifest:
284 revision = self.revision or self.name 289 revision = self.revision or self.name
285 path = self.path or revision.split('/')[-1] 290 path = self.path or revision.split('/')[-1]
286 groups = self.groups or [] 291 groups = self.groups or []
292 default_groups = self.default_groups or []
287 293
288 return SubmanifestSpec(self.name, manifestUrl, manifestName, revision, path, 294 return SubmanifestSpec(self.name, manifestUrl, manifestName, revision, path,
289 groups) 295 groups)
@@ -300,6 +306,10 @@ class _XmlSubmanifest:
300 return ','.join(self.groups) 306 return ','.join(self.groups)
301 return '' 307 return ''
302 308
309 def GetDefaultGroupsStr(self):
310 """Returns the `default-groups` given for this submanifest."""
311 return ','.join(self.default_groups or [])
312
303 def AddAnnotation(self, name, value, keep): 313 def AddAnnotation(self, name, value, keep):
304 """Add annotations to the submanifest.""" 314 """Add annotations to the submanifest."""
305 self.annotations.append(Annotation(name, value, keep)) 315 self.annotations.append(Annotation(name, value, keep))
@@ -327,7 +337,8 @@ class XmlManifest(object):
327 """manages the repo configuration file""" 337 """manages the repo configuration file"""
328 338
329 def __init__(self, repodir, manifest_file, local_manifests=None, 339 def __init__(self, repodir, manifest_file, local_manifests=None,
330 outer_client=None, parent_groups='', submanifest_path=''): 340 outer_client=None, parent_groups='', submanifest_path='',
341 default_groups=None):
331 """Initialize. 342 """Initialize.
332 343
333 Args: 344 Args:
@@ -340,6 +351,7 @@ class XmlManifest(object):
340 outer_client: RepoClient of the outertree. 351 outer_client: RepoClient of the outertree.
341 parent_groups: a string, the groups to apply to this projects. 352 parent_groups: a string, the groups to apply to this projects.
342 submanifest_path: The submanifest root relative to the repo root. 353 submanifest_path: The submanifest root relative to the repo root.
354 default_groups: a string, the default manifest groups to use.
343 """ 355 """
344 # TODO(vapier): Move this out of this class. 356 # TODO(vapier): Move this out of this class.
345 self.globalConfig = GitConfig.ForUser() 357 self.globalConfig = GitConfig.ForUser()
@@ -358,6 +370,7 @@ class XmlManifest(object):
358 self.local_manifests = local_manifests 370 self.local_manifests = local_manifests
359 self._load_local_manifests = True 371 self._load_local_manifests = True
360 self.parent_groups = parent_groups 372 self.parent_groups = parent_groups
373 self.default_groups = default_groups
361 374
362 if outer_client and self.isGitcClient: 375 if outer_client and self.isGitcClient:
363 raise ManifestParseError('Multi-manifest is incompatible with `gitc-init`') 376 raise ManifestParseError('Multi-manifest is incompatible with `gitc-init`')
@@ -472,6 +485,8 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
472 e.setAttribute('path', r.path) 485 e.setAttribute('path', r.path)
473 if r.groups: 486 if r.groups:
474 e.setAttribute('groups', r.GetGroupsStr()) 487 e.setAttribute('groups', r.GetGroupsStr())
488 if r.default_groups:
489 e.setAttribute('default-groups', r.GetDefaultGroupsStr())
475 490
476 for a in r.annotations: 491 for a in r.annotations:
477 if a.keep == 'true': 492 if a.keep == 'true':
@@ -967,16 +982,21 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
967 worktree=os.path.join(subdir, 'manifests')) 982 worktree=os.path.join(subdir, 'manifests'))
968 return mp 983 return mp
969 984
970 def GetDefaultGroupsStr(self): 985 def GetDefaultGroupsStr(self, with_platform=True):
971 """Returns the default group string for the platform.""" 986 """Returns the default group string to use.
972 return 'default,platform-' + platform.system().lower() 987
988 Args:
989 with_platform: a boolean, whether to include the group for the
990 underlying platform.
991 """
992 groups = ','.join(self.default_groups or ['default'])
993 if with_platform:
994 groups += f',platform-{platform.system().lower()}'
995 return groups
973 996
974 def GetGroupsStr(self): 997 def GetGroupsStr(self):
975 """Returns the manifest group string that should be synced.""" 998 """Returns the manifest group string that should be synced."""
976 groups = self.manifestProject.manifest_groups 999 return self.manifestProject.manifest_groups or self.GetDefaultGroupsStr()
977 if not groups:
978 groups = self.GetDefaultGroupsStr()
979 return groups
980 1000
981 def Unload(self): 1001 def Unload(self):
982 """Unload the manifest. 1002 """Unload the manifest.
@@ -1491,6 +1511,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1491 if node.hasAttribute('groups'): 1511 if node.hasAttribute('groups'):
1492 groups = node.getAttribute('groups') 1512 groups = node.getAttribute('groups')
1493 groups = self._ParseList(groups) 1513 groups = self._ParseList(groups)
1514 default_groups = self._ParseList(node.getAttribute('default-groups'))
1494 path = node.getAttribute('path') 1515 path = node.getAttribute('path')
1495 if path == '': 1516 if path == '':
1496 path = None 1517 path = None
@@ -1511,7 +1532,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1511 '<submanifest> invalid "path": %s: %s' % (path, msg)) 1532 '<submanifest> invalid "path": %s: %s' % (path, msg))
1512 1533
1513 submanifest = _XmlSubmanifest(name, remote, project, revision, manifestName, 1534 submanifest = _XmlSubmanifest(name, remote, project, revision, manifestName,
1514 groups, path, self) 1535 groups, default_groups, path, self)
1515 1536
1516 for n in node.childNodes: 1537 for n in node.childNodes:
1517 if n.nodeName == 'annotation': 1538 if n.nodeName == 'annotation':
diff --git a/project.py b/project.py
index 7afd6a79..2641c445 100644
--- a/project.py
+++ b/project.py
@@ -715,7 +715,8 @@ class Project(object):
715 The special manifest group "default" will match any project that 715 The special manifest group "default" will match any project that
716 does not have the special project group "notdefault" 716 does not have the special project group "notdefault"
717 """ 717 """
718 expanded_manifest_groups = manifest_groups or ['default'] 718 default_groups = self.manifest.default_groups or ['default']
719 expanded_manifest_groups = manifest_groups or default_groups
719 expanded_project_groups = ['all'] + (self.groups or []) 720 expanded_project_groups = ['all'] + (self.groups or [])
720 if 'notdefault' not in expanded_project_groups: 721 if 'notdefault' not in expanded_project_groups:
721 expanded_project_groups += ['default'] 722 expanded_project_groups += ['default']
@@ -3496,7 +3497,7 @@ class ManifestProject(MetaProject):
3496 """ 3497 """
3497 assert _kwargs_only == (), 'Sync only accepts keyword arguments.' 3498 assert _kwargs_only == (), 'Sync only accepts keyword arguments.'
3498 3499
3499 groups = groups or 'default' 3500 groups = groups or self.manifest.GetDefaultGroupsStr(with_platform=False)
3500 platform = platform or 'auto' 3501 platform = platform or 'auto'
3501 git_event_log = git_event_log or EventLog() 3502 git_event_log = git_event_log or EventLog()
3502 if outer_manifest and self.manifest.is_submanifest: 3503 if outer_manifest and self.manifest.is_submanifest:
diff --git a/subcmds/info.py b/subcmds/info.py
index 4bedf9d5..baa4c5b1 100644
--- a/subcmds/info.py
+++ b/subcmds/info.py
@@ -65,8 +65,7 @@ class Info(PagedCommand):
65 self.manifest = self.manifest.outer_client 65 self.manifest = self.manifest.outer_client
66 manifestConfig = self.manifest.manifestProject.config 66 manifestConfig = self.manifest.manifestProject.config
67 mergeBranch = manifestConfig.GetBranch("default").merge 67 mergeBranch = manifestConfig.GetBranch("default").merge
68 manifestGroups = (manifestConfig.GetString('manifest.groups') 68 manifestGroups = self.manifest.GetGroupsStr()
69 or 'all,-notdefault')
70 69
71 self.heading("Manifest branch: ") 70 self.heading("Manifest branch: ")
72 if self.manifest.default.revisionExpr: 71 if self.manifest.default.revisionExpr: