rhg: support `rhg files` with `ui.relative-paths=false`
authorArseniy Alekseyev <aalekseyev@janestreet.com>
Mon, 29 May 2023 17:04:14 +0100
changeset 50574 9db197c73138
parent 50573 74e4dbb0fcd5
child 50575 e6948aafda6f
rhg: support `rhg files` with `ui.relative-paths=false`
rust/rhg/src/commands/files.rs
tests/test-rhg.t
--- a/rust/rhg/src/commands/files.rs	Mon May 29 16:53:18 2023 +0100
+++ b/rust/rhg/src/commands/files.rs	Mon May 29 17:04:14 2023 +0100
@@ -1,5 +1,7 @@
 use crate::error::CommandError;
-use crate::ui::{print_narrow_sparse_warnings, Ui, RelativePaths, relative_paths};
+use crate::ui::{
+    print_narrow_sparse_warnings, relative_paths, RelativePaths, Ui,
+};
 use crate::utils::path_utils::RelativizePaths;
 use clap::Arg;
 use hg::narrow;
@@ -28,14 +30,10 @@
 }
 
 pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> {
-    match relative_paths(invocation.config)? {
-      RelativePaths::Legacy | RelativePaths::Bool(true) => (),
-      RelativePaths::Bool(false) => {
-        return Err(CommandError::unsupported(
-            "non-default ui.relative-paths",
-        ));
-      }
-    }
+    let relative_paths = match relative_paths(invocation.config)? {
+        RelativePaths::Legacy => true,
+        RelativePaths::Bool(v) => v,
+    };
 
     let rev = invocation.subcommand_args.get_one::<String>("rev");
 
@@ -59,7 +57,7 @@
     if let Some(rev) = rev {
         let files = list_rev_tracked_files(repo, rev, narrow_matcher)
             .map_err(|e| (e, rev.as_ref()))?;
-        display_files(invocation.ui, repo, files.iter())
+        display_files(invocation.ui, repo, relative_paths, files.iter())
     } else {
         // The dirstate always reflects the sparse narrowspec.
         let dirstate = repo.dirstate_map()?;
@@ -79,6 +77,7 @@
         display_files(
             invocation.ui,
             repo,
+            relative_paths,
             files.into_iter().map::<Result<_, CommandError>, _>(Ok),
         )
     }
@@ -87,6 +86,7 @@
 fn display_files<'a, E>(
     ui: &Ui,
     repo: &Repo,
+    relative_paths: bool,
     files: impl IntoIterator<Item = Result<&'a HgPath, E>>,
 ) -> Result<(), CommandError>
 where
@@ -98,7 +98,11 @@
     let relativize = RelativizePaths::new(repo)?;
     for result in files {
         let path = result?;
-        stdout.write_all(&relativize.relativize(path))?;
+        if relative_paths {
+            stdout.write_all(&relativize.relativize(path))?;
+        } else {
+            stdout.write_all(path.as_bytes())?;
+        }
         stdout.write_all(b"\n")?;
         any = true;
     }
--- a/tests/test-rhg.t	Mon May 29 16:53:18 2023 +0100
+++ b/tests/test-rhg.t	Mon May 29 17:04:14 2023 +0100
@@ -77,8 +77,9 @@
   ../../../file3
 
   $ $NO_FALLBACK rhg files --config ui.relative-paths=false
-  unsupported feature: non-default ui.relative-paths
-  [252]
+  file1
+  file2
+  file3
 
   $ $NO_FALLBACK rhg files --config ui.relative-paths=true
   ../../../file1