| proj.dds.run( | proj.dds.run( | ||||
| [ | [ | ||||
| 'build-deps', | 'build-deps', | ||||
| proj.dds.repo_dir_arg, | |||||
| proj.dds.cache_dir_arg, | |||||
| 'foo@1.2.3', | 'foo@1.2.3', | ||||
| ('-t', ':gcc' if 'gcc' in toolchain.get_default_toolchain().name else ':msvc'), | ('-t', ':gcc' if 'gcc' in toolchain.get_default_toolchain().name else ':msvc'), | ||||
| f'--cmake=libraries.cmake', | f'--cmake=libraries.cmake', |
| pipe = subprocess.Popen( | pipe = subprocess.Popen( | ||||
| list(proc.flatten_cmd([ | list(proc.flatten_cmd([ | ||||
| project.dds.path, | project.dds.path, | ||||
| project.dds.repo_dir_arg, | |||||
| project.dds.cache_dir_arg, | |||||
| 'pkg', | 'pkg', | ||||
| 'import', | 'import', | ||||
| '--stdin', | '--stdin', | ||||
| def test_import_sdist_dir(test_project: Project) -> None: | def test_import_sdist_dir(test_project: Project) -> None: | ||||
| test_project.dds.run(['pkg', 'import', test_project.dds.repo_dir_arg, test_project.root]) | |||||
| test_project.dds.run(['pkg', 'import', test_project.dds.cache_dir_arg, test_project.root]) | |||||
| _check_import(test_project.dds.repo_dir / 'foo@1.2.3') | _check_import(test_project.dds.repo_dir / 'foo@1.2.3') | ||||
| def test_pkg_repo(_test_repo: RepoServer, tmp_project: Project) -> None: | def test_pkg_repo(_test_repo: RepoServer, tmp_project: Project) -> None: | ||||
| dds = tmp_project.dds | dds = tmp_project.dds | ||||
| dds.repo_add(_test_repo.url) | dds.repo_add(_test_repo.url) | ||||
| dds.run(['pkg', 'repo', dds.catalog_path_arg, 'ls']) | |||||
| dds.run(['pkg', 'repo', dds.pkg_db_path_arg, 'ls']) | |||||
| def test_pkg_repo_rm(_test_repo: RepoServer, tmp_project: Project) -> None: | def test_pkg_repo_rm(_test_repo: RepoServer, tmp_project: Project) -> None: | ||||
| # Okay: | # Okay: | ||||
| tmp_project.dds.pkg_get('neo-sqlite3@0.3.0') | tmp_project.dds.pkg_get('neo-sqlite3@0.3.0') | ||||
| # Remove the repo: | # Remove the repo: | ||||
| dds.run(['pkg', dds.catalog_path_arg, 'repo', 'ls']) | |||||
| dds.run(['pkg', dds.pkg_db_path_arg, 'repo', 'ls']) | |||||
| dds.repo_remove(_test_repo.repo_name) | dds.repo_remove(_test_repo.repo_name) | ||||
| # Cannot double-remove a repo: | # Cannot double-remove a repo: | ||||
| with expect_error_marker('repo-rm-no-such-repo'): | with expect_error_marker('repo-rm-no-such-repo'): | ||||
| _test_repo.import_json_data(NEO_SQLITE_PKG_JSON) | _test_repo.import_json_data(NEO_SQLITE_PKG_JSON) | ||||
| dds = tmp_project.dds | dds = tmp_project.dds | ||||
| with expect_error_marker('pkg-search-no-result'): | with expect_error_marker('pkg-search-no-result'): | ||||
| dds.run(['pkg', dds.catalog_path_arg, 'search']) | |||||
| dds.run(['pkg', dds.pkg_db_path_arg, 'search']) | |||||
| dds.repo_add(_test_repo.url) | dds.repo_add(_test_repo.url) | ||||
| dds.run(['pkg', dds.catalog_path_arg, 'search']) | |||||
| dds.run(['pkg', dds.catalog_path_arg, 'search', 'neo-sqlite3']) | |||||
| dds.run(['pkg', dds.catalog_path_arg, 'search', 'neo-*']) | |||||
| dds.run(['pkg', dds.pkg_db_path_arg, 'search']) | |||||
| dds.run(['pkg', dds.pkg_db_path_arg, 'search', 'neo-sqlite3']) | |||||
| dds.run(['pkg', dds.pkg_db_path_arg, 'search', 'neo-*']) | |||||
| with expect_error_marker('pkg-search-no-result'): | with expect_error_marker('pkg-search-no-result'): | ||||
| dds.run(['pkg', dds.catalog_path_arg, 'search', 'nonexistent']) | |||||
| dds.run(['pkg', dds.pkg_db_path_arg, 'search', 'nonexistent']) |
| } | } | ||||
| tc_fname = 'gcc.tc.jsonc' if 'gcc' in toolchain.get_default_test_toolchain().name else 'msvc.tc.jsonc' | tc_fname = 'gcc.tc.jsonc' if 'gcc' in toolchain.get_default_test_toolchain().name else 'msvc.tc.jsonc' | ||||
| tmp_project.write('src/use-cryptopp.main.cpp', APP_CPP) | tmp_project.write('src/use-cryptopp.main.cpp', APP_CPP) | ||||
| tmp_project.build(toolchain=test_parent_dir / tc_fname) | |||||
| tmp_project.build(toolchain=test_parent_dir / tc_fname, timeout = 60*10) | |||||
| proc.check_run([(tmp_project.build_root / 'use-cryptopp').with_suffix(paths.EXE_SUFFIX)]) | proc.check_run([(tmp_project.build_root / 'use-cryptopp').with_suffix(paths.EXE_SUFFIX)]) |
| return copy.deepcopy(self) | return copy.deepcopy(self) | ||||
| @property | @property | ||||
| def catalog_path_arg(self) -> str: | |||||
| def pkg_db_path_arg(self) -> str: | |||||
| """The arguments for --catalog""" | """The arguments for --catalog""" | ||||
| return f'--catalog={self.pkg_db_path}' | return f'--catalog={self.pkg_db_path}' | ||||
| @property | @property | ||||
| def repo_dir_arg(self) -> str: | |||||
| def cache_dir_arg(self) -> str: | |||||
| """The arguments for --repo-dir""" | """The arguments for --repo-dir""" | ||||
| return f'--repo-dir={self.repo_dir}' | return f'--repo-dir={self.repo_dir}' | ||||
| def catalog_json_import(self, path: Path) -> None: | def catalog_json_import(self, path: Path) -> None: | ||||
| """Run 'catalog import' to import the given JSON. Only applicable to older 'dds'""" | """Run 'catalog import' to import the given JSON. Only applicable to older 'dds'""" | ||||
| self.run(['catalog', 'import', self.catalog_path_arg, f'--json={path}']) | |||||
| self.run(['catalog', 'import', self.pkg_db_path_arg, f'--json={path}']) | |||||
| def catalog_get(self, what: str) -> None: | def catalog_get(self, what: str) -> None: | ||||
| self.run(['catalog', 'get', self.catalog_path_arg, what]) | |||||
| self.run(['catalog', 'get', self.pkg_db_path_arg, what]) | |||||
| def pkg_get(self, what: str) -> None: | def pkg_get(self, what: str) -> None: | ||||
| self.run(['pkg', 'get', self.catalog_path_arg, what]) | |||||
| self.run(['pkg', 'get', self.pkg_db_path_arg, what]) | |||||
| def repo_add(self, url: str) -> None: | def repo_add(self, url: str) -> None: | ||||
| self.run(['pkg', 'repo', 'add', self.catalog_path_arg, url]) | |||||
| self.run(['pkg', 'repo', 'add', self.pkg_db_path_arg, url]) | |||||
| def repo_remove(self, name: str) -> None: | def repo_remove(self, name: str) -> None: | ||||
| self.run(['pkg', 'repo', 'remove', self.catalog_path_arg, name]) | |||||
| self.run(['pkg', 'repo', 'remove', self.pkg_db_path_arg, name]) | |||||
| def repo_import(self, sdist: Path) -> None: | def repo_import(self, sdist: Path) -> None: | ||||
| self.run(['repo', self.repo_dir_arg, 'import', sdist]) | |||||
| self.run(['repo', self.cache_dir_arg, 'import', sdist]) | |||||
| def pkg_import(self, filepath: Pathish) -> None: | def pkg_import(self, filepath: Pathish) -> None: | ||||
| self.run(['pkg', 'import', filepath, self.repo_dir_arg]) | |||||
| self.run(['pkg', 'import', filepath, self.cache_dir_arg]) | |||||
| def build(self, | def build(self, | ||||
| *, | *, | ||||
| [ | [ | ||||
| 'build', | 'build', | ||||
| f'--toolchain={toolchain}', | f'--toolchain={toolchain}', | ||||
| self.repo_dir_arg, | |||||
| self.catalog_path_arg, | |||||
| self.cache_dir_arg, | |||||
| self.pkg_db_path_arg, | |||||
| f'--jobs={jobs}', | f'--jobs={jobs}', | ||||
| f'{self.project_dir_flag}={root}', | f'{self.project_dir_flag}={root}', | ||||
| f'--out={build_root}', | f'--out={build_root}', | ||||
| toolchain = toolchain or tc_mod.get_default_audit_toolchain() | toolchain = toolchain or tc_mod.get_default_audit_toolchain() | ||||
| self.run([ | self.run([ | ||||
| 'compile-file', | 'compile-file', | ||||
| self.catalog_path_arg, | |||||
| self.repo_dir_arg, | |||||
| self.pkg_db_path_arg, | |||||
| self.cache_dir_arg, | |||||
| paths, | paths, | ||||
| f'--toolchain={toolchain}', | f'--toolchain={toolchain}', | ||||
| f'{self.project_dir_flag}={project_dir}', | f'{self.project_dir_flag}={project_dir}', | ||||
| self.run([ | self.run([ | ||||
| 'build-deps', | 'build-deps', | ||||
| f'--toolchain={toolchain}', | f'--toolchain={toolchain}', | ||||
| self.catalog_path_arg, | |||||
| self.repo_dir_arg, | |||||
| self.pkg_db_path_arg, | |||||
| self.cache_dir_arg, | |||||
| args, | args, | ||||
| ]) | ]) | ||||
| Wraps the new 'dds' executable with some convenience APIs | Wraps the new 'dds' executable with some convenience APIs | ||||
| """ | """ | ||||
| @property | @property | ||||
| def repo_dir_arg(self) -> str: | |||||
| def cache_dir_arg(self) -> str: | |||||
| return f'--pkg-cache-dir={self.repo_dir}' | return f'--pkg-cache-dir={self.repo_dir}' | ||||
| @property | @property | ||||
| def catalog_path_arg(self) -> str: | |||||
| def pkg_db_path_arg(self) -> str: | |||||
| return f'--pkg-db-path={self.pkg_db_path}' | return f'--pkg-db-path={self.pkg_db_path}' | ||||
| @property | @property |
| """Argument for --project""" | """Argument for --project""" | ||||
| return f'--project={self.root}' | return f'--project={self.root}' | ||||
| def build(self, *, toolchain: Optional[Pathish] = None) -> None: | |||||
| def build(self, *, toolchain: Optional[Pathish] = None, timeout: Optional[int] = None) -> None: | |||||
| """ | """ | ||||
| Execute 'dds build' on the project | Execute 'dds build' on the project | ||||
| """ | """ | ||||
| with tc_mod.fixup_toolchain(toolchain or tc_mod.get_default_test_toolchain()) as tc: | with tc_mod.fixup_toolchain(toolchain or tc_mod.get_default_test_toolchain()) as tc: | ||||
| self.dds.build(root=self.root, build_root=self.build_root, toolchain=tc, more_args=['-ldebug']) | |||||
| self.dds.build(root=self.root, | |||||
| build_root=self.build_root, | |||||
| toolchain=tc, | |||||
| timeout=timeout, | |||||
| more_args=['-ldebug']) | |||||
| def compile_file(self, *paths: Pathish, toolchain: Optional[Pathish] = None) -> None: | def compile_file(self, *paths: Pathish, toolchain: Optional[Pathish] = None) -> None: | ||||
| with tc_mod.fixup_toolchain(toolchain or tc_mod.get_default_test_toolchain()) as tc: | with tc_mod.fixup_toolchain(toolchain or tc_mod.get_default_test_toolchain()) as tc: | ||||
| ], cwd=self.build_root) | ], cwd=self.build_root) | ||||
| def sdist_export(self) -> None: | def sdist_export(self) -> None: | ||||
| self.dds.run(['sdist', 'export', self.dds.repo_dir_arg, self.project_dir_arg]) | |||||
| self.dds.run(['sdist', 'export', self.dds.cache_dir_arg, self.project_dir_arg]) | |||||
| def write(self, path: Pathish, content: str) -> Path: | def write(self, path: Pathish, content: str) -> Path: | ||||
| path = Path(path) | path = Path(path) |