summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaman Tenneti <rtenneti@google.com>2021-03-09 15:19:06 -0800
committerRaman Tenneti <rtenneti@google.com>2021-03-11 01:24:52 +0000
commit080877e41347b8987977fc8cc3ec90dcd149651a (patch)
tree57a8c76bd02da5f9400cdec5da6a75f4e4f2d3f2
parent9888accb0cf2c17e0f4bbc399782ccd2a4be0196 (diff)
downloadgit-repo-080877e41347b8987977fc8cc3ec90dcd149651a.tar.gz
superproject: pass groups to ToXml method.
Added the following methods to XmlManifest class. + GetDefaultGroupsStr() - return 'default,platform-' + platform.system().lower() + GetGroupsStr() - Same as gitc_utils.py's _manifest_groups func. + Replaced gitc_utils.py's_manifest_groups calls with GetGroupsStr. + Used the above methods to get groups in command.py::GetProjects and part of init.py. TODO: clean up these funcs to take structured group data more instead of passing strings around everywhere that need parsing. Tested the code with the following commands. $ ./run_tests -v Tested the sync code by using repo_dev alias and pointing to this CL and verified prebuilts/fullsdk-linux directory has all the folders. Tested repo init and repo sync with --use-superproject and without --use-superproject argument. $ repo_dev init -u sso://android.git.corp.google.com/platform/manifest -b androidx-main --partial-clone --clone-filter=blob:limit=10M --repo-rev=main --use-superproject $ repo_dev sync -c -j32 Bug: [google internal] b/181804931 Bug: https://crbug.com/gerrit/13707 Change-Id: Ia98585cbfa3a1449710655af55d56241794242b6 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/299422 Reviewed-by: Jonathan Nieder <jrn@google.com> Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Raman Tenneti <rtenneti@google.com>
-rw-r--r--command.py4
-rw-r--r--git_superproject.py2
-rw-r--r--gitc_utils.py20
-rw-r--r--manifest_xml.py12
-rw-r--r--subcmds/init.py2
-rw-r--r--tests/test_git_superproject.py12
-rw-r--r--tests/test_manifest_xml.py6
7 files changed, 31 insertions, 27 deletions
diff --git a/command.py b/command.py
index 90bd0021..f708832e 100644
--- a/command.py
+++ b/command.py
@@ -178,9 +178,7 @@ class Command(object):
178 mp = manifest.manifestProject 178 mp = manifest.manifestProject
179 179
180 if not groups: 180 if not groups:
181 groups = mp.config.GetString('manifest.groups') 181 groups = manifest.GetGroupsStr()
182 if not groups:
183 groups = 'default,platform-' + platform.system().lower()
184 groups = [x for x in re.split(r'[,\s]+', groups) if x] 182 groups = [x for x in re.split(r'[,\s]+', groups) if x]
185 183
186 if not args: 184 if not args:
diff --git a/git_superproject.py b/git_superproject.py
index 651da48a..7f0582cb 100644
--- a/git_superproject.py
+++ b/git_superproject.py
@@ -235,7 +235,7 @@ class Superproject(object):
235 self._superproject_path, 235 self._superproject_path,
236 file=sys.stderr) 236 file=sys.stderr)
237 return None 237 return None
238 manifest_str = self._manifest.ToXml().toxml() 238 manifest_str = self._manifest.ToXml(groups=self._manifest.GetGroupsStr()).toxml()
239 manifest_path = self._manifest_path 239 manifest_path = self._manifest_path
240 try: 240 try:
241 with open(manifest_path, 'w', encoding='utf-8') as fp: 241 with open(manifest_path, 'w', encoding='utf-8') as fp:
diff --git a/gitc_utils.py b/gitc_utils.py
index a2786c9f..486bbeb0 100644
--- a/gitc_utils.py
+++ b/gitc_utils.py
@@ -77,22 +77,6 @@ def _set_project_revisions(projects):
77 project.revisionExpr = revisionExpr 77 project.revisionExpr = revisionExpr
78 78
79 79
80def _manifest_groups(manifest):
81 """Returns the manifest group string that should be synced
82
83 This is the same logic used by Command.GetProjects(), which is used during
84 repo sync
85
86 Args:
87 manifest: The XmlManifest object
88 """
89 mp = manifest.manifestProject
90 groups = mp.config.GetString('manifest.groups')
91 if not groups:
92 groups = 'default,platform-' + platform.system().lower()
93 return groups
94
95
96def generate_gitc_manifest(gitc_manifest, manifest, paths=None): 80def generate_gitc_manifest(gitc_manifest, manifest, paths=None):
97 """Generate a manifest for shafsd to use for this GITC client. 81 """Generate a manifest for shafsd to use for this GITC client.
98 82
@@ -107,7 +91,7 @@ def generate_gitc_manifest(gitc_manifest, manifest, paths=None):
107 if paths is None: 91 if paths is None:
108 paths = list(manifest.paths.keys()) 92 paths = list(manifest.paths.keys())
109 93
110 groups = [x for x in re.split(r'[,\s]+', _manifest_groups(manifest)) if x] 94 groups = [x for x in re.split(r'[,\s]+', manifest.GetGroupsStr()) if x]
111 95
112 # Convert the paths to projects, and filter them to the matched groups. 96 # Convert the paths to projects, and filter them to the matched groups.
113 projects = [manifest.paths[p] for p in paths] 97 projects = [manifest.paths[p] for p in paths]
@@ -166,7 +150,7 @@ def save_manifest(manifest, client_dir=None):
166 else: 150 else:
167 manifest_file = os.path.join(client_dir, '.manifest') 151 manifest_file = os.path.join(client_dir, '.manifest')
168 with open(manifest_file, 'w') as f: 152 with open(manifest_file, 'w') as f:
169 manifest.Save(f, groups=_manifest_groups(manifest)) 153 manifest.Save(f, groups=manifest.GetGroupsStr())
170 # TODO(sbasi/jorg): Come up with a solution to remove the sleep below. 154 # TODO(sbasi/jorg): Come up with a solution to remove the sleep below.
171 # Give the GITC filesystem time to register the manifest changes. 155 # Give the GITC filesystem time to register the manifest changes.
172 time.sleep(3) 156 time.sleep(3)
diff --git a/manifest_xml.py b/manifest_xml.py
index e96e0620..6d8fca1d 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -14,6 +14,7 @@
14 14
15import itertools 15import itertools
16import os 16import os
17import platform
17import re 18import re
18import sys 19import sys
19import xml.dom.minidom 20import xml.dom.minidom
@@ -604,6 +605,17 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
604 def HasSubmodules(self): 605 def HasSubmodules(self):
605 return self.manifestProject.config.GetBoolean('repo.submodules') 606 return self.manifestProject.config.GetBoolean('repo.submodules')
606 607
608 def GetDefaultGroupsStr(self):
609 """Returns the default group string for the platform."""
610 return 'default,platform-' + platform.system().lower()
611
612 def GetGroupsStr(self):
613 """Returns the manifest group string that should be synced."""
614 groups = self.manifestProject.config.GetString('manifest.groups')
615 if not groups:
616 groups = self.GetDefaultGroupsStr()
617 return groups
618
607 def _Unload(self): 619 def _Unload(self):
608 self._loaded = False 620 self._loaded = False
609 self._projects = {} 621 self._projects = {}
diff --git a/subcmds/init.py b/subcmds/init.py
index 471efc1e..86b77742 100644
--- a/subcmds/init.py
+++ b/subcmds/init.py
@@ -267,7 +267,7 @@ to update the working directory files.
267 267
268 groups = [x for x in groups if x] 268 groups = [x for x in groups if x]
269 groupstr = ','.join(groups) 269 groupstr = ','.join(groups)
270 if opt.platform == 'auto' and groupstr == 'default,platform-' + platform.system().lower(): 270 if opt.platform == 'auto' and groupstr == self.manifest.GetDefaultGroupsStr():
271 groupstr = None 271 groupstr = None
272 m.config.SetString('manifest.groups', groupstr) 272 m.config.SetString('manifest.groups', groupstr)
273 273
diff --git a/tests/test_git_superproject.py b/tests/test_git_superproject.py
index 07b9a7db..9550949b 100644
--- a/tests/test_git_superproject.py
+++ b/tests/test_git_superproject.py
@@ -15,6 +15,7 @@
15"""Unittests for the git_superproject.py module.""" 15"""Unittests for the git_superproject.py module."""
16 16
17import os 17import os
18import platform
18import tempfile 19import tempfile
19import unittest 20import unittest
20from unittest import mock 21from unittest import mock
@@ -34,6 +35,7 @@ class SuperprojectTestCase(unittest.TestCase):
34 self.manifest_file = os.path.join( 35 self.manifest_file = os.path.join(
35 self.repodir, manifest_xml.MANIFEST_FILE_NAME) 36 self.repodir, manifest_xml.MANIFEST_FILE_NAME)
36 os.mkdir(self.repodir) 37 os.mkdir(self.repodir)
38 self.platform = platform.system().lower()
37 39
38 # The manifest parsing really wants a git repo currently. 40 # The manifest parsing really wants a git repo currently.
39 gitdir = os.path.join(self.repodir, 'manifests.git') 41 gitdir = os.path.join(self.repodir, 'manifests.git')
@@ -48,8 +50,8 @@ class SuperprojectTestCase(unittest.TestCase):
48 <remote name="default-remote" fetch="http://localhost" /> 50 <remote name="default-remote" fetch="http://localhost" />
49 <default remote="default-remote" revision="refs/heads/main" /> 51 <default remote="default-remote" revision="refs/heads/main" />
50 <superproject name="superproject"/> 52 <superproject name="superproject"/>
51 <project path="art" name="platform/art" /> 53 <project path="art" name="platform/art" groups="notdefault,platform-""" + self.platform + """
52</manifest> 54 " /></manifest>
53""") 55""")
54 self._superproject = git_superproject.Superproject(manifest, self.repodir) 56 self._superproject = git_superproject.Superproject(manifest, self.repodir)
55 57
@@ -142,7 +144,8 @@ class SuperprojectTestCase(unittest.TestCase):
142 '<?xml version="1.0" ?><manifest>' + 144 '<?xml version="1.0" ?><manifest>' +
143 '<remote name="default-remote" fetch="http://localhost"/>' + 145 '<remote name="default-remote" fetch="http://localhost"/>' +
144 '<default remote="default-remote" revision="refs/heads/main"/>' + 146 '<default remote="default-remote" revision="refs/heads/main"/>' +
145 '<project name="platform/art" path="art" revision="ABCDEF"/>' + 147 '<project name="platform/art" path="art" revision="ABCDEF" ' +
148 'groups="notdefault,platform-' + self.platform + '"/>' +
146 '<superproject name="superproject"/>' + 149 '<superproject name="superproject"/>' +
147 '</manifest>') 150 '</manifest>')
148 151
@@ -169,7 +172,8 @@ class SuperprojectTestCase(unittest.TestCase):
169 '<remote name="default-remote" fetch="http://localhost"/>' + 172 '<remote name="default-remote" fetch="http://localhost"/>' +
170 '<default remote="default-remote" revision="refs/heads/main"/>' + 173 '<default remote="default-remote" revision="refs/heads/main"/>' +
171 '<project name="platform/art" path="art" ' + 174 '<project name="platform/art" path="art" ' +
172 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea"/>' + 175 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea" ' +
176 'groups="notdefault,platform-' + self.platform + '"/>' +
173 '<superproject name="superproject"/>' + 177 '<superproject name="superproject"/>' +
174 '</manifest>') 178 '</manifest>')
175 179
diff --git a/tests/test_manifest_xml.py b/tests/test_manifest_xml.py
index 6977b417..9060ef3d 100644
--- a/tests/test_manifest_xml.py
+++ b/tests/test_manifest_xml.py
@@ -15,6 +15,7 @@
15"""Unittests for the manifest_xml.py module.""" 15"""Unittests for the manifest_xml.py module."""
16 16
17import os 17import os
18import platform
18import shutil 19import shutil
19import tempfile 20import tempfile
20import unittest 21import unittest
@@ -377,6 +378,11 @@ class ProjectElementTests(ManifestParseTestCase):
377 self.assertCountEqual( 378 self.assertCountEqual(
378 result['extras'], 379 result['extras'],
379 ['g1', 'g2', 'g1', 'name:extras', 'all', 'path:path']) 380 ['g1', 'g2', 'g1', 'name:extras', 'all', 'path:path'])
381 groupstr = 'default,platform-' + platform.system().lower()
382 self.assertEqual(groupstr, manifest.GetGroupsStr())
383 groupstr = 'g1,g2,g1'
384 manifest.manifestProject.config.SetString('manifest.groups', groupstr)
385 self.assertEqual(groupstr, manifest.GetGroupsStr())
380 386
381 def test_set_revision_id(self): 387 def test_set_revision_id(self):
382 """Check setting of project's revisionId.""" 388 """Check setting of project's revisionId."""