code-aide 1.11.0__tar.gz → 1.11.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.
- {code_aide-1.11.0 → code_aide-1.11.2}/PKG-INFO +1 -1
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/__init__.py +1 -1
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/commands_tools.py +1 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/config.py +24 -9
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/data/tools.json +8 -4
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/detection.py +8 -2
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/install.py +11 -2
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/operations.py +12 -10
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/status.py +8 -3
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_config.py +62 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_detection.py +24 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_install.py +16 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/.github/workflows/ci.yml +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/.github/workflows/publish.yml +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/.gitignore +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/.gitlab-ci.yml +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/.pre-commit-config.yaml +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/AGENTS.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/CLAUDE.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/LICENSE +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/README.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/TODO.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/pyproject.toml +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/script-archive/README.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/script-archive/amp-install.sh +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/script-archive/claude-install.sh +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/script-archive/cursor-install.sh +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/specs/auto-migrate-deprecated-installs.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/specs/claude-native-installer-migration.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/specs/missing-coding-llm-cli-tools.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/specs/pre-commit-uv-setup.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/specs/remove-bundled-version-baseline.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/specs/unify-upgrade-eligibility-with-shared-evaluator.md +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/__main__.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/commands_actions.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/console.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/constants.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/entry.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/install_types.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/prereqs.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/src/code_aide/versions.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_commands_actions.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_commands_tools.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_console.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_constants.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_install_types.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_operations.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_status.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/tests/test_versions.py +0 -0
- {code_aide-1.11.0 → code_aide-1.11.2}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-aide
|
|
3
|
-
Version: 1.11.
|
|
3
|
+
Version: 1.11.2
|
|
4
4
|
Summary: Manage AI coding CLI tools (Claude, Copilot, Cursor, Gemini, Amp, Codex)
|
|
5
5
|
Project-URL: Homepage, https://github.com/dajobe/code-aide
|
|
6
6
|
Project-URL: Repository, https://github.com/dajobe/code-aide
|
|
@@ -257,6 +257,7 @@ def cmd_status(args: argparse.Namespace) -> None:
|
|
|
257
257
|
status["version"],
|
|
258
258
|
assessment.latest_version,
|
|
259
259
|
assessment.package_info,
|
|
260
|
+
repo=tool_config.get("freebsd_pkg_repo"),
|
|
260
261
|
)
|
|
261
262
|
elif assessment.latest_version:
|
|
262
263
|
if assessment.version_state == VersionDisplayState.UP_TO_DATE:
|
|
@@ -66,20 +66,35 @@ DYNAMIC_FIELDS = ["latest_version", "latest_date", "install_sha256"]
|
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
def merge_cached_versions(tools: dict, cache: dict) -> None:
|
|
69
|
-
"""Merge cached dynamic fields into tool definitions in-place.
|
|
69
|
+
"""Merge cached dynamic fields into tool definitions in-place.
|
|
70
|
+
|
|
71
|
+
For install_sha256, the bundled value takes precedence when it differs
|
|
72
|
+
from the cache, since a new release with an updated hash means the
|
|
73
|
+
cache is stale.
|
|
74
|
+
"""
|
|
70
75
|
cached_tools = cache.get("tools", {})
|
|
71
76
|
for tool_key, tool_data in tools.items():
|
|
72
77
|
if tool_key in cached_tools:
|
|
73
78
|
for field in DYNAMIC_FIELDS:
|
|
74
79
|
if field in cached_tools[tool_key]:
|
|
75
|
-
if
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
if field == "install_sha256":
|
|
81
|
+
install_type = parse_install_type(
|
|
82
|
+
tool_data.get("install_type")
|
|
83
|
+
)
|
|
84
|
+
if install_type == InstallType.DIRECT_DOWNLOAD:
|
|
85
|
+
# Script checksum does not apply to tarball installs;
|
|
86
|
+
# ignore stale cache from older releases.
|
|
87
|
+
continue
|
|
88
|
+
bundled_sha = tool_data.get("install_sha256")
|
|
89
|
+
cached_sha = cached_tools[tool_key][field]
|
|
90
|
+
if (
|
|
91
|
+
bundled_sha
|
|
92
|
+
and cached_sha
|
|
93
|
+
and bundled_sha != cached_sha
|
|
94
|
+
):
|
|
95
|
+
# Bundled hash was updated in a newer release;
|
|
96
|
+
# discard stale cached hash.
|
|
97
|
+
continue
|
|
83
98
|
tool_data[field] = cached_tools[tool_key][field]
|
|
84
99
|
|
|
85
100
|
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
],
|
|
38
38
|
"docs_url": "https://code.claude.com/docs/en/setup",
|
|
39
39
|
"default_install": true,
|
|
40
|
-
"freebsd_port": "claude-code"
|
|
40
|
+
"freebsd_port": "claude-code",
|
|
41
|
+
"freebsd_pkg_repo": "FreeBSD-latest"
|
|
41
42
|
},
|
|
42
43
|
"gemini": {
|
|
43
44
|
"name": "Gemini CLI",
|
|
@@ -54,7 +55,8 @@
|
|
|
54
55
|
],
|
|
55
56
|
"docs_url": "https://github.com/google-gemini/gemini-cli",
|
|
56
57
|
"default_install": true,
|
|
57
|
-
"freebsd_port": "gemini-cli"
|
|
58
|
+
"freebsd_port": "gemini-cli",
|
|
59
|
+
"freebsd_pkg_repo": "FreeBSD-latest"
|
|
58
60
|
},
|
|
59
61
|
"amp": {
|
|
60
62
|
"name": "Amp (Sourcegraph)",
|
|
@@ -87,7 +89,8 @@
|
|
|
87
89
|
],
|
|
88
90
|
"docs_url": "https://github.com/openai/codex",
|
|
89
91
|
"default_install": false,
|
|
90
|
-
"freebsd_port": "codex"
|
|
92
|
+
"freebsd_port": "codex",
|
|
93
|
+
"freebsd_pkg_repo": "FreeBSD-latest"
|
|
91
94
|
},
|
|
92
95
|
"copilot": {
|
|
93
96
|
"name": "Copilot CLI",
|
|
@@ -104,7 +107,8 @@
|
|
|
104
107
|
],
|
|
105
108
|
"docs_url": "https://github.com/github/copilot-cli",
|
|
106
109
|
"default_install": false,
|
|
107
|
-
"freebsd_port": "github-copilot-cli"
|
|
110
|
+
"freebsd_port": "github-copilot-cli",
|
|
111
|
+
"freebsd_pkg_repo": "FreeBSD-latest"
|
|
108
112
|
},
|
|
109
113
|
"opencode": {
|
|
110
114
|
"name": "OpenCode",
|
|
@@ -290,7 +290,9 @@ def get_brew_package_info(
|
|
|
290
290
|
return result
|
|
291
291
|
|
|
292
292
|
|
|
293
|
-
def get_pkg_package_info(
|
|
293
|
+
def get_pkg_package_info(
|
|
294
|
+
package_name: str, repo: Optional[str] = None
|
|
295
|
+
) -> PackageVersionInfo:
|
|
294
296
|
"""Get package version info for a FreeBSD pkg-installed tool."""
|
|
295
297
|
result: PackageVersionInfo = {
|
|
296
298
|
"package": package_name,
|
|
@@ -318,8 +320,12 @@ def get_pkg_package_info(package_name: str) -> PackageVersionInfo:
|
|
|
318
320
|
pass
|
|
319
321
|
|
|
320
322
|
try:
|
|
323
|
+
rquery_cmd = ["pkg", "rquery"]
|
|
324
|
+
if repo:
|
|
325
|
+
rquery_cmd.extend(["-r", repo])
|
|
326
|
+
rquery_cmd.extend(["%v", package_name])
|
|
321
327
|
proc = subprocess.run(
|
|
322
|
-
|
|
328
|
+
rquery_cmd,
|
|
323
329
|
capture_output=True,
|
|
324
330
|
text=True,
|
|
325
331
|
timeout=10,
|
|
@@ -260,11 +260,20 @@ def install_tool(tool_name: str, dryrun: bool = False, force: bool = False) -> b
|
|
|
260
260
|
if not freebsd_port:
|
|
261
261
|
error(f"{tool_config['name']} is not available on FreeBSD (no port exists)")
|
|
262
262
|
return False
|
|
263
|
+
pkg_repo = tool_config.get("freebsd_pkg_repo")
|
|
263
264
|
if dryrun:
|
|
264
|
-
|
|
265
|
+
repo_flag = f" -r {pkg_repo}" if pkg_repo else ""
|
|
266
|
+
info(
|
|
267
|
+
f"[DRYRUN] Would install FreeBSD port: "
|
|
268
|
+
f"pkg install{repo_flag} {freebsd_port}"
|
|
269
|
+
)
|
|
265
270
|
return True
|
|
266
271
|
try:
|
|
267
|
-
|
|
272
|
+
cmd = ["sudo", "pkg", "install", "-y"]
|
|
273
|
+
if pkg_repo:
|
|
274
|
+
cmd.extend(["-r", pkg_repo])
|
|
275
|
+
cmd.append(freebsd_port)
|
|
276
|
+
run_command(cmd, check=True)
|
|
268
277
|
success(f"{tool_config['name']} installed successfully via FreeBSD pkg")
|
|
269
278
|
info(tool_config["next_steps"])
|
|
270
279
|
if "docs_url" in tool_config:
|
|
@@ -195,11 +195,12 @@ def upgrade_tool(tool_name: str) -> UpgradeResult:
|
|
|
195
195
|
if not pkg_name:
|
|
196
196
|
error(f"No FreeBSD port configured for {tool_config['name']}")
|
|
197
197
|
return UpgradeResult.FAILED
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
)
|
|
198
|
+
cmd = ["sudo", "pkg", "upgrade", "-y"]
|
|
199
|
+
pkg_repo = tool_config.get("freebsd_pkg_repo")
|
|
200
|
+
if pkg_repo:
|
|
201
|
+
cmd.extend(["-r", pkg_repo])
|
|
202
|
+
cmd.append(pkg_name)
|
|
203
|
+
run_command(cmd, check=True, capture=False)
|
|
203
204
|
|
|
204
205
|
elif method == InstallMethod.SYSTEM:
|
|
205
206
|
error(
|
|
@@ -343,11 +344,12 @@ def remove_tool(tool_name: str) -> bool:
|
|
|
343
344
|
if not pkg_name:
|
|
344
345
|
error(f"No FreeBSD port configured for {tool_config['name']}")
|
|
345
346
|
return False
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
)
|
|
347
|
+
cmd = ["sudo", "pkg", "delete", "-y"]
|
|
348
|
+
pkg_repo = tool_config.get("freebsd_pkg_repo")
|
|
349
|
+
if pkg_repo:
|
|
350
|
+
cmd.extend(["-r", pkg_repo])
|
|
351
|
+
cmd.append(pkg_name)
|
|
352
|
+
run_command(cmd, check=True, capture=False)
|
|
351
353
|
success(f"{tool_config['name']} removed successfully")
|
|
352
354
|
|
|
353
355
|
elif method == InstallMethod.SYSTEM:
|
|
@@ -251,7 +251,10 @@ class ToolUpgradeEvaluator:
|
|
|
251
251
|
pkg_name = install_info.get("detail") or self.tool_config.get(
|
|
252
252
|
"freebsd_port"
|
|
253
253
|
)
|
|
254
|
-
|
|
254
|
+
pkg_repo = self.tool_config.get("freebsd_pkg_repo")
|
|
255
|
+
self._package_info = (
|
|
256
|
+
get_pkg_package_info(pkg_name, repo=pkg_repo) if pkg_name else None
|
|
257
|
+
)
|
|
255
258
|
elif method == InstallMethod.SYSTEM:
|
|
256
259
|
tool_path = self._tool_path or shutil.which(self.tool_config["command"])
|
|
257
260
|
self._package_info = (
|
|
@@ -396,6 +399,7 @@ def print_pkg_version_status(
|
|
|
396
399
|
cli_version: str,
|
|
397
400
|
latest_version: Optional[str],
|
|
398
401
|
pkg_info: PackageInfo,
|
|
402
|
+
repo: Optional[str] = None,
|
|
399
403
|
) -> None:
|
|
400
404
|
"""Print version status for a FreeBSD pkg-managed tool."""
|
|
401
405
|
avail_ver = pkg_info.get("available_version")
|
|
@@ -411,6 +415,7 @@ def print_pkg_version_status(
|
|
|
411
415
|
|
|
412
416
|
if avail_ver:
|
|
413
417
|
pkg_name = pkg_info.get("package") or "FreeBSD pkg"
|
|
418
|
+
repo_suffix = f", {repo}" if repo else ""
|
|
414
419
|
show_upstream = (
|
|
415
420
|
latest_version
|
|
416
421
|
and not status_version_matches_latest(avail_ver, latest_version)
|
|
@@ -420,11 +425,11 @@ def print_pkg_version_status(
|
|
|
420
425
|
)
|
|
421
426
|
if show_upstream:
|
|
422
427
|
print(
|
|
423
|
-
f" Packaged: {avail_ver} ({pkg_name}) "
|
|
428
|
+
f" Packaged: {avail_ver} ({pkg_name}{repo_suffix}) "
|
|
424
429
|
f"{Colors.YELLOW}(upstream: {latest_version}){Colors.NC}"
|
|
425
430
|
)
|
|
426
431
|
else:
|
|
427
|
-
print(f" Packaged: {avail_ver} ({pkg_name})")
|
|
432
|
+
print(f" Packaged: {avail_ver} ({pkg_name}{repo_suffix})")
|
|
428
433
|
|
|
429
434
|
|
|
430
435
|
def get_tool_status(tool_name: str, tool_config: Dict[str, Any]) -> ToolStatus:
|
|
@@ -146,5 +146,67 @@ class TestMergeInstallSha256DirectDownload(unittest.TestCase):
|
|
|
146
146
|
self.assertNotIn("install_sha256", entry)
|
|
147
147
|
|
|
148
148
|
|
|
149
|
+
class TestMergeInstallSha256StaleCacheIgnored(unittest.TestCase):
|
|
150
|
+
"""Stale cached install_sha256 must not override updated bundled hash."""
|
|
151
|
+
|
|
152
|
+
def test_bundled_sha256_wins_over_stale_cache(self):
|
|
153
|
+
tools = {
|
|
154
|
+
"amp": {
|
|
155
|
+
"install_type": "script",
|
|
156
|
+
"name": "Amp",
|
|
157
|
+
"command": "amp",
|
|
158
|
+
"install_sha256": "new_bundled_hash_from_release",
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
cache = {
|
|
162
|
+
"tools": {
|
|
163
|
+
"amp": {
|
|
164
|
+
"install_sha256": "old_cached_hash",
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
code_aide_config.merge_cached_versions(tools, cache)
|
|
169
|
+
self.assertEqual(
|
|
170
|
+
tools["amp"]["install_sha256"], "new_bundled_hash_from_release"
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
def test_cache_applies_when_bundled_sha256_absent(self):
|
|
174
|
+
tools = {
|
|
175
|
+
"amp": {
|
|
176
|
+
"install_type": "script",
|
|
177
|
+
"name": "Amp",
|
|
178
|
+
"command": "amp",
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
cache = {
|
|
182
|
+
"tools": {
|
|
183
|
+
"amp": {
|
|
184
|
+
"install_sha256": "cached_hash",
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
code_aide_config.merge_cached_versions(tools, cache)
|
|
189
|
+
self.assertEqual(tools["amp"]["install_sha256"], "cached_hash")
|
|
190
|
+
|
|
191
|
+
def test_cache_applies_when_sha256_matches_bundled(self):
|
|
192
|
+
tools = {
|
|
193
|
+
"amp": {
|
|
194
|
+
"install_type": "script",
|
|
195
|
+
"name": "Amp",
|
|
196
|
+
"command": "amp",
|
|
197
|
+
"install_sha256": "same_hash",
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
cache = {
|
|
201
|
+
"tools": {
|
|
202
|
+
"amp": {
|
|
203
|
+
"install_sha256": "same_hash",
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
code_aide_config.merge_cached_versions(tools, cache)
|
|
208
|
+
self.assertEqual(tools["amp"]["install_sha256"], "same_hash")
|
|
209
|
+
|
|
210
|
+
|
|
149
211
|
if __name__ == "__main__":
|
|
150
212
|
unittest.main()
|
|
@@ -218,6 +218,30 @@ class TestGetPkgPackageInfo(unittest.TestCase):
|
|
|
218
218
|
self.assertEqual(result["available_version"], "2.1.63")
|
|
219
219
|
self.assertFalse(result["outdated"])
|
|
220
220
|
|
|
221
|
+
@mock.patch.object(cli_detection, "command_exists", return_value=True)
|
|
222
|
+
@mock.patch.object(cli_detection.subprocess, "run")
|
|
223
|
+
def test_repo_passes_r_flag_to_rquery(self, mock_run, mock_cmd):
|
|
224
|
+
calls = []
|
|
225
|
+
|
|
226
|
+
def side_effect(cmd, **kwargs):
|
|
227
|
+
calls.append(list(cmd))
|
|
228
|
+
result = mock.Mock()
|
|
229
|
+
result.returncode = 0
|
|
230
|
+
result.stdout = "2.1.63\n"
|
|
231
|
+
return result
|
|
232
|
+
|
|
233
|
+
mock_run.side_effect = side_effect
|
|
234
|
+
|
|
235
|
+
cli_detection.get_pkg_package_info("claude-code", repo="FreeBSD-latest")
|
|
236
|
+
|
|
237
|
+
# pkg query (local) should NOT have -r
|
|
238
|
+
self.assertEqual(calls[0], ["pkg", "query", "%v", "claude-code"])
|
|
239
|
+
# pkg rquery (remote) should have -r
|
|
240
|
+
self.assertEqual(
|
|
241
|
+
calls[1],
|
|
242
|
+
["pkg", "rquery", "-r", "FreeBSD-latest", "%v", "claude-code"],
|
|
243
|
+
)
|
|
244
|
+
|
|
221
245
|
|
|
222
246
|
class TestFormatInstallMethodSystem(unittest.TestCase):
|
|
223
247
|
"""Tests for format_install_method with system method."""
|
|
@@ -99,6 +99,22 @@ class TestInstallToolFreeBSD(unittest.TestCase):
|
|
|
99
99
|
["sudo", "pkg", "install", "-y", "test-tool-port"], check=True
|
|
100
100
|
)
|
|
101
101
|
|
|
102
|
+
@mock.patch.object(cli_install.platform, "system", return_value="FreeBSD")
|
|
103
|
+
@mock.patch.object(cli_install, "command_exists", return_value=False)
|
|
104
|
+
@mock.patch.object(cli_install, "run_command")
|
|
105
|
+
def test_freebsd_with_repo_passes_r_flag(self, mock_run, mock_cmd, mock_sys):
|
|
106
|
+
tool_config = self._make_tool_config(
|
|
107
|
+
freebsd_port="test-tool-port",
|
|
108
|
+
freebsd_pkg_repo="FreeBSD-latest",
|
|
109
|
+
)
|
|
110
|
+
with mock.patch.dict(cli_install.TOOLS, {"test": tool_config}, clear=True):
|
|
111
|
+
result = cli_install.install_tool("test")
|
|
112
|
+
self.assertTrue(result)
|
|
113
|
+
mock_run.assert_called_once_with(
|
|
114
|
+
["sudo", "pkg", "install", "-y", "-r", "FreeBSD-latest", "test-tool-port"],
|
|
115
|
+
check=True,
|
|
116
|
+
)
|
|
117
|
+
|
|
102
118
|
|
|
103
119
|
class TestExtractTarMember(unittest.TestCase):
|
|
104
120
|
"""Tests for extract_tar_member."""
|
|
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
|
{code_aide-1.11.0 → code_aide-1.11.2}/specs/unify-upgrade-eligibility-with-shared-evaluator.md
RENAMED
|
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
|