Custom diff separators

pmeunier
Oct 19, 2021, 3:37 PM
2VXTRPO4OML5A2RPI7SAEV5SJNOFIVS4TMYYG6TUUS5EXFMAPRJAC

Dependencies

  • [2] 3I4PAA2A Making a few types and methods public
  • [3] TGA6QXGI Initial support for binary diffs (conflicts are not yet supported in the output)
  • [4] V4T4SC7O Testing binary diff
  • [5] XFOBWI4O Fixing a compilation error
  • [6] WZVCLZKY address clippy lints
  • [7] VO5OQW4W Removing anyhow in libpijul
  • [8] 4DNDMC7I Fixing a number of bugs related to encodings (extra newlines + misdetection in linux2x)
  • [9] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [10] CCLLB7OI Upgrading to Sanakirja 0.15 + version bump
  • [11] Z6FWHKCA Improving the UI around zombie conflicts
  • [12] EEFI7RAX Alternative Inode serializer (as a Base32 str)
  • [13] YN63NUZO Sanakirja 1.0
  • [14] I24UEJQL Various post-fire fixes
  • [*] G7VOM2IM Returning an error when recording non-existent paths
  • [*] AJEH3FSP Properly propagate errors in `libpijul::record::record` instead of unwrap()ing
  • [*] 3EMLWXLH Formatting
  • [*] FXEDPLRI Resurrecting tests, and type cleanup (no need for Arc<RwLock<…>> anymore)
  • [*] XR7MNOMU file encoding in updates

