When a patch A introduces a vertex in a deleted context, the edges deleting the context may be introduced by a patch B that knows about A, in which case this is not a conflict. Also, this makes this case symmetric with the other (more common) case where a context deletion is applied after the vertex is introduced.
ZJWCPRMHAYZYGCPYBTBIPBBFVCVDSFNGUL36HMC2DHCWZZKNA7PAC
ZDK3GNDBWXJ2OXFDYB72ZCEBGLBF4MKE5K3PVHDZATHJ7HJIDPRQC
422NG2MT6M7YQDX2LFZSSHGP73BX76AXUWK64VID7TO5Y4JBWJCQC
CCLLB7OIFNFYJZTG3UCI7536TOCWSCSXR67VELSB466R24WLJSDAC
I24UEJQLCH2SOXA4UHIYWTRDCHSOPU7AFTRUOTX7HZIAV4AZKYEQC
SXEYMYF7P4RZMZ46WPL4IZUTSQ2ATBWYZX7QNVMS3SGOYXYOHAGQC
IXC43DSHDSXCE2X6H6N47GGVKTYM2D2BUUWF34CFWMFT6Z45NOOAC
GHO6DWPILBBTL6CVZKERJBTFL3EY6ZT4YM4E5R4S6YPGVFKFHCVAC
VO5OQW4W2656DIYYRNZ3PO7TQ4JOKQ3GVWE5ALUTYVMX3WMXJOYQC
43AJ37IXON6PMMYRZM6OB2MJXPYCNIWW2XBDVNBXIRH5DD7JDTVQC
YN63NUZO4LVJ7XPMURDULTXBVJKW5MVCTZ24R7Z52QMHO3HPDUVQC
I52XSRUH5RVHQBFWVMAQPTUSPAJ4KNVID2RMI3UGCVKFLYUO6WZAC
|h| change.knows(h),
|h| {
if edge.previous.contains(EdgeFlags::DELETED) {
// When reintroducing a deleted flag, check whether
// the re-introduction patch knows about the alive
// edges around the target.
changes
.knows(edge.introduced_by.as_ref().unwrap_or(&hash), h)
.unwrap()
} else {
// When the edge we are re-introducing is not a
// deletion edge, this check isn't actually used: the
// only zombies in that case are from a deleted
// context, and these aren't detected with known
// patches.
true
}
},
apply_change_to_channel(txn, channel, internal, &hash, &change, workspace)
.map_err(ApplyError::LocalChange)?;
apply_change_to_channel(
txn,
channel,
&mut |h| changes.knows(h, &hash).unwrap(),
internal,
&hash,
&change,
workspace,
)
.map_err(ApplyError::LocalChange)?;
Atom::NewVertex(ref n) => {
put_newvertex(txn, T::graph_mut(channel), change, ws, change_id, n)?
}
Atom::NewVertex(ref n) => put_newvertex(
txn,
T::graph_mut(channel),
changes,
change,
ws,
change_id,
n,
)?,
let n = apply_change_to_channel(txn, &mut channel, internal, &hash, &change, workspace)?;
let n = apply_change_to_channel(
txn,
&mut channel,
&mut |_| true,
internal,
&hash,
&change,
workspace,
)?;