diff --git a/mesonbuild/msubprojects.py b/mesonbuild/msubprojects.py index 9523dd323..d5153894e 100755 --- a/mesonbuild/msubprojects.py +++ b/mesonbuild/msubprojects.py @@ -268,7 +268,7 @@ def foreach(wrap, repo_dir, options): def add_common_arguments(p): p.add_argument('--sourcedir', default='.', 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)) 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] else: 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: if t not in ALL_TYPES: raise MesonException('Unknown subproject type {!r}, supported types are: {}'.format(t, ALL_TYPES_STRING)) failures = [] for wrap in wraps: - if wrap.type not in types: + if types and wrap.type not in types: continue dirname = os.path.join(subprojects_dir, wrap.directory) if not options.subprojects_func(wrap, dirname, options): diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 98b30ee65..774544a2e 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -103,24 +103,12 @@ class PackageDefinition: self.provided_deps[self.name] = None if fname.endswith('.wrap'): self.parse_wrap(fname) - else: - self.guess_type(); self.directory = self.values.get('directory', self.name) if os.path.dirname(self.directory): raise WrapException('Directory key must be a name and not a path') if self.type and self.type not in ALL_TYPES: 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: try: self.config = configparser.ConfigParser(interpolation=None) diff --git a/run_unittests.py b/run_unittests.py index 29a330d68..69f793212 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -9100,6 +9100,8 @@ class SubprojectsCommandTests(BasePlatformTests): def test_foreach(self): self._create_project(self.subprojects_dir / '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') def ran_in(s): @@ -9112,13 +9114,13 @@ class SubprojectsCommandTests(BasePlatformTests): dummy_cmd = ['true'] 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) - 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) self.assertEqual(ran_in(out), ['./subprojects/sub_file']) 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: """