Repository navigation
Conversation
五个叠加的根因: 1. 无反馈:resolve_personal_conflict(s) 成败只写全局 status,无窗口 通知;对话框点击后立即关闭,用户以为按钮坏了。 2. 一坏全断:多条冲突循环第一条 .await? 失败即中断,其余冲突原样 挂起。 3. 快照版本过期:resolver 用检测时刻的 remote.version 做乐观锁, 对端再推新版本后 upsert 必报 "stale version",冲突永远解不开。 4. rebase 冲突卡死:git pull --rebase 冲突后无 abort,仓库永久停在 unmerged 态,之后所有 git 命令报错。 5. 脏工作区瘫痪(最常见):冲突挂起时 worker 提前 Err 跳过 flush, .onetcli-sync 未提交改动残留;下轮 pull --rebase 被 git 拒绝 ("cannot pull with rebase: uncommitted changes"),classify 不匹配 关键词落 Io,同步彻底瘫痪。 修复: - F1 反馈:解决完成后在当前窗口推通知(成功/失败/部分成功三态文案, 三语 i18n)。 - F2 健壮:逐条解决,单条失败不中断,失败数与原因进通知。 - F3 版本:resolver 按 record_id 现场重读远端当前版本做乐观锁,找不到 才回退快照版本。 - F4 git 自愈:GitRunner 新增 stash/stash_pop/rebase_abort/reset 四个 自愈原语;pull 遇 rebase 冲突先 abort 再重试一次,遇脏工作区拒绝先 stash/恢复(stash 失败则 reset .onetcli-sync,本地库是源头会重传); push 被拒时先拉取自愈再重推一次;仍失败则如实报 GitMergeConflict。 测试:git_store 7(含 4 个新自愈用例)、conflict_resolver 8(新增 实时版本回归用例)、main personal_sync 27 全过;-D warnings 编译干净。
连接载荷导出时 enrich_credential_references 只插入 credential_cloud_id,源设备的本地整数 credential_id 仍留在载荷里。 每台设备的凭据行号各不相同,同一条逻辑连接跨设备的明文 checksum 因此永不相等,planner 判定「双方都改过」,引用了 钥匙串凭据的连接在多设备间反复假冲突、来回覆盖。 现在有 cloud_id 的分支同样把整数 ID 置零,载荷跨设备完全 归一;下载侧 resolve_object_credential_reference 原本就按 cloud_id 反查本机行号,行为不变。 新增回归测试:同一凭据 cloud_id 绑定不同本地行号的两台设备 导出的 checksum 与解密明文必须一致。
连接快速打开对话框的列表行自己挂了 on_click 打开连接,而 List 内建的 行点击处理也会走 set_selected_index → confirm,confirm 里同样打开一次。 一次鼠标点击先后触发这两条路径,于是同一台服务器被连开两个 SSH 会话 (已有 2 个标签时点「+」新建,直接变成 4 个)。 现在删掉行内的打开回调(以及只被它使用的绑定),点击和键盘回车统一只走 confirm;同时补一条源码级回归测试,锁住「行渲染不得直接打开连接」。
…ession fix(home): 连接快速打开点一次不再新建两个会话(#461)
双语各补一条:#461 修复后点击与回车只走 confirm 单一路径,一次点击不再建两个 SSH 会话。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
内容
dev当前领先main4 个提交 + 1 条 changelog 记录,均为修复:1. 连接快速打开点一次不再新建两个会话(58bfe0b04,closes #461)
ListItem自己挂了on_click,而 gpui-component 的List在render_list_item里给外层行容器注册了内建点击处理(set_selected_index→on_action_confirm→delegate.confirm),confirm里又打开一次。gpui 的鼠标事件在 bubble 阶段按注册逆序逐个触发命中的 listener,只有stop_propagation()才中断,window.close_dialog又只改 Root 状态、不重建当次 dispatch 的 listener 表,于是两条路径都会跑到。confirm;补源码级回归测试锁住「行渲染不得直接打开连接」。行内「保存为连接」按钮原有的stop_propagation()不变。2. 个人 git 同步冲突点「应用」无反应且永远解不开(14afa9ee4,closes #457)
stale version;git pull --rebase冲突后不 abort,仓库永久停在 unmerged;冲突挂起时 worker 跳过 flush,.onetcli-sync残留脏改动让后续 pull 直接被 git 拒绝。record_id现场重读远端版本做乐观锁;GitRunner增加 stash / stash_pop / rebase_abort / reset 自愈原语并在 pull / push 前后自愈。personal_sync27 全过。3. 个人同步导出归一化凭据引用,消除跨设备假冲突(6d114bec2)
credential_cloud_id,源设备本地整数credential_id仍留在载荷里;各设备行号不同,导致同一条逻辑连接跨设备的明文 checksum 永不相等,planner 判定「双方都改过」,引用钥匙串凭据的连接反复假冲突。cloud_id的分支同样把整数 ID 置零,载荷跨设备完全归一;下载侧resolve_object_credential_reference本来就按cloud_id反查本机行号,行为不变。新增回归测试:同一cloud_id绑定不同本地行号的两台设备导出的 checksum 与解密明文必须一致。4. CHANGELOG 补
[Unreleased]双语条目(15e41c0f7)## [Unreleased]段;未新增任何已发布版本号。验证
cargo test -p main quick_open5 passed;个人同步相关用例全绿)。cargo test --all+ Windows 脚本)。说明
dev→main合并,不含版本号 bump;发版时按.github/RELEASE.md另开 release PR。CHANGELOG.md的改动仅限## [Unreleased]段落,不触碰已发布版本条目,script/changelog.py的按 tag 抽取不受影响。