manifest_xml: group for submanifest projects

Add all projects in a submanifest to the group
submanifest::<path_prefix> for ease in filtering.

Change-Id: Ia6f01f9445f4f8d20fda3402f4d5821c43ceaf7f
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/331319
Tested-by: LaMont Jones <lamontjones@google.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
diff --git a/docs/manifest-format.md b/docs/manifest-format.md
index 7c0a7da..6e67108 100644
--- a/docs/manifest-format.md
+++ b/docs/manifest-format.md
@@ -281,6 +281,9 @@
 If not supplied the remote and project for this manifest will be used: `remote`
 cannot be supplied.
 
+Projects from a submanifest and its submanifests are added to the
+submanifest::path:<path_prefix> group.
+
 Attribute `manifest-name`: The manifest filename in the manifest project.  If
 not supplied, `default.xml` is used.
 
diff --git a/manifest_xml.py b/manifest_xml.py
index 7a4eb1e..fa3e103 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -36,6 +36,8 @@
 SUBMANIFEST_DIR = 'submanifests'
 # Limit submanifests to an arbitrary depth for loop detection.
 MAX_SUBMANIFEST_DEPTH = 8
+# Add all projects from sub manifest into a group.
+SUBMANIFEST_GROUP_PREFIX = 'submanifest:'
 
 # Add all projects from local manifest into a group.
 LOCAL_MANIFEST_GROUP_PREFIX = 'local:'
@@ -990,6 +992,8 @@
       self.branch = b
 
       parent_groups = self.parent_groups
+      if self.path_prefix:
+        parent_groups = f'{SUBMANIFEST_GROUP_PREFIX}:path:{self.path_prefix},{parent_groups}'
 
       # The manifestFile was specified by the user which is why we allow include
       # paths to point anywhere.