| 1504 | } |
| 1505 | |
| 1506 | fn put_change_deps(&mut self, change_id: NodeId, deps: &[Hash]) -> PristineResult<()> { |
| 1507 | let existing: Vec<[u8; 32]> = { |
| 1508 | let table = self.txn.open_multimap_table(CHANGE_DEPS)?; |
| 1509 | let iter = table.get(change_id.get())?; |
| 1510 | let mut hashes = Vec::new(); |
| 1511 | for item in iter { |
| 1512 | hashes.push(*item?.value()); |
| 1513 | } |
| 1514 | hashes |
| 1515 | }; |
| 1516 | |
| 1517 | if !existing.is_empty() { |
| 1518 | { |
| 1519 | let mut table = self.txn.open_multimap_table(CHANGE_DEPS)?; |
| 1520 | for dep in &existing { |
| 1521 | table.remove(change_id.get(), dep)?; |
| 1522 | } |
| 1523 | } |
| 1524 | { |
| 1525 | let mut table = self.txn.open_multimap_table(REV_CHANGE_DEPS)?; |
| 1526 | for dep in &existing { |
| 1527 | table.remove(dep, change_id.get())?; |
| 1528 | } |
| 1529 | } |
| 1530 | } |
| 1531 | |
| 1532 | { |
| 1533 | let mut table = self.txn.open_multimap_table(CHANGE_DEPS)?; |
| 1534 | for dep in deps { |
| 1535 | table.insert(change_id.get(), dep.as_bytes())?; |
| 1536 | } |
| 1537 | } |
| 1538 | { |
| 1539 | let mut table = self.txn.open_multimap_table(REV_CHANGE_DEPS)?; |
| 1540 | for dep in deps { |
| 1541 | table.insert(dep.as_bytes(), change_id.get())?; |
| 1542 | } |
| 1543 | } |
| 1544 | { |
| 1545 | let mut table = self.txn.open_table(CHANGE_DEPS_INDEXED)?; |
| 1546 | table.insert(change_id.get(), deps.len() as u64)?; |
| 1547 | } |
| 1548 | |
| 1549 | Ok(()) |
| 1550 | } |
| 1551 | |
| 1552 | fn alloc_inode(&mut self) -> PristineResult<Inode> { |
| 1553 | let id = self.next_inode.fetch_add(1, Ordering::SeqCst); |