replacement in importers/csv/src/lib.rs at line 97
[2.2396]→[2.2396:2588](∅→∅) − directive
− .add_meta(common_keys::FILENAME, file.as_str())
− .add_meta(common_keys::LINE_NUMBER, position.line());
+ directive.add_meta(common_keys::LINE_NUMBER, position.line());
edit in framework/src/runner.rs at line 3
− use alloc::borrow::Cow;
edit in framework/src/runner.rs at line 6
+ use beancount_types::common_keys;
replacement in framework/src/runner.rs at line 13
− use miette::Result; // TODO
+ use miette::Result;
+ use relative_path::RelativePathBuf; // TODO
replacement in framework/src/runner.rs at line 147
[3.3497]→[3.3497:3716](∅→∅) − ) -> Result<Cow<'a, Utf8Path>> {
− let destination = archive::file_name(importer, &self.archive_directory, file)?;
−
− if self.dry_run || file == destination {
− return Ok(Cow::Borrowed(file));
+ ) -> Result<Option<RelativePathBuf>> {
+ if self.dry_run {
+ return Ok(None);
replacement in framework/src/runner.rs at line 152
[3.3727]→[3.3727:3790](∅→∅) − tracing::info!(?file, ?destination, "archiving file");
+ let relative_destination = archive::file_name(importer, file)?;
+
+ let destination = relative_destination.to_logical_path(&self.archive_directory);
+ let destination = Utf8Path::from_path(&destination).expect("should be UTF-8");
+
+ if file != destination {
+ tracing::info!(?file, ?destination, "archiving file");
replacement in framework/src/runner.rs at line 160
[3.3791]→[3.3791:4006](∅→∅) − if destination.exists() {
− miette::ensure!(
− self.overwrite,
− "destination {destination:?} already exists",
− destination = destination,
− );
+ if destination.exists() {
+ miette::ensure!(
+ self.overwrite,
+ "destination {destination:?} already exists",
+ destination = destination,
+ );
+ }
+
+ archive::move_file(file, destination).wrap_err("while moving file into archive")?;
replacement in framework/src/runner.rs at line 171
[3.4017]→[3.4017:4146](∅→∅) − archive::move_file(file, &destination).wrap_err("while moving file into archive")?;
−
− Ok(Cow::Owned(destination))
+ Ok(Some(relative_destination))
replacement in framework/src/runner.rs at line 205
[3.5240]→[3.5240:5264](∅→∅) + let relative_destination = self
replacement in framework/src/runner.rs at line 208
[3.5354]→[3.5354:5437](∅→∅) − // let file = file.strip_prefix(&self.archive_directory).unwrap_or(&file);
+
+ let destination = relative_destination.as_ref().map_or_else(
+ || file.to_path_buf(),
+ |relative_destination| {
+ let destination = relative_destination.to_path(&self.archive_directory);
+ Utf8PathBuf::from_path_buf(destination).expect("path to be UTF-8")
+ },
+ );
replacement in framework/src/runner.rs at line 218
[3.5486]→[3.5486:5554](∅→∅) − .extract(&file, &[]) // TODO load existing transactions
+ .extract(&destination, &[]) // TODO load existing transactions
edit in framework/src/runner.rs at line 221
+ if let Some(path) = relative_destination {
+ for directive in &mut extracted_directives {
+ directive.add_meta(common_keys::FILENAME, path.as_str());
+ }
+ }
+
edit in framework/src/runner/archive.rs at line 4
[3.6621]→[3.6621:6646](∅→∅) − use camino::Utf8PathBuf;
edit in framework/src/runner/archive.rs at line 6
+ use relative_path::RelativePathBuf;
edit in framework/src/runner/archive.rs at line 15
[3.6933]→[3.6933:6954](∅→∅) replacement in framework/src/runner/archive.rs at line 16
[3.6975]→[3.6975:7028](∅→∅) − ) -> Result<Utf8PathBuf> {
− use std::fmt::Write;
−
+ ) -> Result<RelativePathBuf> {
edit in framework/src/runner/archive.rs at line 35
[3.7598]→[3.7598:7640](∅→∅) − let sep = std::path::MAIN_SEPARATOR;
−
replacement in framework/src/runner/archive.rs at line 37
[3.7740]→[3.7740:7769](∅→∅) + !name.contains(std::path::MAIN_SEPARATOR),
replacement in framework/src/runner/archive.rs at line 47
[3.8026]→[3.8026:8317](∅→∅) − let mut path = base.to_string();
− let additional = account.len() + 10 + 1 + name.len() + 5 + 2; // account name + date + dot + name + extra separators
− path.reserve(additional);
−
− account
− .segments()
− .for_each(|segment| write!(path, "{sep}{segment}").unwrap());
+ let mut path = RelativePathBuf::new();
+ path.extend(account.segments().map(|seg| &**seg));
replacement in framework/src/runner/archive.rs at line 50
[3.8318]→[3.8318:8367](∅→∅) − write!(path, "{sep}{date}.{name}").unwrap();
+ let file_name = format!("{date}.{name}");
+ path.set_file_name(file_name);
replacement in framework/src/runner/archive.rs at line 53
[3.8368]→[3.8368:8400](∅→∅) − Ok(Utf8PathBuf::from(path))
replacement in framework/Cargo.toml at line 16
[3.14853]→[3.14853:14988](∅→∅),
[3.14988]→[3.28388:28415](∅→∅),
[3.28415]→[3.14988:15069](∅→∅),
[3.14988]→[3.14988:15069](∅→∅) − camino.workspace = true
− clap.workspace = true
− delegate.workspace = true
− inventory.workspace = true
− miette.workspace = true
− snafu.workspace = true
− time-tz.workspace = true
− time.workspace = true
− tracing.workspace = true
+ camino.workspace = true
+ clap.workspace = true
+ delegate.workspace = true
+ inventory.workspace = true
+ miette.workspace = true
+ relative-path.workspace = true
+ snafu.workspace = true
+ time-tz.workspace = true
+ time.workspace = true
+ tracing.workspace = true
edit in Cargo.toml at line 60
+ relative-path = "1.8.0"
edit in Cargo.lock at line 229
edit in Cargo.lock at line 3212
+ name = "relative-path"
+ version = "1.8.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "4bf2521270932c3c7bed1a59151222bd7643c79310f2916f01925e1e16255698"
+
+ [[package]]