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
| Parameter | Type | Description |
|---|---|---|
branch | RxDBBranch | 起点分支 |
branchMap | ReadonlyMap<string, RxDBBranch> | 分支 id → 分支;必须是全量集合 |
Returns
从 branch 到根的路径,branch 在第 0 位
Throws
RxDBError 父链成环或指向不存在的分支时