mirror of
https://gerrit.googlesource.com/git-repo
synced 2024-12-21 07:16:21 +00:00
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>
This commit is contained in:
parent
9888accb0c
commit
080877e413
@ -178,9 +178,7 @@ class Command(object):
|
|||||||
mp = manifest.manifestProject
|
mp = manifest.manifestProject
|
||||||
|
|
||||||
if not groups:
|
if not groups:
|
||||||
groups = mp.config.GetString('manifest.groups')
|
groups = manifest.GetGroupsStr()
|
||||||
if not groups:
|
|
||||||
groups = 'default,platform-' + platform.system().lower()
|
|
||||||
groups = [x for x in re.split(r'[,\s]+', groups) if x]
|
groups = [x for x in re.split(r'[,\s]+', groups) if x]
|
||||||
|
|
||||||
if not args:
|
if not args:
|
||||||
|
@ -235,7 +235,7 @@ class Superproject(object):
|
|||||||
self._superproject_path,
|
self._superproject_path,
|
||||||
file=sys.stderr)
|
file=sys.stderr)
|
||||||
return None
|
return None
|
||||||
manifest_str = self._manifest.ToXml().toxml()
|
manifest_str = self._manifest.ToXml(groups=self._manifest.GetGroupsStr()).toxml()
|
||||||
manifest_path = self._manifest_path
|
manifest_path = self._manifest_path
|
||||||
try:
|
try:
|
||||||
with open(manifest_path, 'w', encoding='utf-8') as fp:
|
with open(manifest_path, 'w', encoding='utf-8') as fp:
|
||||||
|
@ -77,22 +77,6 @@ def _set_project_revisions(projects):
|
|||||||
project.revisionExpr = revisionExpr
|
project.revisionExpr = revisionExpr
|
||||||
|
|
||||||
|
|
||||||
def _manifest_groups(manifest):
|
|
||||||
"""Returns the manifest group string that should be synced
|
|
||||||
|
|
||||||
This is the same logic used by Command.GetProjects(), which is used during
|
|
||||||
repo sync
|
|
||||||
|
|
||||||
Args:
|
|
||||||
manifest: The XmlManifest object
|
|
||||||
"""
|
|
||||||
mp = manifest.manifestProject
|
|
||||||
groups = mp.config.GetString('manifest.groups')
|
|
||||||
if not groups:
|
|
||||||
groups = 'default,platform-' + platform.system().lower()
|
|
||||||
return groups
|
|
||||||
|
|
||||||
|
|
||||||
def generate_gitc_manifest(gitc_manifest, manifest, paths=None):
|
def generate_gitc_manifest(gitc_manifest, manifest, paths=None):
|
||||||
"""Generate a manifest for shafsd to use for this GITC client.
|
"""Generate a manifest for shafsd to use for this GITC client.
|
||||||
|
|
||||||
@ -107,7 +91,7 @@ def generate_gitc_manifest(gitc_manifest, manifest, paths=None):
|
|||||||
if paths is None:
|
if paths is None:
|
||||||
paths = list(manifest.paths.keys())
|
paths = list(manifest.paths.keys())
|
||||||
|
|
||||||
groups = [x for x in re.split(r'[,\s]+', _manifest_groups(manifest)) if x]
|
groups = [x for x in re.split(r'[,\s]+', manifest.GetGroupsStr()) if x]
|
||||||
|
|
||||||
# Convert the paths to projects, and filter them to the matched groups.
|
# Convert the paths to projects, and filter them to the matched groups.
|
||||||
projects = [manifest.paths[p] for p in paths]
|
projects = [manifest.paths[p] for p in paths]
|
||||||
@ -166,7 +150,7 @@ def save_manifest(manifest, client_dir=None):
|
|||||||
else:
|
else:
|
||||||
manifest_file = os.path.join(client_dir, '.manifest')
|
manifest_file = os.path.join(client_dir, '.manifest')
|
||||||
with open(manifest_file, 'w') as f:
|
with open(manifest_file, 'w') as f:
|
||||||
manifest.Save(f, groups=_manifest_groups(manifest))
|
manifest.Save(f, groups=manifest.GetGroupsStr())
|
||||||
# TODO(sbasi/jorg): Come up with a solution to remove the sleep below.
|
# TODO(sbasi/jorg): Come up with a solution to remove the sleep below.
|
||||||
# Give the GITC filesystem time to register the manifest changes.
|
# Give the GITC filesystem time to register the manifest changes.
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
import itertools
|
import itertools
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import xml.dom.minidom
|
import xml.dom.minidom
|
||||||
@ -604,6 +605,17 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
|
|||||||
def HasSubmodules(self):
|
def HasSubmodules(self):
|
||||||
return self.manifestProject.config.GetBoolean('repo.submodules')
|
return self.manifestProject.config.GetBoolean('repo.submodules')
|
||||||
|
|
||||||
|
def GetDefaultGroupsStr(self):
|
||||||
|
"""Returns the default group string for the platform."""
|
||||||
|
return 'default,platform-' + platform.system().lower()
|
||||||
|
|
||||||
|
def GetGroupsStr(self):
|
||||||
|
"""Returns the manifest group string that should be synced."""
|
||||||
|
groups = self.manifestProject.config.GetString('manifest.groups')
|
||||||
|
if not groups:
|
||||||
|
groups = self.GetDefaultGroupsStr()
|
||||||
|
return groups
|
||||||
|
|
||||||
def _Unload(self):
|
def _Unload(self):
|
||||||
self._loaded = False
|
self._loaded = False
|
||||||
self._projects = {}
|
self._projects = {}
|
||||||
|
@ -267,7 +267,7 @@ to update the working directory files.
|
|||||||
|
|
||||||
groups = [x for x in groups if x]
|
groups = [x for x in groups if x]
|
||||||
groupstr = ','.join(groups)
|
groupstr = ','.join(groups)
|
||||||
if opt.platform == 'auto' and groupstr == 'default,platform-' + platform.system().lower():
|
if opt.platform == 'auto' and groupstr == self.manifest.GetDefaultGroupsStr():
|
||||||
groupstr = None
|
groupstr = None
|
||||||
m.config.SetString('manifest.groups', groupstr)
|
m.config.SetString('manifest.groups', groupstr)
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
"""Unittests for the git_superproject.py module."""
|
"""Unittests for the git_superproject.py module."""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
@ -34,6 +35,7 @@ class SuperprojectTestCase(unittest.TestCase):
|
|||||||
self.manifest_file = os.path.join(
|
self.manifest_file = os.path.join(
|
||||||
self.repodir, manifest_xml.MANIFEST_FILE_NAME)
|
self.repodir, manifest_xml.MANIFEST_FILE_NAME)
|
||||||
os.mkdir(self.repodir)
|
os.mkdir(self.repodir)
|
||||||
|
self.platform = platform.system().lower()
|
||||||
|
|
||||||
# The manifest parsing really wants a git repo currently.
|
# The manifest parsing really wants a git repo currently.
|
||||||
gitdir = os.path.join(self.repodir, 'manifests.git')
|
gitdir = os.path.join(self.repodir, 'manifests.git')
|
||||||
@ -48,8 +50,8 @@ class SuperprojectTestCase(unittest.TestCase):
|
|||||||
<remote name="default-remote" fetch="http://localhost" />
|
<remote name="default-remote" fetch="http://localhost" />
|
||||||
<default remote="default-remote" revision="refs/heads/main" />
|
<default remote="default-remote" revision="refs/heads/main" />
|
||||||
<superproject name="superproject"/>
|
<superproject name="superproject"/>
|
||||||
<project path="art" name="platform/art" />
|
<project path="art" name="platform/art" groups="notdefault,platform-""" + self.platform + """
|
||||||
</manifest>
|
" /></manifest>
|
||||||
""")
|
""")
|
||||||
self._superproject = git_superproject.Superproject(manifest, self.repodir)
|
self._superproject = git_superproject.Superproject(manifest, self.repodir)
|
||||||
|
|
||||||
@ -142,7 +144,8 @@ class SuperprojectTestCase(unittest.TestCase):
|
|||||||
'<?xml version="1.0" ?><manifest>' +
|
'<?xml version="1.0" ?><manifest>' +
|
||||||
'<remote name="default-remote" fetch="http://localhost"/>' +
|
'<remote name="default-remote" fetch="http://localhost"/>' +
|
||||||
'<default remote="default-remote" revision="refs/heads/main"/>' +
|
'<default remote="default-remote" revision="refs/heads/main"/>' +
|
||||||
'<project name="platform/art" path="art" revision="ABCDEF"/>' +
|
'<project name="platform/art" path="art" revision="ABCDEF" ' +
|
||||||
|
'groups="notdefault,platform-' + self.platform + '"/>' +
|
||||||
'<superproject name="superproject"/>' +
|
'<superproject name="superproject"/>' +
|
||||||
'</manifest>')
|
'</manifest>')
|
||||||
|
|
||||||
@ -169,7 +172,8 @@ class SuperprojectTestCase(unittest.TestCase):
|
|||||||
'<remote name="default-remote" fetch="http://localhost"/>' +
|
'<remote name="default-remote" fetch="http://localhost"/>' +
|
||||||
'<default remote="default-remote" revision="refs/heads/main"/>' +
|
'<default remote="default-remote" revision="refs/heads/main"/>' +
|
||||||
'<project name="platform/art" path="art" ' +
|
'<project name="platform/art" path="art" ' +
|
||||||
'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea"/>' +
|
'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea" ' +
|
||||||
|
'groups="notdefault,platform-' + self.platform + '"/>' +
|
||||||
'<superproject name="superproject"/>' +
|
'<superproject name="superproject"/>' +
|
||||||
'</manifest>')
|
'</manifest>')
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
"""Unittests for the manifest_xml.py module."""
|
"""Unittests for the manifest_xml.py module."""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
@ -377,6 +378,11 @@ class ProjectElementTests(ManifestParseTestCase):
|
|||||||
self.assertCountEqual(
|
self.assertCountEqual(
|
||||||
result['extras'],
|
result['extras'],
|
||||||
['g1', 'g2', 'g1', 'name:extras', 'all', 'path:path'])
|
['g1', 'g2', 'g1', 'name:extras', 'all', 'path:path'])
|
||||||
|
groupstr = 'default,platform-' + platform.system().lower()
|
||||||
|
self.assertEqual(groupstr, manifest.GetGroupsStr())
|
||||||
|
groupstr = 'g1,g2,g1'
|
||||||
|
manifest.manifestProject.config.SetString('manifest.groups', groupstr)
|
||||||
|
self.assertEqual(groupstr, manifest.GetGroupsStr())
|
||||||
|
|
||||||
def test_set_revision_id(self):
|
def test_set_revision_id(self):
|
||||||
"""Check setting of project's revisionId."""
|
"""Check setting of project's revisionId."""
|
||||||
|
Loading…
Reference in New Issue
Block a user