MSBALN24MX5WWMAZ2YJEXL4UNPDI2AR2WCUZQUOXSMDIDLRSLOZQC SXEYMYF7P4RZMZ46WPL4IZUTSQ2ATBWYZX7QNVMS3SGOYXYOHAGQC I52XSRUH5RVHQBFWVMAQPTUSPAJ4KNVID2RMI3UGCVKFLYUO6WZAC VO5OQW4W2656DIYYRNZ3PO7TQ4JOKQ3GVWE5ALUTYVMX3WMXJOYQC MU5GSJAW65PEG3BRYUKZ7O37BPHW3MOX3S5E2RFOXKGUOJEEDQ5AC CCLLB7OIFNFYJZTG3UCI7536TOCWSCSXR67VELSB466R24WLJSDAC GHO6DWPILBBTL6CVZKERJBTFL3EY6ZT4YM4E5R4S6YPGVFKFHCVAC CCFJ7VO3I73FE3MZRS5RSDRYNZVW7AXC345P4BXS7JIL2TU3LQJQC QMTANHVNRPQ5IX66FYQBFRBDCTN6YKMNCO6OHTQ6QCUASPWWXJKAC YN63NUZO4LVJ7XPMURDULTXBVJKW5MVCTZ24R7Z52QMHO3HPDUVQC IIV3EL2XYI2X7HZWKXEXQFAE3R3KC2Q7SGOT3Q332HSENMYVF32QC I24UEJQLCH2SOXA4UHIYWTRDCHSOPU7AFTRUOTX7HZIAV4AZKYEQC V3HHWF4Q5GNB3EAIVEBF274OZ4VNC2MFP25CLLRRCQUA2PGDJMQQC IACED7RWM2ZQIPN3YZATA6SXTRO2C6OUGT3HSOU3LIDZ7YRMLRXAC 3S6LU2U5TIU43WRE5RQS3IOLVJLVNCDL4W44FVK2HR3NAXZ7IDUAC RRCSHAYZ6RLWVPNYHF2F5FSRL2KKJNPQUQRIJYLJGB23BZQQ7JLQC SMMBFECLGSUKRZW5YPOQPOQCOY2CH2OTZXBSZ3KG2N3J3HQZ5PSAC TGA6QXGIZBDTXMOCHH23HJUGWYOCJQ32M3CQ3U7HUF3TDJO6QNIQC 4DNDMC7IUZNYLDEQQYYF5K3G2QWWXGQENTEWPNTM6XKQEFPW7L3QC FXEDPLRI7PXLDXV634ZA6D5Q3ZWG3ESTKJTMRPJ4MAHI7PKU3M6AC V4T4SC7OL6WEZNV4XSFBSXY5HPB7VXPSXWSK4Z63QXKQD4JSFNCQC UEWNF7X3S5V6N2LEJCFMZKFZZHQUCAF6FZF5DYO5XATNDEQ4G35QC 7KNPYIDUXCBZ65NA74NL2DIFS6STJWN4XXHXLTIV5QXZSVLARJMAC NUAOEIXMKZO5KQWQ3TLQWO3RIXBPJU4QOPW7MGCV3ITDAUHFEK5QC 3I4PAA2AW3VUTA3HLS2G4TQMWB7BO25DMCC7VWJHG6WMHCBHR6JAC 2VXTRPO4OML5A2RPI7SAEV5SJNOFIVS4TMYYG6TUUS5EXFMAPRJAC RMDMAYRXYBU5OQXV5HSF6LFD4NBMKRNH5EPIVW3K5HAV6D56IG6QC 5FI6SBEZ6RERERUAIWQJVAY66BEZ7YQOYOUNK2DPOLRGS2X326RAC HBUMCAFVS4W5FHWNZR7ITJFEEUCVZ4Q2U4KGWYN7XZGDZ75JMFTQC OY3CGEHQCHMCPWQAXCW2SZCDIDTE2OB6CRFIDT7E2TCFFKXQ43XAC LODKR74E5PIJLS5FRZ6GZLG222JSTNC7BSSWERLTAIF3QHNDDXYQC Q6MRVSJXQXHRKY5TWJL742RUQNJPRT32QSPJJORZ2IA6KJ4O2UBAC ZDK3GNDBWXJ2OXFDYB72ZCEBGLBF4MKE5K3PVHDZATHJ7HJIDPRQC DO2Y5TY5JQISUHCVNPI2FXO7WWZVJQ3LGPWF4DNADMGZRIO6PT2QC PXR7LQ26P3UJ3XHGJDCFJMXVAXQS3OGE4AESRVMEI74AWYKAHSAQC YXAVFTPP2PQAYMKGQH7QNKFVGKDI2UHVWB7SIDA4QEYSBP75ZGUQC QADQISWQ3SOXP3H64JR5342IZXK6K5P7AB36AUNYXTATCLISHAGQC 3QXUJMZDPH2EDJY6UXIRA5ZQK3GRS2R422S7CKN56I36O4POAQXQC WBTE6H6V4MUWBSHDQ7ZMDBLT64FHS63T2SUSL446E3HSXBXMME6QC 4RQHY7LHPHKUWAUQEXFRHKK37RAEFR3RC2QOSUTFTGZRFVWJIVXQC PEUUYRZ5MHYM2IQTN3ASXPIFZSK5KI32LIHWM6RIWVRRXIQ5GTNQC RVAH6PXA7H7NUDTF7Q52I7EXGXVJVMGI2LTNN6L3MVEDEMAXVH4AC C5MZXLVCVS6JVFYUASM4YH7KCC75D2BH3ARTJ5WCRAVEDQIQSSEQC MQ6ERQ43MWASF2OSG65FHKWHCWT35BJVFJWKHAFPVCTLICCTJWUAC 7UGR3U3WAJNRYL6VHZSZBCOPNLP4TJ522TIKJ7KY66KMVY3FOSVAC SR3VSEJXN5ZVPMXOP3SAKZVW7JM5ZJ5OASR66WW5VBXDQDJJBHWQC 7FP2DFNXGKH2GQIH35BAIHMRORXERI6ARZGVVN7LZKMUYIADIULAC FSJBK6CUVMSKZVLD7SWC4L53GMPUKIQESWDBFMV5GLX43WBUZDPQC 66KOHBXH6YINBEZWCE2YO6G3P6BDYAORE2FMWCE25H5DH4GTYAOQC 4USQK3IWRHVI67CTRX2WDEDEYDBB3BADVECKNAX3XNCEPTQS5MDQC OMGL7JBCLSHWTIYP7LSQXSUGBTIQFBD7VVCZCD27AORPOKOBTVMAC 4NEVLBWGDGBPVQZ33IIFBAZO7HWK54AD23LL5AZMDXI4MHKP546QC U7JXPYVLQ5XZPVURC3XBYVUXO7TD3QBKHWIY7QXIPDV3XRRMIGEQC unsafe fn smallstr_from_raw_ptr<'a>(p: *const u8) -> &'a SmallStr { unsafe {let len = *p as usize;std::mem::transmute(std::slice::from_raw_parts(p, 1 + len as usize))}}
unsafe fn smallstr_from_raw_ptr<'a>(p: *const u8) -> &'a SmallStr {unsafe {let len = *p as usize;std::mem::transmute(std::slice::from_raw_parts(p, 1 + len as usize))}}
match working_copy.file_metadata(&full_path) { Ok(meta) => {debug!("full_path = {:?}, meta = {:?}", full_path, meta);stack.push((RecordItem {papa: item.inode,inode: *child_inode,v_papa: vertex,basename,full_path,metadata: meta,},components.clone(),));} _ => if let Some(vertex) = get_inodes::<_, C, W>(txn, &channel, child_inode)? {let rec = self.recorded();let mut rec = rec.lock();rec.record_deleted_file(txn,txn.graph(channel),working_copy,&full_path,*vertex,changes,)?}}
match working_copy.file_metadata(&full_path) {Ok(meta) => {debug!("full_path = {:?}, meta = {:?}", full_path, meta);stack.push((RecordItem {papa: item.inode,inode: *child_inode,v_papa: vertex,basename,full_path,metadata: meta,},components.clone(),));}_ => {if let Some(vertex) = get_inodes::<_, C, W>(txn, &channel, child_inode)? {let rec = self.recorded();let mut rec = rec.lock();rec.record_deleted_file(txn,txn.graph(channel),working_copy,&full_path,*vertex,changes,)?}}}
match working_copy.modified_time(prefix) { Ok(last_modified) => {debug!("last_modified = {:?}, channel.last = {:?}",last_modified
match working_copy.modified_time(prefix) {Ok(last_modified) => {debug!("last_modified = {:?}, channel.last = {:?}",last_modified.duration_since(std::time::UNIX_EPOCH)?.as_millis(),txn.last_modified(channel),);// Account for low-resolution filesystems, by truncating the// channel modification time if the file modification time is// a multiple of 1000.let last_mod = last_modified
.as_millis(),txn.last_modified(channel),);// Account for low-resolution filesystems, by truncating the// channel modification time if the file modification time is// a multiple of 1000.let last_mod = last_modified.duration_since(std::time::UNIX_EPOCH)?.as_millis() as u64;let channel_mod = (txn.last_modified(channel) / 1000) * 1000;
.as_millis() as u64;let channel_mod = (txn.last_modified(channel) / 1000) * 1000;
debug!("recording = {:?}", last_mod >= channel_mod);Ok(last_mod >= channel_mod)} _ => {Ok(true)}}
debug!("recording = {:?}", last_mod >= channel_mod);Ok(last_mod >= channel_mod)}_ => Ok(true),}
)?} _ => {debug!("calling record_deleted_file on {:?}", item.full_path);let txn_ = txn.read();let channel_ = channel.read();self.record_deleted_file(&*txn_,txn_.graph(&*channel_),&working_copy,&item.full_path,vertex,changes,)?}}
)?,_ => {debug!("calling record_deleted_file on {:?}", item.full_path);let txn_ = txn.read();let channel_ = channel.read();self.record_deleted_file(&*txn_,txn_.graph(&*channel_),&working_copy,&item.full_path,vertex,changes,)?}}
if let Some(Hunk::FileDel {contents, ..}) = self.actions.last_mut(){
if let Some(Hunk::FileDel { contents, .. }) = self.actions.last_mut() {
match Arc::try_unwrap(self.0) { Ok(txn) => {txn.into_inner().commit()} _ => {panic!("Tried to commit an ArcTxn without dropping its references")}}
match Arc::try_unwrap(self.0) {Ok(txn) => txn.into_inner().commit(),_ => {panic!("Tried to commit an ArcTxn without dropping its references")}}
{ Some(e) => {Ok((&(e?.1).b).into())} _ => {Ok(Merkle::zero())}}
{Some(e) => Ok((&(e?.1).b).into()),_ => Ok(Merkle::zero()),}
} else { match txn.find_block_end(channel, v.dest()) { Ok(&dest) => {dest} _ => {return Ok(());}}};
} else {match txn.find_block_end(channel, v.dest()) {Ok(&dest) => dest,_ => {return Ok(());}}};
} else { match txn.find_block(&channel, v.dest()) { Ok(dest) => {writeln!(f,"node_{}_{}_{} -> node_{}_{}_{} [label=\"{}{}{}\", color=\"{}\"{}];",k.change.to_base32(),k.start.0,k.end.0,dest.change.to_base32(),dest.start.0,dest.end.0,if v.flag().contains(EdgeFlags::BLOCK) {"["} else {""},v.introduced_by().to_base32(),if v.flag().contains(EdgeFlags::BLOCK) {"]"} else {""},color,style)?;} _ => {writeln!(f,"node_{}_{}_{} -> node_{}_{} [label=\"{}{}{}\", color=\"{}\"{}];",k.change.to_base32(),k.start.0,k.end.0,v.dest().change.to_base32(),v.dest().pos.0,if v.flag().contains(EdgeFlags::BLOCK) {"["} else {""},v.introduced_by().to_base32(),if v.flag().contains(EdgeFlags::BLOCK) {"]"} else {""},color,style)?;}}}
} else {match txn.find_block(&channel, v.dest()) {Ok(dest) => {writeln!(f,"node_{}_{}_{} -> node_{}_{}_{} [label=\"{}{}{}\", color=\"{}\"{}];",k.change.to_base32(),k.start.0,k.end.0,dest.change.to_base32(),dest.start.0,dest.end.0,if v.flag().contains(EdgeFlags::BLOCK) {"["} else {""},v.introduced_by().to_base32(),if v.flag().contains(EdgeFlags::BLOCK) {"]"} else {""},color,style)?;}_ => {writeln!(f,"node_{}_{}_{} -> node_{}_{} [label=\"{}{}{}\", color=\"{}\"{}];",k.change.to_base32(),k.start.0,k.end.0,v.dest().change.to_base32(),v.dest().pos.0,if v.flag().contains(EdgeFlags::BLOCK) {"["} else {""},v.introduced_by().to_base32(),if v.flag().contains(EdgeFlags::BLOCK) {"]"} else {""},color,style)?;}}}
impl<'channel,'txn: 'channel,T: ChannelTxnT + DepsTxnT<DepsError = <T as GraphTxnT>::GraphError>,> Iterator for PathChangeset<'channel, 'txn, T>
impl<'channel, 'txn: 'channel, T: ChannelTxnT + DepsTxnT<DepsError = <T as GraphTxnT>::GraphError>>Iterator for PathChangeset<'channel, 'txn, T>
impl<'channel,'txn: 'channel,T: ChannelTxnT + DepsTxnT<DepsError = <T as GraphTxnT>::GraphError>,> Iterator for RevPathChangeset<'channel, 'txn, T>
impl<'channel, 'txn: 'channel, T: ChannelTxnT + DepsTxnT<DepsError = <T as GraphTxnT>::GraphError>>Iterator for RevPathChangeset<'channel, 'txn, T>
{ Some(e) => {let (&b, state) = e?;let b: u64 = b.into();Ok(Some((b, state.b.clone())))} _ => {Ok(None)}}
{Some(e) => {let (&b, state) = e?;let b: u64 = b.into();Ok(Some((b, state.b.clone())))}_ => Ok(None),}
pub unsafe fn size_from_ptr(b: *const u8) -> usize { unsafe {if *b == HashAlgorithm::Blake3 as u8 {1 + BLAKE3_BYTES} else if *b == HashAlgorithm::None as u8 {1} else {panic!("Unknown hash algorithm {:?}", *b)
pub unsafe fn size_from_ptr(b: *const u8) -> usize {unsafe {if *b == HashAlgorithm::Blake3 as u8 {1 + BLAKE3_BYTES} else if *b == HashAlgorithm::None as u8 {1} else {panic!("Unknown hash algorithm {:?}", *b)}
Conflict::Zombie {inode_vertex, ..} => inode_vertex,Conflict::Cyclic {inode_vertex, ..} => inode_vertex,Conflict::Order {inode_vertex, ..} => inode_vertex,
Conflict::Zombie { inode_vertex, .. } => inode_vertex,Conflict::Cyclic { inode_vertex, .. } => inode_vertex,Conflict::Order { inode_vertex, .. } => inode_vertex,
{ Some(child) => {child?} _ => {return Ok(());// The following was supposed to be a panic, but actually it// doesn't need to be one, there just wasn't any file to// output./*let mut edge = None;for e in iter_adjacent(txn,channel,*name_vertex,EdgeFlags::FOLDER,EdgeFlags::all(),)? {let e = e?;if !e.flag().contains(EdgeFlags::PARENT) {edge = Some(e);break;
{Some(child) => child?,_ => {return Ok(());// The following was supposed to be a panic, but actually it// doesn't need to be one, there just wasn't any file to// output./*let mut edge = None;for e in iter_adjacent(txn,channel,*name_vertex,EdgeFlags::FOLDER,EdgeFlags::all(),)? {let e = e?;if !e.flag().contains(EdgeFlags::PARENT) {edge = Some(e);break;}
let e = edge.unwrap();let mut f = std::fs::File::create("debug_output").unwrap();debug_root(txn, channel, e.dest().inode_vertex(), &mut f, false).unwrap();panic!("no child");*/}};
};
match iter_adjacent(txn, channel, pos.inode_vertex(), f, f | EdgeFlags::BLOCK)?.next(){ Some(n) => {let _n = n?;let mut id = Vec::new();let f = EdgeFlags::FOLDER | EdgeFlags::PARENT;for e in iter_adjacent(txn,channel,pos.inode_vertex(),f,f | EdgeFlags::BLOCK | EdgeFlags::PSEUDO,)? {let e = e?;if e.flag().contains(f) {id.push(txn.get_external(&e.introduced_by())?.unwrap().into())
match iter_adjacent(txn, channel, pos.inode_vertex(), f, f | EdgeFlags::BLOCK)?.next() {Some(n) => {let _n = n?;let mut id = Vec::new();let f = EdgeFlags::FOLDER | EdgeFlags::PARENT;for e in iter_adjacent(txn,channel,pos.inode_vertex(),f,f | EdgeFlags::BLOCK | EdgeFlags::PSEUDO,)? {let e = e?;if e.flag().contains(f) {id.push(txn.get_external(&e.introduced_by())?.unwrap().into())}
P: std::error::Error + 'static,T: GraphTxnT + TreeTxnT,A: std::error::Error + 'static,W: std::error::Error + 'static,> std::fmt::Debug for ArchiveError<P, T, A, W>
P: std::error::Error + 'static,T: GraphTxnT + TreeTxnT,A: std::error::Error + 'static,W: std::error::Error + 'static,> std::fmt::Debug for ArchiveError<P, T, A, W>
let dest_vertex = match txn.find_block_end(&channel, pos) { Ok(&dest_vertex) => {if !dest_vertex.is_empty() {
let dest_vertex = match txn.find_block_end(&channel, pos) {Ok(&dest_vertex) => {if !dest_vertex.is_empty() {continue;}dest_vertex}_ => {
T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>+ ::sanakirja::RootPageMut+ ::sanakirja::Commit+ ::sanakirja::AllocPage<Error = ::sanakirja::Error>,> MutTxnTExt for pristine::sanakirja::GenericTxn<T>
T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>+ ::sanakirja::RootPageMut+ ::sanakirja::Commit+ ::sanakirja::AllocPage<Error = ::sanakirja::Error>,> MutTxnTExt for pristine::sanakirja::GenericTxn<T>
let txn = match std::sync::Arc::try_unwrap(txn) { Ok(txn) => {txn.into_inner().unwrap()} _ => {unreachable!()}};
let txn = match std::sync::Arc::try_unwrap(txn) {Ok(txn) => txn.into_inner().unwrap(),_ => {unreachable!()}};
match fs::find_path(changes, self, &channel.read(), false, position)? { Some((a, b)) => {Ok(Some((a.join("/"), b)))} _ => {Ok(None)}}
match fs::find_path(changes, self, &channel.read(), false, position)? {Some((a, b)) => Ok(Some((a.join("/"), b))),_ => Ok(None),}
match fs::find_path(changes, self, &channel.read(), true, position)? { Some((a, b)) => {Ok(Some((a.join("/"), b)))} _ => {Ok(None)}}
match fs::find_path(changes, self, &channel.read(), true, position)? {Some((a, b)) => Ok(Some((a.join("/"), b))),_ => Ok(None),}
'txn,T: pristine::DepsTxnT + pristine::GraphTxnT<GraphError = <T as pristine::DepsTxnT>::DepsError>,> Iterator for Touched<'txn, T>
'txn,T: pristine::DepsTxnT + pristine::GraphTxnT<GraphError = <T as pristine::DepsTxnT>::DepsError>,> Iterator for Touched<'txn, T>
stack: vec![iter_adjacent(txn,&channel,key.inode_vertex(),EdgeFlags::FOLDER,EdgeFlags::FOLDER | EdgeFlags::PSEUDO | EdgeFlags::BLOCK,).map_err(|e| e.0)?],
stack: vec![iter_adjacent(txn,&channel,key.inode_vertex(),EdgeFlags::FOLDER,EdgeFlags::FOLDER | EdgeFlags::PSEUDO | EdgeFlags::BLOCK,).map_err(|e| e.0)?,],
match crate::change::ChangeFile::open(hash, &path.to_str().unwrap()) { Ok(p) => {p.has_contents()} _ => {false}}
match crate::change::ChangeFile::open(hash, &path.to_str().unwrap()) {Ok(p) => p.has_contents(),_ => false,}