--- a/rust/rhg/src/commands/files.rs Wed Oct 06 13:32:07 2021 +0530
+++ b/rust/rhg/src/commands/files.rs Tue Oct 05 18:02:22 2021 +0530
@@ -1,12 +1,13 @@
use crate::error::CommandError;
use crate::ui::Ui;
+use crate::ui::UiError;
+use crate::utils::path_utils::relativize_paths;
use clap::Arg;
use hg::operations::list_rev_tracked_files;
use hg::operations::Dirstate;
use hg::repo::Repo;
-use hg::utils::current_dir;
-use hg::utils::files::{get_bytes_from_path, relativize_path};
-use hg::utils::hg_path::{HgPath, HgPathBuf};
+use hg::utils::hg_path::HgPath;
+use std::borrow::Cow;
pub const HELP_TEXT: &str = "
List tracked files.
@@ -54,34 +55,13 @@
files: impl IntoIterator<Item = &'a HgPath>,
) -> Result<(), CommandError> {
let mut stdout = ui.stdout_buffer();
-
- let cwd = current_dir()?;
- let working_directory = repo.working_directory_path();
- let working_directory = cwd.join(working_directory); // Make it absolute
+ let mut any = false;
- let mut any = false;
- if let Ok(cwd_relative_to_repo) = cwd.strip_prefix(&working_directory) {
- // The current directory is inside the repo, so we can work with
- // relative paths
- let cwd = HgPathBuf::from(get_bytes_from_path(cwd_relative_to_repo));
- for file in files {
- any = true;
- stdout.write_all(relativize_path(&file, &cwd).as_ref())?;
- stdout.write_all(b"\n")?;
- }
- } else {
- let working_directory =
- HgPathBuf::from(get_bytes_from_path(working_directory));
- let cwd = HgPathBuf::from(get_bytes_from_path(cwd));
- for file in files {
- any = true;
- // Absolute path in the filesystem
- let file = working_directory.join(file);
- stdout.write_all(relativize_path(&file, &cwd).as_ref())?;
- stdout.write_all(b"\n")?;
- }
- }
-
+ relativize_paths(repo, files, |path: Cow<[u8]>| -> Result<(), UiError> {
+ any = true;
+ stdout.write_all(path.as_ref())?;
+ stdout.write_all(b"\n")
+ })?;
stdout.flush()?;
if any {
Ok(())