跳到主要内容

find_branch_path_to_root()

function find_branch_path_to_root(branch, branchMap): RxDBBranch[];

Defined in: packages/rxdb-plugin-history/src/find-switch-branch-step.ts:93

Internal

沿 parentId 从一条分支走到它所在树的根,返回途经的全部分支(含自己,根在最后)。

断链(parentId 指不到分支)与成环都是持久化完整性错误:调用方传进来的分支集合 是全量无过滤查询的结果,不存在「父分支被过滤掉了」这种正常情况。 曾经这两种情况都是 break —— 相当于把坏数据当成「已经到根」,继续算出一条通往 并不存在的根的完整 action 序列,调用方照单全收地写库,半条路径被应用而没有任何报错。 切分支失败远好过静默切错,因此这里必须终止且不产生任何 action。

从 find_switch_branch_step 的闭包里提出来成为模块级导出,是因为 「父链自不自洽」这一问的答案必须全局只有一个:enable-migration.ts 的 「分支可否完整物化」判定用的就是它(research.md R11)。留在闭包里够不着, 调用方只能另写一套遍历,于是迁移期与运行期会对同一个库给出两种答案。

它够不到 find_switch_branch_step 的两处提前返回:变更 id 相同(含两边 都没有变更、都落在根上)时那个函数直接返回空步骤,根本走不到这里。所以要检查父链 完整性的调用方必须自己调它一次,不能指望 find_switch_branch_step 顺带检查。

Parameters​

ParameterTypeDescription
branchRxDBBranch起点分支
branchMapReadonlyMap<string, RxDBBranch>分支 id → 分支;必须是全量集合

Returns​

RxDBBranch[]

从 branch 到根的路径,branch 在第 0 位

Throws​

RxDBError 父链成环或指向不存在的分支时