Fix rewrite handling logic in beancount-tree-writer

korrat
Nov 14, 2023, 12:50 PM
TDB5HJSWMC6Q5RSH4NXZJWP2XAEOF75CXXOKSIG35NCMX75YDUWQC

Dependencies

  • [2] 2PCWN3KW Only rewrite changed files
  • [3] 2JBFREZG enable additional warnings
  • [*] D6UTHZA4 add a simple writer for saving a set of directives to a tree of files

Change contents

  • edit in common/beancount-tree-writer/src/lib.rs at line 9
    [2.19]
    [2.19]
    use std::io::Seek;
  • replacement in common/beancount-tree-writer/src/lib.rs at line 197
    [2.772][2.772:885]()
    let size =
    usize::try_from(file.metadata()?.len()).expect("file should be smaller than usize::MAX");
    [2.772]
    [2.885]
    let buffer_len = u64::try_from(buffer.len()).expect("should always work");
    let file_size = file.metadata()?.len();
  • replacement in common/beancount-tree-writer/src/lib.rs at line 200
    [2.886][2.886:977]()
    if buffer.len() == size {
    let mut current_contents = Vec::with_capacity(size);
    [2.886]
    [2.977]
    if buffer_len == file_size {
    let mut current_contents = Vec::with_capacity(buffer.len());
  • edit in common/beancount-tree-writer/src/lib.rs at line 208
    [2.1177]
    [2.1177]
    // Ensure cursor points to beginning of file
    file.rewind()?;
  • replacement in common/beancount-tree-writer/src/lib.rs at line 215
    [2.1255][2.1255:1330]()
    file.set_len(u64::try_from(buffer.len()).expect("should always work"))
    [2.1255]
    [2.1330]
    file.set_len(buffer_len)?;
    file.sync_all()?;
    tracing::debug!(%path, "successfully wrote account file");
    Ok(())