Comments
Patch
@@ -45,17 +45,28 @@
repo: &Repo,
files: impl IntoIterator<Item = &'a HgPath>,
) -> Result<(), CommandError> {
- let cwd = HgPathBuf::from(get_bytes_from_path(hg::utils::current_dir()?));
- let working_directory =
- HgPathBuf::from(get_bytes_from_path(repo.working_directory_path()));
-
let mut stdout = ui.stdout_buffer();
+ let cwd = hg::utils::current_dir()?;
+ let working_directory = repo.working_directory_path();
- for file in files {
- let file = working_directory.join(file);
- stdout.write_all(relativize_path(&file, &cwd).as_ref())?;
- stdout.write_all(b"\n")?;
+ 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 {
+ stdout.write_all(relativize_path(&file, &cwd).as_ref())?;
+ stdout.write_all(b"\n")?;
+ }
+ } else {
+ let cwd = HgPathBuf::from(get_bytes_from_path(cwd));
+ let working_directory = HgPathBuf::from(get_bytes_from_path(working_directory));
+ for file in files {
+ // 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")?;
+ }
}
+
stdout.flush()?;
Ok(())
}