Skip to content

Fix/version comparison - #54

Open
ktjysu wants to merge 2 commits into
miaoxworld:mainfrom
ktjysu:fix/version-comparison
Open

Fix/version comparison#54
ktjysu wants to merge 2 commits into
miaoxworld:mainfrom
ktjysu:fix/version-comparison

Conversation

@ktjysu

@ktjysu ktjysu commented Mar 28, 2026

Copy link
Copy Markdown

问题描述

当 openclaw --version 返回完整输出时(如 "OpenClaw 2026.3.24 (cff6dc9)"),版本比较逻辑会错误地认为有更新可用,即使当前版本已经是最新版本。

根本原因

openclaw --version 返回的完整格式包含前缀和 git commit hash:
OpenClaw 2026.3.24 (cff6dc9)
原来的版本比较逻辑直接使用这个完整字符串,按 . 分割后得到:
"OpenClaw 2026", "3", "24 (cff6dc9)"
第一部分 OpenClaw 2026 无法解析为数字,导致比较逻辑失效。

解决方案

修改 get_openclaw_version() 函数,使用正则表达式从完整输出中提取纯版本号:

use regex::Regex;
let version_re = Regex::new(r"(\d{4}\.\d+\.\d+)").ok()?;
version_re.captures(&output).map(|caps| caps[1].to_string())
支持的输出格式:
- OpenClaw 2026.3.24 (cff6dc9)
- 2026.3.24
- v2026.3.24
提取结果:2026.3.24
修改文件
- src-tauri/src/commands/installer.rs - 修改 get_openclaw_version() 函数
- src-tauri/Cargo.toml - 添加 regex 依赖
测试
- ✅ 当前版本和最新版本相同时,不再错误提示"发现新版本"
- ✅ 支持多种 openclaw --version 输出格式

ktjysu added 2 commits March 28, 2026 14:21
- Add get_gateway_port() function to read gateway.port from openclaw.json
- Replace hardcoded port 18789 with dynamic port in:
  - shell.rs: spawn_openclaw_gateway()
  - service.rs: service status/start/stop
  - config.rs: get_dashboard_url()
  - process.rs: check_port_in_use()
  - diagnostics.rs: security checks
Closes miaoxworld#51
- Add regex to extract version number from full output (format: 202X.XX.XX)
- Support various output formats: "OpenClaw 2026.3.24 (cff6dc9)", "2026.3.24", "v2026.3.24"
- Fix version comparison logic when versions are identical but full output differs
- Add regex dependency
@ktjysu

ktjysu commented Mar 28, 2026

Copy link
Copy Markdown
Author

这个实际可以解决 #46 提出的错误提示

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant