( )⚙ D11764 rhg: add support for narrow clones and sparse checkouts

This is an archive of the discontinued Mercurial Phabricator instance.

rhg: add support for narrow clones and sparse checkouts
ClosedPublic

Authored by aalekseyev on Nov 16 2021, 7:11 AM.

Details

Summary

This adds a minimal support that can be implemented without parsing the narrowspec.
We can parse the narrowspec and add support for more operations later.

The reason we need so few code changes is as follows:

Most operations need no special treatment of sparse because
some of them only read dirstate (rhg files without -r),
which bakes in the filtering,
some of them only read store (rhg files -r, rhg cat),
and some of them read no data at all (rhg root, rhg debugrequirements).

status is the command that might care about sparse, so we just disable
rhg on it.

For narrow clones, rhg files clearly needs the narrowspec to work
correctly, so we fall back.
rhg cat seems to work consistently with hg cat if the file exists.
If the file is hidden by narrow spec, the error message is different and confusing, so
that's something that we should improve in follow-up patches.

Diff Detail

Repository
rHG Mercurial
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

aalekseyev created this revision.Nov 16 2021, 7:11 AM
Alphare requested changes to this revision.Nov 24 2021, 6:04 AM
Alphare added a subscriber: Alphare.

Small nit, but this is user-facing, so I'd rather have it corrected in the same breath as the other patches instead of forgetting to amend it myself :)

rust/rhg/src/commands/files.rs
59

s/support/supported/

This revision now requires changes to proceed.Nov 24 2021, 6:04 AM

Fixed the wording along with some other issues discovered in tests and review (we're using this patch in our internal fork).

This revision now requires changes to proceed.Nov 30 2021, 9:51 AM

I'm sorry. I forgot to backport a patch for shell compatibility. :-(
Did now.

This revision was not accepted when it landed; it landed in state Needs Review.
This revision was automatically updated to reflect the committed changes.