tlaplus-cli 0.4.1__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tlaplus_cli-0.4.1/src/tlaplus_cli.egg-info → tlaplus_cli-0.4.2}/PKG-INFO +1 -1
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/pyproject.toml +1 -1
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/tlc/compiler.py +38 -8
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2/src/tlaplus_cli.egg-info}/PKG-INFO +1 -1
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/SOURCES.txt +1 -0
- tlaplus_cli-0.4.2/tests/test_build_both.py +32 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/LICENSE +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/MANIFEST.in +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/README.md +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/setup.cfg +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cache/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cache/github.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cli.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/check_java.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/config/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/config/edit.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/config/list.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/fetch_cache/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/fetch_cache/clear.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/modules/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/modules/build.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/modules/lib.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/modules/path.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tlc.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/dir.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/install.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/list.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/meta/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/meta/sync.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/path.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/pin.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/uninstall.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/cmd/tools/upgrade.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/config/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/config/loader.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/config/schema.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/java/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/java/inspector.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/project/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/project/core.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/py.typed +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/resources/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/resources/default_config.yaml +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/tlc/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/tlc/runner.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/ui.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/__init__.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/api.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/downloader.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/metadata.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/paths.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/resolver.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli/versioning/schema.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/dependency_links.txt +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/entry_points.txt +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/requires.txt +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/src/tlaplus_cli.egg-info/top_level.txt +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_build_modules_path.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_cli.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_config.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_config_suite.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_modules_build_lib.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_modules_lib.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_modules_path.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_settings.py +0 -0
- {tlaplus_cli-0.4.1 → tlaplus_cli-0.4.2}/tests/test_tlc_modules_path.py +0 -0
|
@@ -14,7 +14,7 @@ def get_tlc_jar_path() -> Path:
|
|
|
14
14
|
return pinned_jar if (pinned_jar and pinned_jar.exists()) else legacy
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
def compile_modules(base_dir: Path | None = None, verbose: bool = False) -> Path:
|
|
17
|
+
def compile_modules(base_dir: Path | None = None, verbose: bool = False) -> Path: # noqa: PLR0912, PLR0915
|
|
18
18
|
"""Compile custom Java modules. Returns the classes directory path."""
|
|
19
19
|
config = load_config()
|
|
20
20
|
base_dir = base_dir or workspace_root()
|
|
@@ -24,19 +24,49 @@ def compile_modules(base_dir: Path | None = None, verbose: bool = False) -> Path
|
|
|
24
24
|
msg = "tla2tools.jar not found. Run 'tla tools install' first."
|
|
25
25
|
raise FileNotFoundError(msg)
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
local_modules_dir = base_dir / config.workspace.modules_dir
|
|
28
28
|
classes_dir = base_dir / config.workspace.classes_dir
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
custom_modules_dir = None
|
|
31
|
+
if config.module_path:
|
|
32
|
+
custom_modules_dir = Path(config.module_path)
|
|
33
|
+
if not custom_modules_dir.exists():
|
|
34
|
+
msg = f"modules directory not found: {custom_modules_dir}"
|
|
35
|
+
raise FileNotFoundError(msg)
|
|
36
|
+
|
|
37
|
+
if not config.module_path and not local_modules_dir.exists():
|
|
38
|
+
msg = f"modules directory not found: {local_modules_dir}"
|
|
39
|
+
raise FileNotFoundError(msg)
|
|
40
|
+
|
|
41
|
+
lib_jars = []
|
|
42
|
+
if config.module_lib_path:
|
|
43
|
+
lib_dir = Path(config.module_lib_path)
|
|
44
|
+
if lib_dir.is_dir():
|
|
45
|
+
lib_jars.extend(sorted(lib_dir.glob("*.jar")))
|
|
46
|
+
else:
|
|
47
|
+
if custom_modules_dir:
|
|
48
|
+
custom_lib = custom_modules_dir / "lib"
|
|
49
|
+
if custom_lib.is_dir():
|
|
50
|
+
lib_jars.extend(sorted(custom_lib.glob("*.jar")))
|
|
51
|
+
local_lib = local_modules_dir / "lib"
|
|
52
|
+
if local_lib.is_dir():
|
|
53
|
+
lib_jars.extend(sorted(local_lib.glob("*.jar")))
|
|
54
|
+
|
|
55
|
+
# Remove duplicates preserving order
|
|
56
|
+
unique_jars = []
|
|
57
|
+
for jar in lib_jars:
|
|
58
|
+
if jar not in unique_jars:
|
|
59
|
+
unique_jars.append(jar)
|
|
60
|
+
lib_jars = unique_jars
|
|
31
61
|
|
|
32
|
-
lib_jars = sorted(lib_dir.glob("*.jar")) if lib_dir.is_dir() else []
|
|
33
62
|
classpath = os.pathsep.join([str(jar_path)] + [str(j) for j in lib_jars])
|
|
34
63
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
64
|
+
java_files = []
|
|
65
|
+
if custom_modules_dir:
|
|
66
|
+
java_files.extend(list(custom_modules_dir.rglob("*.java")))
|
|
67
|
+
if local_modules_dir.exists():
|
|
68
|
+
java_files.extend(list(local_modules_dir.rglob("*.java")))
|
|
38
69
|
|
|
39
|
-
java_files = list(modules_dir.rglob("*.java"))
|
|
40
70
|
if not java_files:
|
|
41
71
|
return classes_dir
|
|
42
72
|
|
|
@@ -55,6 +55,7 @@ src/tlaplus_cli/versioning/metadata.py
|
|
|
55
55
|
src/tlaplus_cli/versioning/paths.py
|
|
56
56
|
src/tlaplus_cli/versioning/resolver.py
|
|
57
57
|
src/tlaplus_cli/versioning/schema.py
|
|
58
|
+
tests/test_build_both.py
|
|
58
59
|
tests/test_build_modules_path.py
|
|
59
60
|
tests/test_cli.py
|
|
60
61
|
tests/test_config.py
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from tlaplus_cli.cli import app
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_build_uses_both_local_and_custom_module_path(mocker, tmp_path, base_settings, runner):
|
|
5
|
+
custom_modules = tmp_path / "custom_modules"
|
|
6
|
+
custom_modules.mkdir()
|
|
7
|
+
(custom_modules / "Custom.java").write_text("class Custom {}")
|
|
8
|
+
|
|
9
|
+
local_modules = tmp_path / "modules"
|
|
10
|
+
local_modules.mkdir()
|
|
11
|
+
(local_modules / "Local.java").write_text("class Local {}")
|
|
12
|
+
|
|
13
|
+
settings = base_settings.model_copy(deep=True)
|
|
14
|
+
settings.module_path = str(custom_modules)
|
|
15
|
+
mocker.patch("tlaplus_cli.tlc.compiler.load_config", return_value=settings)
|
|
16
|
+
mocker.patch("tlaplus_cli.tlc.compiler.workspace_root", return_value=tmp_path)
|
|
17
|
+
|
|
18
|
+
pinned_dir = tmp_path / "tools" / "v1.8.0"
|
|
19
|
+
pinned_dir.mkdir(parents=True)
|
|
20
|
+
(pinned_dir / "tla2tools.jar").write_bytes(b"fake")
|
|
21
|
+
mocker.patch("tlaplus_cli.tlc.compiler.get_pinned_version_dir", return_value=pinned_dir)
|
|
22
|
+
|
|
23
|
+
mock_run = mocker.patch("tlaplus_cli.tlc.compiler.subprocess.run")
|
|
24
|
+
mock_run.return_value.returncode = 0
|
|
25
|
+
|
|
26
|
+
result = runner.invoke(app, ["modules", "build"])
|
|
27
|
+
|
|
28
|
+
assert result.exit_code == 0
|
|
29
|
+
args, _ = mock_run.call_args
|
|
30
|
+
cmd = args[0]
|
|
31
|
+
assert str(custom_modules / "Custom.java") in cmd
|
|
32
|
+
assert str(local_modules / "Local.java") in cmd
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|