encoded file deletion

[?]
Apr 11, 2021, 8:02 AM
ZSF3YFZTDOXMCOC3HOT5C6MQLYLWOR7QJAOUDS2M2Z4SC2YW3GRAC

Dependencies

  • [2] XR7MNOMU file encoding in updates
  • [3] 3S6LU2U5 abstract out FileMetadata (de)serialistion
  • [4] WZVCLZKY address clippy lints
  • [5] 6HNRL5RT detect non-utf8 text files
  • [6] YN63NUZO Sanakirja 1.0
  • [7] UM5DLRPB store new non-UTF-8 files raw and decode to deplay the contents
  • [8] KJDQ2WOM Fixing the parsing of section headers in the text change format
  • [9] VMOYG7MK text file decoding for new files
  • [10] UNZXTNSJ Change text format: order dependencies in the order they were on the channel at record time
  • [11] CIEUBH46 Fixing an index-out-of-bounds error when serialising bad changes
  • [12] O4DNWMPD Cleaunp and proofreading of libpijul::record
  • [13] LGEJSLTY Fixing output (including its uses in reset and pull)
  • [14] IIV3EL2X Cleanup, formatting, and fixing the Git feature
  • [15] 3AMEP2Y5 More convenient interface for channels
  • [16] ZAEUSICJ File deletions were not shown with their names in the metadata during record
  • [17] GHO6DWPI Refactoring iterators
  • [18] 27PYHR6L Making the get_latest_touch function (useful to make archives) public in libpijul
  • [19] Q3GU26WD merge with changes from sanakirja v1.1.2
  • [20] NYOF5766 track file encoding in the record, including change text for file adds
  • [21] IYJZVLET Cleaning up the literate programming bits
  • [22] I52XSRUH Massive cleanup, and simplification
  • [23] VO5OQW4W Removing anyhow in libpijul
  • [24] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [25] ZRUPLBBT Colours in diff and change: separating concerns and dependencies
  • [26] CCFJ7VO3 Renaming "Record" to "Hunk" in the changes
  • [27] CCLLB7OI Upgrading to Sanakirja 0.15 + version bump
  • [*] LLT3GY6U When recording, do not consider deleted filenames as current
  • [*] X243Z3Y5 Recording only the required metadata (can even be changed later!)
  • [*] BZCGXVS7 Fixing two bugs around conflicts on the last line, where invalid patches were produced (first bug) and applied (second bug)
  • [*] EAZ45JTF Fixing a bug in change printing