Change contents

  • edit in "libpijul/src/working_copy/filesystem.rs" at line 297
    [16.601]
    [16.601]
    &crate::diff::DEFAULT_SEPARATOR,
  • edit in "libpijul/src/record.rs" at line 282
    [3.492781]
    [3.44693]
    diff_separator: &regex::bytes::Regex,
  • edit in "libpijul/src/record.rs" at line 310
    [3.45425]
    [17.72]
    let sep: regex::bytes::Regex = diff_separator.clone();
  • edit in "libpijul/src/record.rs" at line 323
    [18.151]
    [19.96746]
    &sep,
  • edit in "libpijul/src/record.rs" at line 448
    [18.549]
    [19.97839]
    diff_separator,
  • edit in "libpijul/src/record.rs" at line 753
    [3.499537]
    [19.98069]
    diff_sep: &regex::bytes::Regex,
  • edit in "libpijul/src/record.rs" at line 877
    [20.149]
    [3.503008]
    diff_sep,
  • replacement in "libpijul/src/pristine/inode.rs" at line 57
    [2.2085][2.2085:2190]()
    if data_encoding::BASE32_NOPAD
    .decode_mut(s, &mut b)
    .is_ok()
    {
    [2.2085]
    [2.2190]
    if data_encoding::BASE32_NOPAD.decode_mut(s, &mut b).is_ok() {
  • edit in "libpijul/src/lib.rs" at line 65
    [19.103585]
    [3.27689]
    pub use crate::diff::DEFAULT_SEPARATOR;
  • replacement in "libpijul/src/lib.rs" at line 348
    [2.4579][2.4579:4615]()
    P: changestore::ChangeStore
    [2.4579]
    [2.4615]
    P: changestore::ChangeStore,
  • edit in "libpijul/src/diff/split.rs" at line 7
    [3.778791]
    [3.778791]
    m: regex::bytes::Matches<'a, 'a>,
  • replacement in "libpijul/src/diff/split.rs" at line 11
    [3.778828][3.778828:778867]()
    pub fn lines(&self) -> LineSplit {
    [3.778828]
    [3.778867]
    pub fn lines<'a>(&'a self, r: &'a regex::bytes::Regex) -> LineSplit<'a> {
  • edit in "libpijul/src/diff/split.rs" at line 16
    [3.778996]
    [3.778996]
    m: r.find_iter(&self.contents_a),
  • edit in "libpijul/src/diff/split.rs" at line 23
    [3.779119]
    [3.779119]
    LineSplit {
    buf,
    missing_eol: None,
    current: 0,
    m: super::DEFAULT_SEPARATOR.find_iter(buf),
    }
    }
    }
    impl<'a> LineSplit<'a> {
    pub fn from_bytes_with_sep(buf: &'a [u8], sep: &'a regex::bytes::Regex) -> LineSplit<'a> {
  • edit in "libpijul/src/diff/split.rs" at line 38
    [3.779211]
    [3.779211]
    m: sep.find_iter(buf),
  • replacement in "libpijul/src/diff/split.rs" at line 46
    [3.779341][3.779341:779822]()
    if self.current >= self.buf.len() {
    return None;
    }
    let current = self.current;
    while self.current < self.buf.len() && self.buf[self.current] != b'\n' {
    self.current += 1
    }
    if self.current < self.buf.len() {
    self.current += 1
    }
    let mut last = self.current;
    if let Some(miss) = self.missing_eol {
    if miss.contains(&(self.current - 1)) {
    last -= 1
    [3.779341]
    [3.779822]
    if let Some(m) = self.m.next() {
    let start = self.current;
    let next = m.end();
    self.current = next;
    let mut last = next;
    if let Some(miss) = self.missing_eol {
    if miss.contains(&(self.current - 1)) {
    last -= 1
    }
  • edit in "libpijul/src/diff/split.rs" at line 57
    [3.779836]
    [3.779836]
    Some(&self.buf[start..last])
    } else if self.current < self.buf.len() {
    let cur = self.current;
    self.current = self.buf.len();
    Some(&self.buf[cur..])
    } else {
    None
  • edit in "libpijul/src/diff/split.rs" at line 65
    [3.779846][3.779846:779885]()
    Some(&self.buf[current..last])
  • edit in "libpijul/src/diff/mod.rs" at line 15
    [3.793458]
    [3.793458]
    lazy_static! {
    pub static ref DEFAULT_SEPARATOR: regex::bytes::Regex = regex::bytes::Regex::new("\n").unwrap();
    }
  • replacement in "libpijul/src/diff/mod.rs" at line 77
    [3.219][3.219:291]()
    fn make_old_lines(d: &vertex_buffer::Diff) -> Vec<Line> {
    d.lines()
    [3.219]
    [3.291]
    fn make_old_lines<'a>(d: &'a vertex_buffer::Diff, r: &'a regex::bytes::Regex) -> Vec<Line<'a>> {
    d.lines(r)
  • replacement in "libpijul/src/diff/mod.rs" at line 111
    [3.1391][3.1391:1464]()
    fn make_new_lines(b: &[u8]) -> Vec<Line> {
    split::LineSplit::from(b)
    [3.1391]
    [3.1464]
    fn make_new_lines<'a>(b: &'a [u8], sep: &'a regex::bytes::Regex) -> Vec<Line<'a>> {
    split::LineSplit::from_bytes_with_sep(b, sep)
  • edit in "libpijul/src/diff/mod.rs" at line 140
    [20.715]
    [3.115897]
    separator: &regex::bytes::Regex,
  • replacement in "libpijul/src/diff/mod.rs" at line 155
    [3.2253][3.2253:2306]()
    (make_old_lines(&d), make_new_lines(&b))
    [3.2253]
    [3.2306]
    (make_old_lines(&d, separator), make_new_lines(&b, separator))
  • edit in "libpijul/src/alive/mod.rs" at line 50
    [3.996237]
    [3.996237]
    pub fn new(vertex: Vertex<ChangeId>) -> Self {
    AliveVertex {
    vertex,
    flags: Flags::empty(),
    children: 0,
    n_children: 0,
    index: 0,
    lowlink: 0,
    scc: 0,
    extra: Vec::new(),
    }
    }
  • replacement in "libpijul/src/alive/mod.rs" at line 66
    [3.996275][3.996275:996315](),[3.996315][3.149336:149391]()
    pub(crate) lines: Vec<AliveVertex>,
    children: Vec<(Option<SerializedEdge>, VertexId)>,
    [3.996275]
    [3.996360]
    pub lines: Vec<AliveVertex>,
    pub children: Vec<(Option<SerializedEdge>, VertexId)>,
  • replacement in "libpijul/src/alive/mod.rs" at line 93
    [3.996938][3.149392:149482]()
    pub(crate) fn children(&self, i: VertexId) -> &[(Option<SerializedEdge>, VertexId)] {
    [3.996938]
    [3.7904]
    pub fn push_child_to_last(&mut self, e: Option<SerializedEdge>, j: VertexId) {
    let line = self.lines.last_mut().unwrap();
    self.children.push((e, j));
    line.n_children += 1;
    }
    pub fn children<'a>(
    &'a self,
    i: VertexId,
    ) -> impl Iterator<Item = &'a (Option<SerializedEdge>, VertexId)> {
  • replacement in "libpijul/src/alive/mod.rs" at line 104
    [3.7933][3.997050:997121](),[3.997050][3.997050:997121]()
    &self.children[line.children..line.children + line.n_children]
    [3.7933]
    [3.997121]
    (&self.children[line.children..line.children + line.n_children])
    .iter()
    .chain(self[i].extra.iter())
  • replacement in "libpijul/src/alive/mod.rs" at line 110
    [3.149567][3.997202:997247](),[3.997202][3.997202:997247]()
    &self.children[self[i].children + j]
    [3.149567]
    [3.997247]
    let line = &self[i];
    if j < line.n_children {
    &self.children[self[i].children + j]
    } else {
    &line.extra[j - line.n_children]
    }
  • replacement in "libpijul/src/alive/debug.rs" at line 112
    [3.1018658][3.1018658:1018777]()
    for &(edge, VertexId(j)) in
    &self.children[line.children..line.children + line.n_children]
    [3.1018658]
    [3.1018777]
    for &(edge, VertexId(j)) in (self.children
    [line.children..line.children + line.n_children])
    .iter()
    .chain(line.extra.iter())
  • replacement in "libpijul/src/alive/debug.rs" at line 132
    [3.1019363][3.1019363:1019429]()
    writeln!(w, "n_{}->n_0[label=\"none\"];", i)?
    [3.1019363]
    [3.1019429]
    writeln!(w, "n_{}->n_{}[label=\"none\"];", i, j)?
  • replacement in "libpijul/src/alive/debug.rs" at line 156
    [3.1020075][3.1020075:1020194]()
    for &(edge, VertexId(j)) in
    &self.children[line.children..line.children + line.n_children]
    [3.1020075]
    [3.1020194]
    for &(edge, VertexId(j)) in self.children
    [line.children..line.children + line.n_children]
    .iter()
    .chain(line.extra.iter())
  • replacement in "libpijul/src/alive/debug.rs" at line 171
    [3.1020569][3.1020569:1020635]()
    writeln!(w, "n_{}->n_0[label=\"none\"];", i)?
    [3.1020569]
    [3.1020635]
    writeln!(w, "n_{}->n_{}[label=\"none\"];", i, j)?