--- a/rust/rhg/src/commands/files.rs Fri Dec 03 14:36:40 2021 +0100
+++ b/rust/rhg/src/commands/files.rs Tue Nov 16 11:53:58 2021 +0000
@@ -40,10 +40,38 @@
let rev = invocation.subcommand_args.value_of("rev");
let repo = invocation.repo?;
+
+ // It seems better if this check is removed: this would correspond to
+ // automatically enabling the extension if the repo requires it.
+ // However we need this check to be in sync with vanilla hg so hg tests
+ // pass.
+ if repo.has_sparse()
+ && invocation.config.get(b"extensions", b"sparse").is_none()
+ {
+ return Err(CommandError::unsupported(
+ "repo is using sparse, but sparse extension is not enabled",
+ ));
+ }
+
if let Some(rev) = rev {
+ if repo.has_narrow() {
+ return Err(CommandError::unsupported(
+ "rhg files -r <rev> is not supported in narrow clones",
+ ));
+ }
let files = list_rev_tracked_files(repo, rev).map_err(|e| (e, rev))?;
display_files(invocation.ui, repo, files.iter())
} else {
+ // The dirstate always reflects the sparse narrowspec, so if
+ // we only have sparse without narrow all is fine.
+ // If we have narrow, then [hg files] needs to check if
+ // the store narrowspec is in sync with the one of the dirstate,
+ // so we can't support that without explicit code.
+ if repo.has_narrow() {
+ return Err(CommandError::unsupported(
+ "rhg files is not supported in narrow clones",
+ ));
+ }
let distate = Dirstate::new(repo)?;
let files = distate.tracked_files()?;
display_files(invocation.ui, repo, files.into_iter().map(Ok))