abstract out FileMetadata (de)serialistion
[?]
Apr 11, 2021, 7:46 AM
3S6LU2U5TIU43WRE5RQS3IOLVJLVNCDL4W44FVK2HR3NAXZ7IDUACDependencies
- [2]
IIV3EL2XCleanup, formatting, and fixing the Git feature - [3]
ADPAFSMYProper old metadata when recording - [4]
X243Z3Y5Recording only the required metadata (can even be changed later!) - [5]
Q3GU26WDmerge with changes from sanakirja v1.1.2 - [6]
EAZ45JTFFixing a bug in change printing - [7]
3AMEP2Y5More convenient interface for channels - [8]
LLT3GY6UWhen recording, do not consider deleted filenames as current - [9]
KDF6FJRVbigger clippy refactors - [10]
YN63NUZOSanakirja 1.0 - [11]
UM5DLRPBstore new non-UTF-8 files raw and decode to deplay the contents - [12]
NF4O25IECleaning up useless operations in InodeMetadata - [13]
NYOF5766track file encoding in the record, including change text for file adds - [14]
VO5OQW4WRemoving anyhow in libpijul - [15]
O4DNWMPDCleaunp and proofreading of libpijul::record - [16]
I52XSRUHMassive cleanup, and simplification - [17]
LGEJSLTYFixing output (including its uses in reset and pull) - [18]
GHO6DWPIRefactoring iterators - [19]
SXEYMYF7Fixing the bad changes in history (unfortunately, by rebooting). - [20]
XL6Y64UPFixing a panic when iterating over the basenames of a file - [21]
CCLLB7OIUpgrading to Sanakirja 0.15 + version bump - [22]
YTQS4ES3Fixing a parsing problem (related to permissions), and the associated permissions - [23]
CCFJ7VO3Renaming "Record" to "Hunk" in the changes - [24]
HDGRZISMVersion updates - [25]
VMOYG7MKtext file decoding for new files - [26]
QQZNSB26Permission update (after #X243)
Change contents
- replacement in libpijul/src/unrecord/working_copy.rs at line 104
let (_, basename) = changes.get_file_name(let FileMetadata { basename, .. } = changes.get_file_meta( - edit in libpijul/src/record.rs at line 3
use crate::change::*; - edit in libpijul/src/record.rs at line 10
use crate::{change::*, changestore::FileMetadata}; - replacement in libpijul/src/record.rs at line 266
meta.write(&mut self.rec.contents).unwrap();self.rec.contents.extend(item.basename.as_bytes());let file_meta = FileMetadata {metadata: meta,basename: item.basename.as_str(),};file_meta.write(&mut self.rec.contents); - replacement in libpijul/src/record.rs at line 392
changes.get_contents(let FileMetadata { basename, metadata } = changes.get_file_meta( - edit in libpijul/src/record.rs at line 399
let (metadata, basename) = name.split_at(2);let metadata = InodeMetadata::from_basename(metadata);let basename = std::str::from_utf8(basename).unwrap().to_string(); - replacement in libpijul/src/record.rs at line 408
basename,basename: basename.to_string(), - replacement in libpijul/src/record.rs at line 680[3.48]→[6.51052:51125](∅→∅),[6.508005]→[6.51052:51125](∅→∅),[6.51125]→[6.12529:12591](∅→∅),[6.508141]→[6.12529:12591](∅→∅),[6.12591]→[6.508195:508255](∅→∅),[6.508195]→[6.508195:508255](∅→∅),[6.508255]→[6.51126:51197](∅→∅)
let name_start = ChangePosition(self.rec.contents.len().into());item.metadata.write(&mut self.rec.contents).unwrap();self.rec.contents.extend(item.basename.as_bytes());let name_end = ChangePosition(self.rec.contents.len().into());let basename = item.basename.as_str();let meta_start = ChangePosition(self.rec.contents.len().into());FileMetadata {metadata: item.metadata,basename,}.write(&mut self.rec.contents);let meta_end = ChangePosition(self.rec.contents.len().into()); - edit in libpijul/src/record.rs at line 689
let name = &self.rec.contents[name_start.0.as_usize()..name_end.0.as_usize()]; - replacement in libpijul/src/record.rs at line 696
name,basename, - replacement in libpijul/src/record.rs at line 724
start: name_start,end: name_end,start: meta_start,end: meta_end, - replacement in libpijul/src/record.rs at line 739
self.rec.contents.truncate(name_start.0.as_usize())self.rec.contents.truncate(meta_start.0.as_usize()) - replacement in libpijul/src/record.rs at line 742
self.rec.contents.truncate(name_start.0.as_usize())self.rec.contents.truncate(meta_start.0.as_usize()) - replacement in libpijul/src/record.rs at line 763
name: &[u8],name: &str, - replacement in libpijul/src/record.rs at line 817
changes.get_contents(let FileMetadata {metadata: parent_meta,basename: parent_name,} = changes.get_file_meta( - replacement in libpijul/src/record.rs at line 829[3.91]→[6.513013:513038](∅→∅),[6.513013]→[6.513013:513038](∅→∅),[6.513038]→[3.92:125](∅→∅),[3.125]→[6.513038:513091](∅→∅),[6.513038]→[6.513038:513091](∅→∅)
parent_dest,&previous_name[..2],std::str::from_utf8(&previous_name[2..])parent_dest, parent_meta, parent_name - edit in libpijul/src/record.rs at line 831
let (parent_meta, parent_name) = previous_name.split_at(2);let parent_meta = InodeMetadata::from_basename(parent_meta); - replacement in libpijul/src/record.rs at line 832
let name_changed =(parent_name != &name[2..]) || (new_meta != parent_meta && cfg!(not(windows)));let name_changed = (parent_name != name) || (new_meta != parent_meta && cfg!(not(windows))); - replacement in libpijul/src/pristine/inode_metadata.rs at line 3
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Ord, PartialOrd)]#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Ord, PartialOrd, Serialize, Deserialize)] - edit in libpijul/src/pristine/inode_metadata.rs at line 8
use byteorder::{BigEndian, ByteOrder, WriteBytesExt}; - edit in libpijul/src/pristine/inode_metadata.rs at line 9
/// Read the file metadata from the file name encoded in the/// repository.pub fn from_basename(p: &[u8]) -> Self {debug_assert!(p.len() == 2);InodeMetadata(BigEndian::read_u16(p))} - edit in libpijul/src/pristine/inode_metadata.rs at line 51
pub fn write<W: std::io::Write>(&self, mut w: W) -> std::io::Result<()> {w.write_u16::<BigEndian>(self.0)} - replacement in libpijul/src/output/mod.rs at line 1
use crate::changestore::ChangeStore;use crate::changestore::{ChangeStore, FileMetadata}; - replacement in libpijul/src/output/mod.rs at line 123
changes.get_contents(let FileMetadata {basename,metadata: perms,} = changes.get_file_meta( - edit in libpijul/src/output/mod.rs at line 133
let (perms, basename) = name_buf.as_slice().split_at(2);let (perms, basename) = (InodeMetadata::from_basename(perms),std::str::from_utf8(basename).unwrap(),); - replacement in libpijul/src/fs.rs at line 568
self.changes.get_contents(let FileMetadata {basename,metadata: perms,} = self.changes.get_file_meta( - edit in libpijul/src/fs.rs at line 580
let (perms, basename) = self.buf.split_at(2);let perms = InodeMetadata::from_basename(perms);let basename = std::str::from_utf8(basename).unwrap(); - replacement in libpijul/src/fs.rs at line 659
self.changes.get_contents(let FileMetadata {basename,metadata: perms,} = self.changes.get_file_meta( - edit in libpijul/src/fs.rs at line 671
let (perms, basename) = self.buf.split_at(2);let perms = InodeMetadata::from_basename(perms);let basename = std::str::from_utf8(basename).unwrap().to_string(); - replacement in libpijul/src/fs.rs at line 680
return Some(Ok((grandparent.dest(), perms, basename)))return Some(Ok((grandparent.dest(), perms, basename.to_owned()))) - replacement in libpijul/src/changestore/mod.rs at line 78
fn get_file_name<'a, F: Fn(ChangeId) -> Option<Hash>>(fn get_file_meta<'a, F: Fn(ChangeId) -> Option<Hash>>( - replacement in libpijul/src/changestore/mod.rs at line 83
) -> Result<(InodeMetadata, &'a str), Self::Error> {) -> Result<FileMetadata<'a>, Self::Error> { - replacement in libpijul/src/changestore/mod.rs at line 86
assert!(buf.len() >= 2);let (a, b) = buf.as_slice().split_at(2);Ok((InodeMetadata::from_basename(a), std::str::from_utf8(b)?))Ok(FileMetadata::read(buf))}}#[derive(Serialize, Deserialize)]pub struct FileMetadata<'a> {pub metadata: InodeMetadata,pub basename: &'a str,// pub encoding: Encoding,}impl<'a> FileMetadata<'a> {pub fn read(buf: &'a [u8]) -> FileMetadata<'a> {// FIXME use ? by adding the From trait somehowbincode::deserialize(buf).unwrap()}pub fn write(&self, w: &mut Vec<u8>) {// FIXME use ? by adding the From trait somehowbincode::serialize_into(w, self).unwrap() - file move: text_changes.rs → text_changes.rs
- replacement in libpijul/src/change/text_changes.rs at line 329[6.48973]→[2.20938:21104](∅→∅),[2.21104]→[6.49166:49245](∅→∅),[6.49166]→[6.49166:49245](∅→∅),[6.49245]→[6.140561:140639](∅→∅),[6.140639]→[6.49335:49359](∅→∅),[6.49335]→[6.49335:49359](∅→∅)
let name =std::str::from_utf8(&change_contents[add.start.us() + 2..add.end.us()]).unwrap();let perms = crate::pristine::InodeMetadata::from_basename(&change_contents[add.start.us()..add.start.us() + 2],);let FileMetadata {basename: name,metadata: perms,} = FileMetadata::read(&change_contents); - replacement in libpijul/src/change/text_changes.rs at line 425[6.51864]→[2.21105:21239](∅→∅),[2.21239]→[6.52053:52132](∅→∅),[6.52053]→[6.52053:52132](∅→∅),[6.52132]→[6.140713:140787](∅→∅),[6.140787]→[6.52218:52241](∅→∅),[6.52218]→[6.52218:52241](∅→∅)
let name = std::str::from_utf8(&change_contents[n.start.us() + 2..n.end.us()]).unwrap();let perms = crate::pristine::InodeMetadata::from_basename(&change_contents[n.start.us()..n.start.us() + 2],);let FileMetadata {basename: name,metadata: perms,} = FileMetadata::read(&change_contents); - replacement in libpijul/src/change/text_changes.rs at line 633
let meta = InodeMetadata(meta);meta.write(&mut contents_).unwrap();contents_.extend(name.as_bytes());let meta = FileMetadata {metadata: InodeMetadata(meta),basename: name,};meta.write(&mut contents_); - replacement in libpijul/src/change/text_changes.rs at line 776
let meta = InodeMetadata(meta);meta.write(&mut contents_).unwrap();contents_.extend(name.as_bytes());let meta = FileMetadata {metadata: InodeMetadata(meta),basename: name,};meta.write(&mut contents_); - replacement in libpijul/src/change/text_changes.rs at line 1377
let name = std::str::from_utf8(buf.split_at(2).1).unwrap();let FileMetadata { basename: name, .. } = FileMetadata::read(&buf);