Change contents

  • edit in libpijul/src/tests/text.rs at line 47
    [4.1477][4.1477:1511]()
    /// Change a non-utf-8 text file.
  • edit in libpijul/src/tests/text.rs at line 104
    [4.3149]
    #[test]
    fn delete_non_utf8_file_test() -> Result<(), anyhow::Error> {
    env_logger::try_init().unwrap_or(());
    let mut buf = Vec::new();
    use std::io::Read;
    let mut fh = std::fs::File::open("src/tests/data/gb.1")?;
    fh.read_to_end(&mut buf)?;
    let mut repo = working_copy::memory::Memory::new();
    repo.add_file("file", buf);
    let env = pristine::sanakirja::Pristine::new_anon()?;
    let mut txn = env.mut_txn_begin();
    let mut channel = txn.open_or_create_channel("main")?;
    txn.add_file("file")?;
    let store = changestore::memory::Memory::new();
    record_all(&mut repo, &store, &mut txn, &mut channel, "")?;
    let mut buf = Vec::new();
    {
    use std::io::Read;
    let mut fh = std::fs::File::open("src/tests/data/8859-1.2")?;
    fh.read_to_end(&mut buf)?;
    }
    repo.remove_path("file")?;
    let (h1, change1) = record_all_change(&mut repo, &store, &mut txn, &mut channel, "")?;
    let mut v = Vec::new();
    change1
    .write(
    &store,
    Some(h1),
    |l, _p| format!("{}:{}", l.path, l.line),
    true,
    &mut v,
    )
    .unwrap();
    let lines: Vec<&str> = std::str::from_utf8(&v)
    .unwrap()
    .lines()
    .filter(|l| l.starts_with(|c| c == '-'))
    .collect();
    assert_eq!(
    vec![
    " -Chinese / 中文,普通话,汉语 (GB 2312 / GB-encoding)",
    "- 你好"
    ],
    lines
    );
    Ok(())
    }
  • edit in libpijul/src/record.rs at line 2
    [4.678][4.488937:488965](),[4.1573][4.488937:488965](),[4.488937][4.488937:488965]()
    use crate::alive::retrieve;
  • edit in libpijul/src/record.rs at line 9
    [4.489199]
    [3.73]
    use crate::{alive::retrieve, text_encoding::Encoding};
  • edit in libpijul/src/record.rs at line 62
    [4.489739]
    [4.489739]
    encoding: Option<Encoding>,
  • edit in libpijul/src/record.rs at line 253
    [4.495449]
    [4.495449]
    changes,
  • replacement in libpijul/src/record.rs at line 267
    [4.495974][4.49183:49256](),[4.49256][3.125:298](),[3.298][4.49257:49328](),[4.496160][4.49257:49328](),[4.49328][4.496294:496329](),[4.496294][4.496294:496329]()
    let name_start = ChangePosition(self.rec.contents.len().into());
    let file_meta = FileMetadata {
    metadata: meta,
    basename: item.basename.as_str(),
    };
    file_meta.write(&mut self.rec.contents);
    let name_end = ChangePosition(self.rec.contents.len().into());
    self.rec.contents.push(0);
    [4.495974]
    [4.49329]
  • edit in libpijul/src/record.rs at line 302
    [4.497912]
    [4.1663]
    let name_start = ChangePosition(self.rec.contents.len().into());
    let file_meta = FileMetadata {
    metadata: meta,
    basename: item.basename.as_str(),
    encoding: encoding.clone(),
    };
    file_meta.write(&mut self.rec.contents);
    let name_end = ChangePosition(self.rec.contents.len().into());
    self.rec.contents.push(0);
  • replacement in libpijul/src/record.rs at line 397
    [4.1468][4.500531:500570](),[4.6542][4.500531:500570](),[4.28600][4.500531:500570](),[4.33566][4.500531:500570](),[4.34150][4.500531:500570](),[4.50044][4.500531:500570](),[4.500531][4.500531:500570](),[4.500570][3.299:361]()
    let mut name = Vec::new();
    let FileMetadata { basename, metadata } = changes
    [4.6542]
    [3.361]
    let mut meta = Vec::new();
    let FileMetadata {
    basename,
    metadata,
    encoding,
    } = changes
  • replacement in libpijul/src/record.rs at line 406
    [4.6677][4.6677:6708]()
    &mut name,
    [4.6677]
    [4.6708]
    &mut meta,
  • edit in libpijul/src/record.rs at line 420
    [29.272]
    [4.50318]
    encoding,
  • edit in libpijul/src/record.rs at line 449
    [4.502201]
    [4.33880]
    self.former_parents[0].encoding.clone(),
  • edit in libpijul/src/record.rs at line 502
    [4.29100]
    [4.29100]
    changes,
  • replacement in libpijul/src/record.rs at line 548
    [4.504310][4.206:253]()
    let mut name = Vec::new();
    [4.504310]
    [4.253]
    let mut meta = Vec::new();
  • replacement in libpijul/src/record.rs at line 553
    [4.6881][4.6881:6920]()
    &mut name,
    [4.6881]
    [4.6920]
    &mut meta,
  • replacement in libpijul/src/record.rs at line 557
    [4.495][4.495:829]()
    if name.len() > 2 {
    if let Ok(name) = std::str::from_utf8(&name[2..]) {
    if !full_path.is_empty() {
    full_path.push('/');
    }
    full_path.push_str(name);
    }
    [4.495]
    [4.829]
    let FileMetadata { basename: name, .. } = FileMetadata::read(&mut meta);
    if !full_path.is_empty() {
    full_path.push('/');
  • edit in libpijul/src/record.rs at line 561
    [4.851]
    [4.504310]
    full_path.push_str(name);
  • edit in libpijul/src/record.rs at line 569
    [4.50856]
    [4.35074]
    changes,
  • edit in libpijul/src/record.rs at line 591
    [4.504935]
    [4.35281]
    changes: &C,
  • edit in libpijul/src/record.rs at line 642
    [4.7149]
    [4.7149]
    changes,
  • edit in libpijul/src/record.rs at line 687
    [4.507872]
    [4.35880]
    encoding: Option<Encoding>,
  • edit in libpijul/src/record.rs at line 698
    [3.653]
    [3.653]
    encoding: encoding.clone(),
  • edit in libpijul/src/record.rs at line 725
    [4.509220]
    [4.509220]
    encoding,
  • edit in libpijul/src/record.rs at line 834
    [3.1129]
    [3.1129]
    ..
  • edit in libpijul/src/record.rs at line 969
    [4.37282]
    [4.37282]
    C: ChangeStore,
  • replacement in libpijul/src/record.rs at line 977
    [4.518555][4.37319:37364]()
    ) -> Result<(), TxnErr<T::GraphError>> {
    [4.518555]
    [4.518563]
    changes: &C,
    ) -> Result<(), RecordError<C::Error, W::Error, T::GraphError>>
    where
    <W as WorkingCopy>::Error: 'static,
    {
  • edit in libpijul/src/record.rs at line 994
    [4.519117]
    [4.519117]
    let name_dest = txn.find_block_end(channel, current_vertex).unwrap();
    let mut meta = Vec::new();
    let FileMetadata { encoding, .. } = changes
    .get_file_meta(
    |p| txn.get_external(&p).unwrap().map(From::from),
    *name_dest,
    &mut meta,
    )
    .map_err(RecordError::Changestore)?;
  • replacement in libpijul/src/record.rs at line 1025
    [4.520253][4.37590:37685]()
    self.delete_inode_vertex(txn, channel, vertex, vertex.start_pos(), full_path)?
    [4.520253]
    [4.520253]
    self.delete_inode_vertex(
    txn,
    channel,
    vertex,
    vertex.start_pos(),
    full_path,
    encoding,
    )?
  • edit in libpijul/src/record.rs at line 1072
    [4.521458]
    [4.37926]
    encoding: Option<Encoding>,
  • edit in libpijul/src/record.rs at line 1131
    [4.523709]
    [4.523709]
    encoding,
  • replacement in libpijul/src/pristine/sanakirja.rs at line 484
    [4.36000][4.68164:68287]()
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(txn, graph)
    .map_err(|x| BlockError::Txn(x.into()))?;
    [4.36000]
    [4.68287]
    let mut cursor =
    btree::cursor::Cursor::new(txn, graph).map_err(|x| BlockError::Txn(x.into()))?;
  • edit in libpijul/src/pristine/inode_vertex.rs at line 1
    [4.641303][4.641303:641355]()
    use super::vertex::*;
    use super::inode_metadata::*;
  • edit in libpijul/src/pristine/inode_vertex.rs at line 2
    [4.641380]
    [4.641380]
    use super::inode_metadata::*;
    use super::vertex::*;
  • replacement in libpijul/src/pristine/inode_vertex.rs at line 8
    [4.641483][4.641483:641546]()
    pub metadata: InodeMetadata,
    pub position: Position<ChangeId>,
    [4.641483]
    [4.641546]
    pub metadata: InodeMetadata,
    pub position: Position<ChangeId>,
  • edit in libpijul/src/output/mod.rs at line 126
    [3.1556]
    [3.1556]
    ..
  • edit in libpijul/src/fs.rs at line 571
    [3.1683]
    [3.1683]
    ..
  • edit in libpijul/src/fs.rs at line 580
    [4.109883]
    [4.109883]
    let basename = basename.to_string();
  • replacement in libpijul/src/fs.rs at line 601
    [4.581][4.581:615]()
    basename.to_string(),
    [4.581]
    [4.615]
    basename,
  • edit in libpijul/src/fs.rs at line 664
    [3.1840]
    [3.1840]
    ..
  • edit in libpijul/src/fs.rs at line 673
    [4.755431]
    [4.755431]
    let basename = basename.to_owned();
  • replacement in libpijul/src/fs.rs at line 684
    [4.18987][3.1919:2009]()
    return Some(Ok((grandparent.dest(), perms, basename.to_owned())))
    [4.18987]
    [4.19066]
    return Some(Ok((grandparent.dest(), perms, basename)))
  • edit in libpijul/src/changestore/mod.rs at line 5
    [4.817517][4.817517:817560]()
    use crate::change::{Change, ChangeHeader};
  • edit in libpijul/src/changestore/mod.rs at line 6
    [4.817632]
    [4.817664]
    use crate::{
    change::{Change, ChangeHeader},
    text_encoding::Encoding,
    };
  • replacement in libpijul/src/changestore/mod.rs at line 94
    [3.2289][3.2289:2320]()
    // pub encoding: Encoding,
    [3.2289]
    [3.2320]
    pub encoding: Option<Encoding>,
  • edit in libpijul/src/change.rs at line 574
    [4.847807]
    [4.3015]
    encoding,
  • edit in libpijul/src/change.rs at line 579
    [4.847992]
    [4.847992]
    encoding: encoding.clone(),
  • edit in libpijul/src/change.rs at line 585
    [4.848110]
    [4.3082]
    encoding,
  • edit in libpijul/src/change.rs at line 590
    [4.848293]
    [4.848293]
    encoding: encoding.clone(),
  • replacement in libpijul/src/change.rs at line 597
    [4.848439][4.3028:3047]()
    ..
    [4.848439]
    [4.848439]
    encoding,
  • edit in libpijul/src/change.rs at line 607
    [4.848867]
    [4.848867]
    encoding: encoding.clone(),
  • edit in libpijul/src/change.rs at line 697
    [4.851415]
    [4.851415]
    encoding: Option<Encoding>,
  • edit in libpijul/src/change.rs at line 703
    [4.851525]
    [4.851525]
    encoding: Option<Encoding>,
  • edit in libpijul/src/change.rs at line 1114
    [4.864428]
    [4.7676]
    encoding,
  • edit in libpijul/src/change.rs at line 1119
    [4.864601]
    [4.864601]
    encoding,
  • edit in libpijul/src/change.rs at line 1125
    [4.864719]
    [4.7741]
    encoding,
  • edit in libpijul/src/change.rs at line 1130
    [4.864898]
    [4.864898]
    encoding,
  • edit in libpijul/src/change/text_changes.rs at line 332
    [3.2798]
    [3.2798]
    ..
  • edit in libpijul/src/change/text_changes.rs at line 375
    [4.50501]
    [4.50501]
    encoding,
  • replacement in libpijul/src/change/text_changes.rs at line 378
    [4.269][4.50520:50578](),[4.50520][4.50520:50578]()
    write!(w, "File deletion: {:?} ", path)?;
    [4.269]
    [4.50578]
    write!(
    w,
    "File deletion: {:?} {:?}",
    path,
    encoding_label(encoding)
    )?;
  • replacement in libpijul/src/change/text_changes.rs at line 390
    [4.50865][2.2459:2549]()
    print_change_contents(w, changes, contents, change_contents, &None)?;
    [4.50865]
    [4.50953]
    print_change_contents(w, changes, contents, change_contents, encoding)?;
  • edit in libpijul/src/change/text_changes.rs at line 399
    [4.51147]
    [4.51147]
    encoding,
  • replacement in libpijul/src/change/text_changes.rs at line 402
    [4.308][4.51166:51227](),[4.51166][4.51166:51227]()
    write!(w, "File un-deletion: {:?} ", path)?;
    [4.308]
    [4.51227]
    write!(
    w,
    "File un-deletion: {:?} {:?}",
    path,
    encoding_label(encoding)
    )?;
  • replacement in libpijul/src/change/text_changes.rs at line 413
    [4.51484][2.2550:2640]()
    print_change_contents(w, changes, contents, change_contents, &None)?;
    [4.51484]
    [4.51572]
    print_change_contents(w, changes, contents, change_contents, encoding)?;
  • edit in libpijul/src/change/text_changes.rs at line 429
    [3.2981]
    [3.2981]
    ..
  • replacement in libpijul/src/change/text_changes.rs at line 553
    [4.56473][2.3596:3680]()
    print_change_contents(w, changes, change, change_contents, &None)?;
    [4.56473]
    [4.56555]
    print_change_contents(w, changes, change, change_contents, encoding)?;
  • replacement in libpijul/src/change/text_changes.rs at line 586
    [4.57497][4.313:404]()
    Regex::new(r#"^([0-9]+)\. File deletion: "([^"]*)" (\d+\.\d+)"#).unwrap();
    [4.57497]
    [4.57584]
    Regex::new(r#"^([0-9]+)\. File deletion: "([^"]*)" (\d+\.\d+) "(?P<encoding>[^"]*)""#).unwrap();
  • replacement in libpijul/src/change/text_changes.rs at line 588
    [4.57632][4.405:499]()
    Regex::new(r#"^([0-9]+)\. File un-deletion: "([^"]*)" (\d+\.\d+)"#).unwrap();
    [4.57632]
    [4.57722]
    Regex::new(r#"^([0-9]+)\. File un-deletion: "([^"]*)" (\d+\.\d+) "(?P<encoding>[^"]*)""#).unwrap();
  • edit in libpijul/src/change/text_changes.rs at line 635
    [30.2936]
    [3.3044]
    let n = cap.name("n").unwrap().as_str().parse().unwrap();
    let encoding = encoding_from_label(cap);
  • edit in libpijul/src/change/text_changes.rs at line 640
    [3.3161]
    [3.3161]
    encoding: encoding.clone(),
  • edit in libpijul/src/change/text_changes.rs at line 656
    [4.60292][4.60292:60362]()
    let n = cap.name("n").unwrap().as_str().parse().unwrap();
  • replacement in libpijul/src/change/text_changes.rs at line 668
    [4.60862][2.4371:4427]()
    encoding: encoding_from_label(cap),
    [4.60862]
    [4.60862]
    encoding,
  • edit in libpijul/src/change/text_changes.rs at line 721
    [4.62608]
    [4.62608]
    encoding: encoding_from_label(cap),
  • edit in libpijul/src/change/text_changes.rs at line 736
    [4.63130]
    [4.63130]
    encoding: encoding_from_label(cap),
  • edit in libpijul/src/change/text_changes.rs at line 783
    [3.3334]
    [3.3334]
    encoding: None,
  • replacement in libpijul/src/change/text_changes.rs at line 1316
    [4.522][4.522:591]()
    for a in encoding.decode(&contents).split_terminator('\n') {
    [4.522]
    [4.1236]
    for a in encoding.decode(&contents).split('\n') {
  • edit in libpijul/src/change/text_changes.rs at line 1332
    [4.85407]
    [4.85407]
    debug!("print_change_contents {:?}", change);
  • edit in libpijul/src/change/text_changes.rs at line 1338
    [4.85615]
    [31.169]
    debug!("print_change_contents {:?}", c);
  • edit in libpijul/src/change/text_changes.rs at line 1357
    [32.43]
    [32.43]
    debug!("print_change_contents {:?}", buf);