HomePhabricator

dirstate: Remove the Rust abstraction DirstateMapMethods

Authored by SimonSapin.

Description

dirstate: Remove the Rust abstraction DirstateMapMethods

This Rust trait used to exist in order to allow the DirstateMap class exposed
to Python to be backed by either of two implementations: one similar to the
Python implementation based on a "flat" HashMap<HgPathBuf, DirstateEntry>,
and the newer one based on a tree of nodes matching the directory structure
of tracked files. A boxed trait object was used with dynamic dispatch.

With the flat implementation removed and only the tree one remaining, this
abstraction is not useful anymore and the concrete type can be stored directly.

It remains that the trait was implemented separately for DirstateMap<'_>
(which takes a lifetime parameter) and OwningDirstateMap (whose job is to
wrap the former and hide the lifetime parameter), with the latter impl only
forwarding calls.

This changeset also removes this forwarding. Instead, the methods formerly of
the DirstateMapMethods trait are now inherent methods implemented for
OwningDirstateMap (where they will actually be used) but in the module that
defines DirstateMap. This unusual setup gives access to the private fields
of DirstateMap from those methods.

Differential Revision: https://phab.mercurial-scm.org/D11517

Details