diff options
| author | dimdim11 <[email protected]> | 2026-05-14 20:00:45 +0300 |
|---|---|---|
| committer | dimdim11 <[email protected]> | 2026-05-14 20:47:32 +0300 |
| commit | f193ad3afbddfbe2e999c60431c2d42ca79d1750 (patch) | |
| tree | 354662580575d16a95e7b91aee41702b1972a7b8 /build/scripts | |
| parent | ac94ded76d19e7e59734ddab60a76e9167938e9b (diff) | |
Support any one package name for Go 1.25 coverage
Support any one package name for Go 1.25 coverage
commit_hash:c2c5ba2c3b4e18dddf4518abaf6dec045ef8c3cf
Diffstat (limited to 'build/scripts')
| -rw-r--r-- | build/scripts/go.py | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/build/scripts/go.py b/build/scripts/go.py index 3d66c81c252..bd30b6f3af8 100644 --- a/build/scripts/go.py +++ b/build/scripts/go.py @@ -143,26 +143,42 @@ class _GoToolCover(_GoTool): def __init__(self, args): super().__init__(args) + # For GO_TEST_FOR module in cover_module, else moddir is module for coverage self.cover_module = self.args.cover_module if self.args.cover_module else self.args.moddir self.cover_package = self.args.cover_package def execute(self) -> int: - # For GO_TEST_FOR module in cover_module, else moddir is module for coverage - go_files = [] + if not self.args.cover_srcs: + sys.stderr.write("Not found source files, skip covering\n") + return 0 + # Extract go packages from all go files + go_package2files = {} for go_file in self.args.cover_srcs: go_package = self.go_package(self.source_root / go_file) - if go_package == 'main': - self._make_empty_cover_go(go_file) # {go_file}.cover.go declared as output, we must create it - continue # can't generate coverage for package main - if go_package != self.cover_package: - sys.stderr.write( - f"In file '{go_file}' package '{go_package}' != configured package '{self.cover_package}', file skipped by coverage\n" - ) - self._make_empty_cover_go(go_file) # {go_file}.cover.go declared as output, we must create it - continue - go_files.append(go_file) - if not go_files: - raise Exception(f"Not found files for coverage with package '{self.cover_package}'") + if go_package not in go_package2files: + go_package2files[go_package] = [] + go_package2files[go_package].append(go_file) + go_packages = list(go_package2files.keys()) + if len(go_packages) > 1: + for go_pkg, go_pkg_files in go_package2files.items(): + # {go_file}.cover.go declared as output, we must create empty coverage files for build + for go_file in go_pkg_files: + self._make_empty_cover_go(go_file, go_pkg) + message = ( + "Few packages found in sources, can't make coverage, please, use only one pakage in all sources " + + f"(recommended 'package {self.cover_package}' or 'package main').\n" + + "Packages and files:" + ) + for go_pkg, go_pkg_files in go_package2files.items(): + if message[-1] == ')': + message += ',' + message += f' {go_pkg} ({', '.join(Path(go_file).name for go_file in go_pkg_files)})' + message += '.' + raise Exception(message) + go_package = go_packages[0] + go_files = go_package2files[go_package] + if go_package != self.cover_package and go_package != 'main': + sys.stderr.write(f"Package in files '{go_package}' != configured package '{self.cover_package}'\n") return self._do_package_coverage( go_package, self.args.cover_covervars, @@ -171,9 +187,9 @@ class _GoToolCover(_GoTool): go_files, ) - def _make_empty_cover_go(self, go_file: str) -> None: + def _make_empty_cover_go(self, go_file: str, go_pkg: str) -> None: with open(self.bindir / Path(go_file).name.replace('.go', self.args.cover_ext), 'wt', encoding="utf-8") as f: - f.write(f'package {self.cover_package}') + f.write(f'package {go_pkg}') def _do_package_coverage( self, go_package: str, covervars_file: str, outfileslist_file: str, pkgcfg_file: str, go_files: list[str] |
