file encoding in updates

[?]
Mar 6, 2021, 8:52 AM
XR7MNOMU5PMOOEY2EPPUABZ7NOP432RDCWUET23ONPXTT3JQIFIAC

Dependencies

  • [2] PDTUHOMV fix left over conflicts
  • [3] XSEODPNE Fixing conflicts
  • [4] CIEUBH46 Fixing an index-out-of-bounds error when serialising bad changes
  • [5] QNJBR73K don't return Result for infallible functions
  • [6] 246V5TYI decode existing files
  • [7] W4NSLQNG make text_encoding available to all of libpijul
  • [8] 3AMEP2Y5 More convenient interface for channels
  • [9] KVBLRDOU Concatenating edits with order conflict resolutions (if relevant), and parsing the text format of the result
  • [10] VO5OQW4W Removing anyhow in libpijul
  • [11] JRSBH6HT Identification of line numbers in replacements
  • [12] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [13] 6HNRL5RT detect non-utf8 text files
  • [14] UM5DLRPB store new non-UTF-8 files raw and decode to deplay the contents
  • [15] YN63NUZO Sanakirja 1.0
  • [16] GHO6DWPI Refactoring iterators
  • [17] WZVCLZKY address clippy lints
  • [18] ZRUPLBBT Colours in diff and change: separating concerns and dependencies
  • [19] X243Z3Y5 Recording only the required metadata (can even be changed later!)
  • [20] KJDQ2WOM Fixing the parsing of section headers in the text change format
  • [21] BZCGXVS7 Fixing two bugs around conflicts on the last line, where invalid patches were produced (first bug) and applied (second bug)
  • [22] CCFJ7VO3 Renaming "Record" to "Hunk" in the changes
  • [23] YTQS4ES3 Fixing a parsing problem (related to permissions), and the associated permissions
  • [24] EAZ45JTF Fixing a bug in change printing
  • [25] NYOF5766 track file encoding in the record, including change text for file adds
  • [26] Q3GU26WD merge with changes from sanakirja v1.1.2
  • [27] CCLLB7OI Upgrading to Sanakirja 0.15 + version bump

