rust/rhg/src/commands/files.rs
changeset 48174 9ecf802b06e0
parent 46925 b5e8bf10436e
child 48342 10c32e1b892a
--- 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(())