kiwi-code 0.0.508__tar.gz → 0.0.510__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.
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/PKG-INFO +1 -1
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/pyproject.toml +1 -1
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/autoupdate.py +24 -10
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_autoupdate.py +25 -1
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/uv.lock +1 -1
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/.github/workflows/publish.yml +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/.github/workflows/test.yml +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/.gitignore +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/.python-version +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/Makefile +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/README.md +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/docs/runtime_audit.html +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/docs/social_login_e2e.md +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/scripts/set_edition.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/scripts/ws_auth_check.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/common/__init__.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/common/banner.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/__init__.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/_edition.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/auth.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/autocode.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/checkpoints.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/cli.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/client.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/commands.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/edition.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/human_questions.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/io_threads.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/logger.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/models.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/oauth.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/run_activity.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/runtime_manager.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/server.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/subagents.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_cli/terminal_mode.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/__init__.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/__main__.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/auth.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/checkpoints.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/cli.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/commands.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/constants.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/__init__.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/batch.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/codelens.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/context.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/edits.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/handler.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/paths.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/read.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/search.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/text.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/upload.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/fs/write.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/handlers.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/link.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/main.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/restricted.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/sessions.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/state.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/tui_bridge.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/ui.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_runtime/uploads.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/__init__.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/attention.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/inline_file_picker.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/latex_unicode.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/main.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/random_words.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/role_mode.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/runtime_agent.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/__init__.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/attach_content.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/command_result.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/detach_files.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/file_browser.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/help.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/id_picker.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/login.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/runtime_cleanup.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/runtime_logs.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/slash_picker.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/term_activity_view.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/term_dashboard.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/term_dashboard_css.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/term_dashboard_helpers.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/term_dashboard_widgets.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/term_question_widgets.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/term_status_line.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/screens/term_subagent_widgets.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/slash_commands.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/status_words.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/term_app.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/terminal_theme.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/ui_settings.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/widgets.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/src/kiwi_tui/worktrees.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/test_hello.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/__init__.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/conftest.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_account_server.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_attention.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_autocode_actions.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_batch_fs_tool.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_checkpoints.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_cli_help.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_command_tips.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_copy_path_fs_tool.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_fs_edit_fidelity.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_human_questions.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_imports.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_io_threads.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_login_social.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_math_and_tables.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_oauth.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_read_file_streaming.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_reexec_kiwi.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_reply_selection.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_role_mode_injection.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_run_activity.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_run_steering.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_runtime_cleanup_per_account.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_runtime_connection.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_runtime_edit_diffs.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_runtime_fixes.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_runtime_imports_on_windows.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_runtime_log_trimming.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_runtime_social_login.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_search_in_files_fs_tool.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_slash_commands.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_stats_command.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_status_line.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_subagents.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_term_dashboard_ui.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_terminal_mode.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_terminal_theme.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_toasts.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_tokens.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_tui_interactive_runtime.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_tui_palette.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_unified_diff.py +0 -0
- {kiwi_code-0.0.508 → kiwi_code-0.0.510}/tests/test_worktrees.py +0 -0
|
@@ -14,8 +14,10 @@ cannot be replaced), a start that is not interactive, or when turned off with
|
|
|
14
14
|
"""
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
|
+
import importlib.util
|
|
17
18
|
import json
|
|
18
19
|
import os
|
|
20
|
+
import shutil
|
|
19
21
|
import subprocess
|
|
20
22
|
import sys
|
|
21
23
|
import time
|
|
@@ -87,13 +89,17 @@ def record_latest(version: str) -> None:
|
|
|
87
89
|
_write_state(latest=str(version), checked_at=time.time())
|
|
88
90
|
|
|
89
91
|
|
|
90
|
-
def
|
|
91
|
-
|
|
92
|
-
|
|
92
|
+
def _release(version: str) -> tuple[int, ...] | None:
|
|
93
|
+
"""A release version as numbers: kiwi's are always "1.2.3" (scripts/set_edition.py)."""
|
|
94
|
+
parts = str(version or "").strip().split(".")
|
|
95
|
+
return tuple(int(p) for p in parts) if all(p.isdigit() for p in parts) else None
|
|
93
96
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
|
|
98
|
+
def newer(latest: str, current: str) -> bool:
|
|
99
|
+
"""Whether `latest` is a later release than `current`. Compared here rather than with
|
|
100
|
+
`packaging`, which kiwi does not depend on: an install from PyPI does not have it."""
|
|
101
|
+
a, b = _release(latest), _release(current)
|
|
102
|
+
return a is not None and b is not None and a > b
|
|
97
103
|
|
|
98
104
|
|
|
99
105
|
def pending(current: str, *, now: float | None = None) -> str | None:
|
|
@@ -150,10 +156,18 @@ def installer(package: str, *, prefix: str | None = None, base_prefix: str | Non
|
|
|
150
156
|
return Installer("uv", ("uv", "tool", "upgrade", package), f"uv tool upgrade {package}")
|
|
151
157
|
if (env / "pipx_metadata.json").exists() or ("pipx" in parts and "venvs" in parts):
|
|
152
158
|
return Installer("pipx", ("pipx", "upgrade", package), f"pipx upgrade {package}")
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
159
|
+
# A plain virtual environment: with its own pip, or (made by `uv venv`) without one.
|
|
160
|
+
if importlib.util.find_spec("pip") is not None:
|
|
161
|
+
return Installer(
|
|
162
|
+
"pip", (sys.executable, "-m", "pip", "install", "--upgrade", "--quiet", package),
|
|
163
|
+
f"pip install --upgrade {package}",
|
|
164
|
+
)
|
|
165
|
+
if shutil.which("uv"):
|
|
166
|
+
return Installer(
|
|
167
|
+
"uv pip", ("uv", "pip", "install", "--upgrade", "--quiet", "--python", sys.executable, package),
|
|
168
|
+
f"uv pip install --upgrade {package}",
|
|
169
|
+
)
|
|
170
|
+
return None
|
|
157
171
|
|
|
158
172
|
|
|
159
173
|
def manual_command(package: str) -> str:
|
|
@@ -3,6 +3,7 @@ next start, with the tool kiwi was installed with, and the new version is starte
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import subprocess
|
|
6
|
+
import sys
|
|
6
7
|
import time
|
|
7
8
|
import types
|
|
8
9
|
|
|
@@ -27,15 +28,26 @@ def home(isolated_home, monkeypatch):
|
|
|
27
28
|
return isolated_home
|
|
28
29
|
|
|
29
30
|
|
|
30
|
-
def test_each_install_is_updated_with_its_own_tool(home) -> None:
|
|
31
|
+
def test_each_install_is_updated_with_its_own_tool(home, monkeypatch) -> None:
|
|
31
32
|
uv = autoupdate.installer("kiwi-code", prefix=UV_TOOL, base_prefix="/usr", platform="linux")
|
|
32
33
|
assert uv.command == ("uv", "tool", "upgrade", "kiwi-code")
|
|
33
34
|
pipx = autoupdate.installer("kiwi-code", prefix=PIPX, base_prefix="/usr", platform="darwin")
|
|
34
35
|
assert pipx.command == ("pipx", "upgrade", "kiwi-code")
|
|
36
|
+
monkeypatch.setattr(autoupdate.importlib.util, "find_spec", lambda name: object()) # has pip
|
|
35
37
|
venv = autoupdate.installer("kiwi-code", prefix="/proj/.venv", base_prefix="/usr", platform="linux")
|
|
36
38
|
assert venv.name == "pip" and venv.command[-1] == "kiwi-code" and "--upgrade" in venv.command
|
|
37
39
|
|
|
38
40
|
|
|
41
|
+
def test_a_virtual_environment_without_pip_is_updated_with_uv_or_not_at_all(home, monkeypatch) -> None:
|
|
42
|
+
monkeypatch.setattr(autoupdate.importlib.util, "find_spec", lambda name: None)
|
|
43
|
+
monkeypatch.setattr(autoupdate.shutil, "which", lambda name: "/usr/bin/uv")
|
|
44
|
+
venv = autoupdate.installer("kiwi-code", prefix="/proj/.venv", base_prefix="/usr", platform="linux")
|
|
45
|
+
assert venv.command[:3] == ("uv", "pip", "install") and venv.command[-1] == "kiwi-code"
|
|
46
|
+
assert ("--python", autoupdate.sys.executable) == venv.command[-3:-1]
|
|
47
|
+
monkeypatch.setattr(autoupdate.shutil, "which", lambda name: None)
|
|
48
|
+
assert autoupdate.installer("kiwi-code", prefix="/proj/.venv", base_prefix="/usr", platform="linux") is None
|
|
49
|
+
|
|
50
|
+
|
|
39
51
|
def test_a_tool_folder_kept_elsewhere_is_known_by_the_file_the_tool_leaves(home, tmp_path) -> None:
|
|
40
52
|
uv, pipx = tmp_path / "tools" / "kiwi-code", tmp_path / "apps" / "kiwi-code"
|
|
41
53
|
uv.mkdir(parents=True)
|
|
@@ -233,3 +245,15 @@ def test_the_version_names_the_package(monkeypatch, capsys) -> None:
|
|
|
233
245
|
monkeypatch.setattr(main.sys, "argv", ["kiwi", "--version"])
|
|
234
246
|
assert main.main() == 0
|
|
235
247
|
assert capsys.readouterr().out == "kiwi-code 0.0.508\n"
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def test_versions_are_compared_without_packaging(monkeypatch) -> None:
|
|
251
|
+
# An install from PyPI does not have `packaging` (kiwi does not depend on it).
|
|
252
|
+
monkeypatch.setitem(sys.modules, "packaging", None)
|
|
253
|
+
monkeypatch.setitem(sys.modules, "packaging.version", None)
|
|
254
|
+
assert autoupdate.newer("0.0.508", "0.0.507")
|
|
255
|
+
assert autoupdate.newer("0.0.10", "0.0.9") # by number, not as text
|
|
256
|
+
assert autoupdate.newer("0.1.0", "0.0.999")
|
|
257
|
+
assert not autoupdate.newer("0.0.507", "0.0.507")
|
|
258
|
+
assert not autoupdate.newer("0.0.506", "0.0.507")
|
|
259
|
+
assert not autoupdate.newer("0.0.508rc1", "0.0.507") and not autoupdate.newer("", "0.0.507")
|
|
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
|
|
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
|
|
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
|