| 1456 | } |
| 1457 | |
| 1458 | fn put_change_deps(&mut self, change_id: NodeId, deps: &[Hash]) -> PristineResult<()> { |
| 1459 | let existing: Vec<[u8; 32]> = { |
| 1460 | let table = self.txn.open_multimap_table(CHANGE_DEPS)?; |
| 1461 | let iter = table.get(change_id.get())?; |
| 1462 | let mut hashes = Vec::new(); |
| 1463 | for item in iter { |
| 1464 | hashes.push(*item?.value()); |
| 1465 | } |
| 1466 | hashes |
| 1467 | }; |
| 1468 | |
| 1469 | if !existing.is_empty() { |
| 1470 | { |
| 1471 | let mut table = self.txn.open_multimap_table(CHANGE_DEPS)?; |
| 1472 | for dep in &existing { |
| 1473 | table.remove(change_id.get(), dep)?; |
| 1474 | } |
| 1475 | } |
| 1476 | { |
| 1477 | let mut table = self.txn.open_multimap_table(REV_CHANGE_DEPS)?; |
| 1478 | for dep in &existing { |
| 1479 | table.remove(dep, change_id.get())?; |
| 1480 | } |
| 1481 | } |
| 1482 | } |
| 1483 | |
| 1484 | { |
| 1485 | let mut table = self.txn.open_multimap_table(CHANGE_DEPS)?; |
| 1486 | for dep in deps { |
| 1487 | table.insert(change_id.get(), dep.as_bytes())?; |
| 1488 | } |
| 1489 | } |
| 1490 | { |
| 1491 | let mut table = self.txn.open_multimap_table(REV_CHANGE_DEPS)?; |
| 1492 | for dep in deps { |
| 1493 | table.insert(dep.as_bytes(), change_id.get())?; |
| 1494 | } |
| 1495 | } |
| 1496 | { |
| 1497 | let mut table = self.txn.open_table(CHANGE_DEPS_INDEXED)?; |
| 1498 | table.insert(change_id.get(), deps.len() as u64)?; |
| 1499 | } |
| 1500 | |
| 1501 | Ok(()) |
| 1502 | } |
| 1503 | |
| 1504 | fn alloc_inode(&mut self) -> PristineResult<Inode> { |
| 1505 | let id = self.next_inode.fetch_add(1, Ordering::SeqCst); |