selectRestoreReplayPath()
function selectRestoreReplayPath(
executor,
headCommitId,
targetCommitId
): Promise<readonly string[] | undefined>;
Defined in: packages/rxdb-plugin-working-tree/src/working-tree/restore-precheck.ts:211
选定「恢复到目标节点」要回退的那条确定性路径。
Parameters
| Parameter | Type | Description |
|---|---|---|
executor | TransactionExecutor | 当前事务执行器 |
headCommitId | string | null | 当前分支 HEAD;空分支为 null |
targetCommitId | string | 目标 commit id |
Returns
Promise<readonly string[] | undefined>
要逐个应用 inversePatch 的节点,按重放顺序(HEAD 在前);
目标不在 HEAD 的可达父链上时返回 undefined
Remarks
路径 = HEAD 可达集减去目标可达集,而不是「从 HEAD 往回走到目标为止」。两者在线性历史 上一样,在菱形历史上不一样:目标自己的祖先也在 HEAD 的可达集里,从另一条边绕过去就会把 它们一并算进要回退的节点,于是恢复动作把目标之前的历史也退掉了。
顺序取 HEAD 侧的逐层回溯序,所以它是确定性的:同一张图每次给出同一条路径, 「首个不兼容节点」才可能稳定(FR-050)。
返回 undefined 而不是抛错:「这个 commit 不在当前分支的历史里」是调用方要转成失败出口的
一种判定结果(FR-033 只允许恢复可达节点),不是库坏了。