Change contents

  • replacement in libpijul/src/working_copy/mod.rs at line 3
    [4.64][4.0:63]()
    use crate::{pristine::InodeMetadata, text_encoding::Encoding};
    [4.64]
    [4.198264]
    use crate::pristine::InodeMetadata;
    use crate::text_encoding::Encoding;
  • replacement in libpijul/src/record.rs at line 451
    [4.502569][4.12094:12123]()
    working_copy
    [4.502569]
    [4.1102]
    let encoding = working_copy
  • edit in libpijul/src/record.rs at line 465
    [4.503008]
    [4.503008]
    &encoding,
  • edit in libpijul/src/diff/replace.rs at line 7
    [4.780225]
    [4.780225]
    use crate::text_encoding::Encoding;
  • edit in libpijul/src/diff/replace.rs at line 37
    [4.781057]
    [4.251]
    encoding: &Option<Encoding>,
  • replacement in libpijul/src/diff/replace.rs at line 79
    [4.782229][4.2024:2083]()
    Some(Hunk::Edit { change: c, local }) => {
    [4.782229]
    [4.0]
    Some(Hunk::Edit {
    change: c, local, ..
    }) => {
  • edit in libpijul/src/diff/replace.rs at line 87
    [4.112]
    [4.782529]
    encoding: encoding.clone(),
  • replacement in libpijul/src/diff/replace.rs at line 91
    [4.782625][4.2151:2230]()
    self.rec.actions.push(Hunk::Edit { change: c, local })
    [4.782625]
    [4.782706]
    self.rec.actions.push(Hunk::Edit {
    change: c,
    local,
    encoding: encoding.clone(),
    })
  • edit in libpijul/src/diff/replace.rs at line 108
    [4.1209]
    [4.783027]
    encoding: encoding.clone(),
  • edit in libpijul/src/diff/mod.rs at line 5
    [4.793368]
    [4.793368]
    use crate::text_encoding::Encoding;
  • edit in libpijul/src/diff/mod.rs at line 62
    [4.794388]
    [4.115897]
    encoding: &Option<Encoding>,
  • replacement in libpijul/src/diff/mod.rs at line 67
    [4.794648][4.997:1063](),[4.1063][4.4948:5212](),[4.794648][4.4948:5212]()
    // TODO pass through the encodings and use that to decide
    let mime_a = tree_magic_mini::from_u8(&d.contents_a);
    let mime_b = tree_magic_mini::from_u8(&b);
    debug!("mimes = {:?}, {:?}", mime_a, mime_b);
    if (!mime_a.starts_with("text/") || !mime_b.starts_with("text/")) && d.contents_a != b {
    [4.794648]
    [4.1064]
    // TODO pass through both encodings and use that to decide
    if encoding.is_none() {
  • edit in libpijul/src/diff/mod.rs at line 131
    [4.797108]
    [4.116075]
    encoding,
  • replacement in libpijul/src/diff/mod.rs at line 135
    [4.797176][4.313:399]()
    self.replace(&d, &mut conflict_contexts, &lines_a, &lines_b, &dd, r);
    [4.797176]
    [4.797262]
    self.replace(
    &d,
    &mut conflict_contexts,
    &lines_a,
    &lines_b,
    &dd,
    r,
    encoding,
    );
  • edit in libpijul/src/diff/mod.rs at line 218
    [4.800168]
    [4.800168]
    encoding: None,
  • edit in libpijul/src/diff/mod.rs at line 232
    [4.800730]
    [4.116350]
    encoding: None,
  • edit in libpijul/src/diff/delete.rs at line 9
    [4.805702]
    [4.805702]
    use crate::text_encoding::Encoding;
  • edit in libpijul/src/diff/delete.rs at line 22
    [4.805988]
    [4.116448]
    encoding: &Option<Encoding>,
  • replacement in libpijul/src/diff/delete.rs at line 25
    [4.806059][4.116494:116557]()
    self.delete_lines(txn, channel, diff, d, lines_a, r)?;
    [4.806059]
    [4.806121]
    self.delete_lines(txn, channel, diff, d, lines_a, r, encoding)?;
  • edit in libpijul/src/diff/delete.rs at line 57
    [4.806904]
    [4.116639]
    encoding: &Option<Encoding>,
  • edit in libpijul/src/diff/delete.rs at line 70
    [4.807392]
    [4.807392]
    encoding: encoding.clone(),
  • edit in libpijul/src/diff/delete.rs at line 83
    [4.808286]
    [4.808286]
    encoding: encoding.clone(),
  • replacement in libpijul/src/change.rs at line 5
    [4.2977][4.84:135]()
    use crate::{pristine::*, text_encoding::Encoding};
    [4.2977]
    [4.831519]
    use crate::pristine::*;
    use crate::text_encoding::Encoding;
  • replacement in libpijul/src/change.rs at line 613
    [4.849257][4.3344:3401]()
    Hunk::Edit { change, local } => Hunk::Edit {
    [4.849257]
    [4.849318]
    Hunk::Edit {
    change,
    local,
    encoding,
    } => Hunk::Edit {
  • edit in libpijul/src/change.rs at line 620
    [4.849402]
    [4.849402]
    encoding: encoding.clone(),
  • edit in libpijul/src/change.rs at line 626
    [4.849527]
    [4.3435]
    encoding,
  • edit in libpijul/src/change.rs at line 631
    [4.849706]
    [4.849706]
    encoding: encoding.clone(),
  • replacement in libpijul/src/change.rs at line 641
    [4.850101][4.3649:3718]()
    Hunk::ResurrectZombies { change, local } => Hunk::Edit {
    [4.850101]
    [4.850174]
    Hunk::ResurrectZombies {
    change,
    local,
    encoding,
    } => Hunk::Edit {
  • edit in libpijul/src/change.rs at line 648
    [4.850258]
    [4.850258]
    encoding: encoding.clone(),
  • edit in libpijul/src/change.rs at line 716
    [4.851895]
    [4.851895]
    encoding: Option<Encoding>,
  • edit in libpijul/src/change.rs at line 722
    [4.852003]
    [4.852003]
    encoding: Option<Encoding>,
  • edit in libpijul/src/change.rs at line 735
    [4.852249]
    [4.852249]
    encoding: Option<Encoding>,
  • replacement in libpijul/src/change.rs at line 1142
    [4.865627][4.8006:8063]()
    Hunk::Edit { change, local } => Hunk::Edit {
    [4.865627]
    [4.122190]
    Hunk::Edit {
    change,
    local,
    encoding,
    } => Hunk::Edit {
  • edit in libpijul/src/change.rs at line 1149
    [4.865758]
    [4.865758]
    encoding,
  • edit in libpijul/src/change.rs at line 1155
    [4.865883]
    [4.8097]
    encoding,
  • edit in libpijul/src/change.rs at line 1160
    [4.866049]
    [4.866049]
    encoding,
  • replacement in libpijul/src/change.rs at line 1170
    [4.866416][4.8311:8392]()
    Hunk::ResurrectZombies { change, local } => Hunk::ResurrectZombies {
    [4.866416]
    [4.122444]
    Hunk::ResurrectZombies {
    change,
    local,
    encoding,
    } => Hunk::ResurrectZombies {
  • edit in libpijul/src/change.rs at line 1177
    [4.866571]
    [4.866571]
    encoding,
  • edit in libpijul/src/change/text_changes.rs at line 4
    [4.38111]
    [4.38111]
    use regex::Captures;
  • replacement in libpijul/src/change/text_changes.rs at line 386
    [4.50865][4.2714:2797]()
    print_change_contents(w, changes, contents, change_contents)?;
    [4.50865]
    [4.50953]
    print_change_contents(w, changes, contents, change_contents, &None)?;
  • replacement in libpijul/src/change/text_changes.rs at line 403
    [4.51484][4.2798:2881]()
    print_change_contents(w, changes, contents, change_contents)?;
    [4.51484]
    [4.51572]
    print_change_contents(w, changes, contents, change_contents, &None)?;
  • edit in libpijul/src/change/text_changes.rs at line 429
    [4.52540][4.3205:3389]()
    };
    let encoding_label = match encoding {
    Some(encoding) => encoding.label(),
    _ => BINARY_LABEL,
  • replacement in libpijul/src/change/text_changes.rs at line 442
    [3.193][3.193:232]()
    encoding_label
    [3.193]
    [4.52730]
    encoding_label(encoding)
  • replacement in libpijul/src/change/text_changes.rs at line 459
    [4.53410][4.8875:8921]()
    Hunk::Edit { change, local } => {
    [4.53410]
    [4.309]
    Hunk::Edit {
    change,
    local,
    encoding,
    } => {
  • edit in libpijul/src/change/text_changes.rs at line 467
    [4.53596]
    [4.53596]
    write!(w, " {:?}", encoding_label(encoding))?;
  • replacement in libpijul/src/change/text_changes.rs at line 470
    [4.53680][4.2931:3008]()
    print_change_contents(w, changes, change, change_contents)?;
    [4.53680]
    [4.53762]
    print_change_contents(w, changes, change, change_contents, encoding)?;
  • edit in libpijul/src/change/text_changes.rs at line 476
    [4.53886]
    [4.53886]
    encoding,
  • edit in libpijul/src/change/text_changes.rs at line 481
    [4.54050]
    [4.54050]
    write!(w, " {:?}", encoding_label(encoding))?;
  • replacement in libpijul/src/change/text_changes.rs at line 485
    [4.54193][4.3009:3168]()
    print_change_contents(w, changes, change, change_contents)?;
    print_change_contents(w, changes, replacement, change_contents)?;
    [4.54193]
    [4.54362]
    print_change_contents(w, changes, change, change_contents, encoding)?;
    print_change_contents(w, changes, replacement, change_contents, encoding)?;
  • replacement in libpijul/src/change/text_changes.rs at line 514
    [4.55518][4.3169:3246]()
    print_change_contents(w, changes, change, change_contents)?;
    [4.55518]
    [4.55600]
    print_change_contents(w, changes, change, change_contents, &None)?;
  • replacement in libpijul/src/change/text_changes.rs at line 526
    [4.56002][4.3247:3324]()
    print_change_contents(w, changes, change, change_contents)?;
    [4.56002]
    [4.56084]
    print_change_contents(w, changes, change, change_contents, &None)?;
  • replacement in libpijul/src/change/text_changes.rs at line 528
    [4.56098][4.9195:9253]()
    Hunk::ResurrectZombies { change, local } => {
    [4.56098]
    [4.482]
    Hunk::ResurrectZombies {
    change,
    local,
    encoding,
    } => {
  • edit in libpijul/src/change/text_changes.rs at line 540
    [4.56389]
    [4.56389]
    write!(w, " {:?}", encoding_label(encoding))?;
  • replacement in libpijul/src/change/text_changes.rs at line 543
    [4.56473][4.3325:3402]()
    print_change_contents(w, changes, change, change_contents)?;
    [4.56473]
    [4.56555]
    print_change_contents(w, changes, change, change_contents, &None)?;
  • edit in libpijul/src/change/text_changes.rs at line 547
    [4.56594]
    [4.56594]
    }
    }
    fn encoding_label(encoding: &Option<Encoding>) -> &str {
    match encoding {
    Some(encoding) => encoding.label(),
    _ => BINARY_LABEL,
  • replacement in libpijul/src/change/text_changes.rs at line 570
    [4.57069][3.233:384]()
    Regex::new(r#"^(?P<n>\d+)\. File addition: "(?P<name>[^"]*)" in "(?P<parent>[^"]*)"(?P<perm> [^ ]+)? "(?P<encoding>[^"]*)"#).unwrap();
    [4.57069]
    [4.57195]
    Regex::new(r#"^(?P<n>\d+)\. File addition: "(?P<name>[^"]*)" in "(?P<parent>[^"]*)"(?P<perm> [^ ]+)? "(?P<encoding>[^"]*)""#).unwrap();
  • replacement in libpijul/src/change/text_changes.rs at line 572
    [4.57232][4.128:216]()
    Regex::new(r#"^([0-9]+)\. Edit in ([^:]+):(\d+) (\d+\.\d+)"#).unwrap();
    [4.57232]
    [4.57316]
    Regex::new(r#"^([0-9]+)\. Edit in ([^:]+):(\d+) (\d+\.\d+) "(?P<encoding>[^"]*)""#).unwrap();
  • replacement in libpijul/src/change/text_changes.rs at line 574
    [4.57360][4.217:312]()
    Regex::new(r#"^([0-9]+)\. Replacement in ([^:]+):(\d+) (\d+\.\d+)"#).unwrap();
    [4.57360]
    [4.57451]
    Regex::new(r#"^([0-9]+)\. Replacement in ([^:]+):(\d+) (\d+\.\d+) "(?P<encoding>[^"]*)""#).unwrap();
  • replacement in libpijul/src/change/text_changes.rs at line 591
    [4.58396][4.926:1052]()
    Regex::new(r#"^([0-9]+)\. Resurrecting zombie lines in (?P<path>"[^"]+"):(?P<line>\d+) (?P<inode>\d+\.\d+)"#)
    [4.58396]
    [4.58518]
    Regex::new(r#"^([0-9]+)\. Resurrecting zombie lines in (?P<path>"[^"]+"):(?P<line>\d+) (?P<inode>\d+\.\d+) "(?P<encoding>[^"]*)""#)
  • edit in libpijul/src/change/text_changes.rs at line 647
    [4.60586][4.3674:3925]()
    let encoding_label = cap.name("encoding").unwrap().as_str();
    let encoding = if encoding_label != BINARY_LABEL {
    Some(Encoding::for_label(encoding_label))
    } else {
    None
    };
  • replacement in libpijul/src/change/text_changes.rs at line 654
    [4.60862][4.3926:3956]()
    encoding,
    [4.60862]
    [4.60862]
    encoding: encoding_from_label(cap),
  • edit in libpijul/src/change/text_changes.rs at line 673
    [4.61443]
    [4.61443]
    encoding: encoding_from_label(cap),
  • edit in libpijul/src/change/text_changes.rs at line 692
    [4.62098]
    [4.62098]
    encoding: encoding_from_label(cap),
  • edit in libpijul/src/change/text_changes.rs at line 838
    [4.67530]
    [4.67530]
    encoding: encoding_from_label(cap),
  • edit in libpijul/src/change/text_changes.rs at line 1102
    [4.79941]
    [4.79941]
    }
    }
    fn encoding_from_label(cap: Captures) -> Option<Encoding> {
    let encoding_label = cap.name("encoding").unwrap().as_str();
    if encoding_label != BINARY_LABEL {
    Some(Encoding::for_label(encoding_label))
    } else {
    None
  • edit in libpijul/src/change/text_changes.rs at line 1296
    [4.85365]
    [4.85365]
    encoding: &Option<Encoding>,
  • replacement in libpijul/src/change/text_changes.rs at line 1301
    [2.1][4.592:639](),[4.85538][4.592:639]()
    print_contents(w, "+", c, &None)?;
    [4.143228]
    [4.85578]
    print_contents(w, "+", c, encoding)?;
  • replacement in libpijul/src/change/text_changes.rs at line 1319
    [4.86133][3.385:443]()
    print_contents(w, "-", &buf[..], &None)?;
    [4.86133]
    [4.0]
    print_contents(w, "-", &buf[..], &encoding)?;