Acquire apply.lock through one lock_cli helper that takes &GlobalArgs; the sequence is open-coded 9 times and renders lock_held 3 ways
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 58/100
- Issue 类型
- 重构
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- rust
调研方向
Start with crates/socket-patch-cli/src/commands/lock_cli.rs, then inspect the listed call sites in vendor.rs, scan/withdrawn.rs, scan/vendor_flow.rs, scan/hosted.rs, scan/gc.rs, agent_download.rs, and get.rs. Trace the existing lock acquisition and failure rendering, then run the existing lock tests and CLI lock end-to-end tests. Done means the listed sites use the shared helper, JSON mode keeps stderr empty, and lock error codes and exit codes remain unchanged.
由索引模型根据 Issue 内容生成。
描述
[agent] Filed by the scheduled architecture audit (audit-cli-tests). Register: register comment.
Kind: refactor. Register ID: T09.
Problem
lock_cli has a helper for taking .socket/apply.lock, acquire_or_emit, and its module doc says it exists so "call sites stay one line each". Only 5 sites use it: apply, repair, remove, rollback and vendor. Even those 5 pass the same fields by hand, args.common.json, args.common.dry_run and Duration::from_secs(lock_timeout.unwrap_or(0)).
9 more sites open-code the whole sequence instead: acquire_with_status, then lock_failure, then their own rendering. They are vendor ×2, scan/withdrawn, scan/vendor_flow, scan/hosted, scan/gc ×2, agent_download and get. In total Duration::from_secs(*.lock_timeout.unwrap_or(0)) is written 14 times in the CLI.
The copies have drifted:
lock_heldis rendered 3 ways for humans:- lock_cli
format_lock_errorprintsError: Another…plus a hint and(Lock file: <path>). - vendor eject
emit_eject_refusalprintsError (lock_held): another…, with no hint and no path. - scan/vendor_flow.rs L995-L1006 prints
Error (lock_held): ….plusHELD_RETRY_HINT, with no path.
- lock_cli
- scan/hosted writes the human error under
--jsontoo.acquire_hosted_lockalwayseprint!s theError:block, even when it also builds the JSON error envelope.agent_download::report_lock_failureandacquire_or_emitsuppress it under--json. I found this by reading the code; I did not run it. report_lock_failureis in the wrong module. It lives inagent_download.rs, notlock_cli.rs.
Proposed change
- Add
GlobalArgs::lock_timeout() -> Duration. - Replace
acquire_or_emit(dir, cmd, json, dry_run, timeout)withlock_cli::acquire(common: &GlobalArgs, cmd: Command) -> Result<LockGuard, LockFailure>. It renders through one function: human text to stderr unless--json, and the envelope error otherwise. - Move
report_lock_failureintolock_cli. - Route the 9 open-coded sites through
lock_cli::acquire. The vendor-eject and vendor_flow renderers go away. - Inline lock_cli's 4 single-caller helpers:
emit,waiting_message,held_hintandheld_message.
Size
About 12 files under crates/socket-patch-cli/src/commands/, roughly −120 lines.
Acceptance criteria
- Every lock-held and lock-io exit gives the same
errorCode(lock_held/lock_io) and the same exit code as today. The existing lock tests inlock_cli.rsand the CLI lock e2e tests still pass. - Human stderr is identical across commands, and nothing goes to stderr under
--json. Add one test that runsscan --jsonagainst a held lock and asserts that stderr is empty. - Drop the subset tests
acquire_or_emit_succeeds_on_fresh_dirandheld_message_reports_whole_seconds, and fix the doc oferror_envelope_propagates_dry_run_and_command, which claims more than it asserts.
- 主要语言
- Rust
- 星标
- 9
- 派生
- 2
- 平均合并
- 20 小时 47 分钟
- 30 天内合并 PR
- 681
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
SocketDev/socket-patch 的其他 Issue
-
agent:triaged arch-audit priority:p3 refactor
难度 2/5 1-3 小时 新手友好度 83/100
SocketDev/socket-patch#1860 ·
维护者通常 1 天内回复
-
agent:triaged arch-audit priority:p3 refactor
难度 2/5 1-3 小时 新手友好度 78/100
SocketDev/socket-patch#1838 ·
维护者通常 1 天内回复
-
arch-audit refactor
难度 4/5 3-5 天 新手友好度 54/100
SocketDev/socket-patch#1993 ·
维护者通常 1 天内回复
-
arch-audit refactor
难度 3/5 1-2 天 新手友好度 66/100
SocketDev/socket-patch#1992 ·
维护者通常 1 天内回复
-
agent:triaged arch-audit priority:p3 refactor
难度 4/5 3-5 天 新手友好度 35/100
SocketDev/socket-patch#1987 · 1 条评论 ·
维护者通常 1 天内回复
查看 SocketDev/socket-patch 的全部 Issue
相似的 Issue
-
Perl - Readme Drift可能已有人在做 @Omnideth 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 76/100
CommunityToolkit/Aspire#2375 ·
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 86/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复