feat(git): tag management with restore for deleted tags and branches(rebuild 354) - #399
feat(git): tag management with restore for deleted tags and branches(rebuild 354)#399Wz58luck wants to merge 7 commits into
Conversation
|
稍等,我再测试下 |
|
行 需要review @我就行 |
1lck
left a comment
There was a problem hiding this comment.
Review
对照 #342:Core createTag/deleteTag、macOS New Tag / Delete Tag + 确认、删除可还原主路径整体对齐需求,架构也符合 lithe-core 沉淀 + 平台接入。
其余项(createBranch 用 fullName==shortName 旁路、契约总表漏写字段、Windows 后接、prepare 脚本等)不阻塞合并,可 follow-up。
合并前需修 1 项(见 inline):删除失败时不应清掉上一次成功的 restore 会话记录。该行为与「删除后可 Restore」目标冲突,且当前测试把错误语义锁死了。
| : trimmedMessage(result) | ||
| ) | ||
| } else { | ||
| recentlyDeletedBranch = nil |
There was a problem hiding this comment.
Blocking: 删除失败时不应 clear 上一次成功的 restore 记录。
当前逻辑:
} else {
recentlyDeletedBranch = nil // 失败也清掉
...
}问题
成功删除 feature/a 后 banner 可 Restore;随后对 feature/b 删除失败(不存在 / 未合并等)会把 recentlyDeletedBranch 置 nil,A 的还原入口消失。失败与既有成功记录无关,却撤销了本 PR 的 session restore。
deleteTag(同文件下方 else { recentlyDeletedTag = nil })同样问题。
复现(分支)
- Git Log 删除已合并分支
feature/a,出现 Restore banner - 再删除不存在或未合并的
feature/b并失败 - A 的 banner/Restore 被清掉
期望
仅在本次删除成功并拿到 branchDeletion / tagDeletion 时替换记录;失败只 notify,保留既有记录。
建议
if result.succeeded, let deletion = result.branchDeletion {
recentlyDeletedBranch = deletion
notify?(successfulMessage(result, fallback: "Deleted branch \(deletion.name)"))
} else {
// 不要 clear recentlyDeletedBranch
notify?(trimmedMessage(result))
}同步修改测试 gitBranchDeletionFailureClearsThePreviousRecoveryRecord:失败后应仍保留 feature/a;标签加对等用例。
| upstreamShortName: nil | ||
| )) | ||
|
|
||
| #expect(feature.recentlyDeletedBranch == nil) |
There was a problem hiding this comment.
Blocking(配套): 本测试当前断言失败删除会清掉上一次记录(recentlyDeletedBranch == nil),把错误语义锁死了。
修复 feature model 后应改为:第二次删除失败后 recentlyDeletedBranch?.name == "feature/a" 仍成立,并建议给 deleteTag 加对等回归测试。
测试名也可改为 gitBranchDeletionFailureKeepsThePreviousRecoveryRecord。
Closes #342
实现内容
共享命令(rust/lithe-core)
git.write新增createTag/deleteTag:createTag:name+revision+ 可选message;非空 message 创建附注标签(git tag -a),否则轻量标签。创建前探测重名(A tag named '<name>' already exists)与目标可解析性(Could not resolve tag target '<rev>'),返回稳定invalid_request错误而非解析本地化 stderr。deleteTag:删除前用git cat-file采集标签类型与原始 annotation(换行保真,剔除签名块),rev-parse <ref>{}取剥离后的目标提交;成功响应携带结构化tagDeletion(name/deletedTarget/kind/message)。deleteBranch删除前解析分支指向的提交,成功后返回结构化branchDeletion(name/deletedTarget),供宿主提供"还原"入口;分支不存在时返回稳定错误The branch '<name>' does not exist。rust-core-api.md与shared/fixtures/git/write.json已同步更新,供第二个平台后续消费。macOS
git branch -d(安全删除),不会出现未合并提交被舍弃的场景。验证