msubprojects: Stop trying to guess subproject type
It was done to include them in `meson subprojects foreach` without --types argument, but it's better to special case missing --types and include wraps that have type=None too. It was a bad idea because that was messing them in `meson subprojects update`, now they are ignored by that command.
This commit is contained in:
parent
c203e2f92b
commit
e0cd54a322
|
@ -268,7 +268,7 @@ def foreach(wrap, repo_dir, options):
|
||||||
def add_common_arguments(p):
|
def add_common_arguments(p):
|
||||||
p.add_argument('--sourcedir', default='.',
|
p.add_argument('--sourcedir', default='.',
|
||||||
help='Path to source directory')
|
help='Path to source directory')
|
||||||
p.add_argument('--types', default=ALL_TYPES_STRING,
|
p.add_argument('--types', default='',
|
||||||
help='Comma-separated list of subproject types. Supported types are: {} (default: all)'.format(ALL_TYPES_STRING))
|
help='Comma-separated list of subproject types. Supported types are: {} (default: all)'.format(ALL_TYPES_STRING))
|
||||||
|
|
||||||
def add_subprojects_argument(p):
|
def add_subprojects_argument(p):
|
||||||
|
@ -328,13 +328,13 @@ def run(options):
|
||||||
wraps = [wrap for name, wrap in r.wraps.items() if name in options.subprojects]
|
wraps = [wrap for name, wrap in r.wraps.items() if name in options.subprojects]
|
||||||
else:
|
else:
|
||||||
wraps = r.wraps.values()
|
wraps = r.wraps.values()
|
||||||
types = [t.strip() for t in options.types.split(',')]
|
types = [t.strip() for t in options.types.split(',')] if options.types else []
|
||||||
for t in types:
|
for t in types:
|
||||||
if t not in ALL_TYPES:
|
if t not in ALL_TYPES:
|
||||||
raise MesonException('Unknown subproject type {!r}, supported types are: {}'.format(t, ALL_TYPES_STRING))
|
raise MesonException('Unknown subproject type {!r}, supported types are: {}'.format(t, ALL_TYPES_STRING))
|
||||||
failures = []
|
failures = []
|
||||||
for wrap in wraps:
|
for wrap in wraps:
|
||||||
if wrap.type not in types:
|
if types and wrap.type not in types:
|
||||||
continue
|
continue
|
||||||
dirname = os.path.join(subprojects_dir, wrap.directory)
|
dirname = os.path.join(subprojects_dir, wrap.directory)
|
||||||
if not options.subprojects_func(wrap, dirname, options):
|
if not options.subprojects_func(wrap, dirname, options):
|
||||||
|
|
|
@ -103,24 +103,12 @@ class PackageDefinition:
|
||||||
self.provided_deps[self.name] = None
|
self.provided_deps[self.name] = None
|
||||||
if fname.endswith('.wrap'):
|
if fname.endswith('.wrap'):
|
||||||
self.parse_wrap(fname)
|
self.parse_wrap(fname)
|
||||||
else:
|
|
||||||
self.guess_type();
|
|
||||||
self.directory = self.values.get('directory', self.name)
|
self.directory = self.values.get('directory', self.name)
|
||||||
if os.path.dirname(self.directory):
|
if os.path.dirname(self.directory):
|
||||||
raise WrapException('Directory key must be a name and not a path')
|
raise WrapException('Directory key must be a name and not a path')
|
||||||
if self.type and self.type not in ALL_TYPES:
|
if self.type and self.type not in ALL_TYPES:
|
||||||
raise WrapException('Unknown wrap type {!r}'.format(self.type))
|
raise WrapException('Unknown wrap type {!r}'.format(self.type))
|
||||||
|
|
||||||
def guess_type(self) -> None:
|
|
||||||
if os.path.exists(os.path.join(self.filename, '.git')):
|
|
||||||
# This is a git subproject without wrap file. Either the user cloned
|
|
||||||
# it manually, or it's a git submodule. The revision is used in
|
|
||||||
# msubprojects.py to update the git repo. If it's a submodule the repo
|
|
||||||
# is likely detached and revision will be empty.
|
|
||||||
res, stdout = quiet_git(['branch', '--show-current'], self.filename)
|
|
||||||
self.values['revision'] = stdout.strip()
|
|
||||||
self.type = 'git'
|
|
||||||
|
|
||||||
def parse_wrap(self, fname: str) -> None:
|
def parse_wrap(self, fname: str) -> None:
|
||||||
try:
|
try:
|
||||||
self.config = configparser.ConfigParser(interpolation=None)
|
self.config = configparser.ConfigParser(interpolation=None)
|
||||||
|
|
|
@ -9100,6 +9100,8 @@ class SubprojectsCommandTests(BasePlatformTests):
|
||||||
def test_foreach(self):
|
def test_foreach(self):
|
||||||
self._create_project(self.subprojects_dir / 'sub_file')
|
self._create_project(self.subprojects_dir / 'sub_file')
|
||||||
self._wrap_create_file('sub_file')
|
self._wrap_create_file('sub_file')
|
||||||
|
self._git_create_local_repo('sub_git')
|
||||||
|
self._wrap_create_git('sub_git')
|
||||||
self._git_create_local_repo('sub_git_no_wrap')
|
self._git_create_local_repo('sub_git_no_wrap')
|
||||||
|
|
||||||
def ran_in(s):
|
def ran_in(s):
|
||||||
|
@ -9112,13 +9114,13 @@ class SubprojectsCommandTests(BasePlatformTests):
|
||||||
|
|
||||||
dummy_cmd = ['true']
|
dummy_cmd = ['true']
|
||||||
out = self._subprojects_cmd(['foreach'] + dummy_cmd)
|
out = self._subprojects_cmd(['foreach'] + dummy_cmd)
|
||||||
self.assertEqual(ran_in(out), sorted(['./subprojects/sub_git_no_wrap', './subprojects/sub_file']))
|
self.assertEqual(ran_in(out), sorted(['./subprojects/sub_file', './subprojects/sub_git', './subprojects/sub_git_no_wrap']))
|
||||||
out = self._subprojects_cmd(['foreach', '--types', 'git,file'] + dummy_cmd)
|
out = self._subprojects_cmd(['foreach', '--types', 'git,file'] + dummy_cmd)
|
||||||
self.assertEqual(ran_in(out), sorted(['./subprojects/sub_git_no_wrap', './subprojects/sub_file']))
|
self.assertEqual(ran_in(out), sorted(['./subprojects/sub_file', './subprojects/sub_git']))
|
||||||
out = self._subprojects_cmd(['foreach', '--types', 'file'] + dummy_cmd)
|
out = self._subprojects_cmd(['foreach', '--types', 'file'] + dummy_cmd)
|
||||||
self.assertEqual(ran_in(out), ['./subprojects/sub_file'])
|
self.assertEqual(ran_in(out), ['./subprojects/sub_file'])
|
||||||
out = self._subprojects_cmd(['foreach', '--types', 'git'] + dummy_cmd)
|
out = self._subprojects_cmd(['foreach', '--types', 'git'] + dummy_cmd)
|
||||||
self.assertEqual(ran_in(out), ['./subprojects/sub_git_no_wrap'])
|
self.assertEqual(ran_in(out), ['./subprojects/sub_git'])
|
||||||
|
|
||||||
def _clang_at_least(compiler, minver: str, apple_minver: str) -> bool:
|
def _clang_at_least(compiler, minver: str, apple_minver: str) -> bool:
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue