This is an archive of the discontinued Mercurial Phabricator instance.

hg: don't reuse repo instance after unshare()
ClosedPublic

Authored by indygreg on Sep 12 2018, 10:02 PM.

Details

Summary

Unsharing a repository is a pretty invasive procedure and fundamentally
changes the behavior of the repository.

Currently, hg.unshare() calls into localrepository.init to
re-initialize the repository instance. This is a bit hacky. And
future commits that refactor how localrepository instances are
constructed will make this difficult to support.

This commit changes unshare() so it constructs a new repo instance
once the unshare I/O has completed. It then poisons the old repo
instance so any further use will result in error.

Surprisingly, nothing in core appears to access a repo instance
after it has been unshared!

.. api::

``hg.unshare()`` now poisons the repo instance so it can't be used.

It also returns a new repo instance suitable for interacting with
the unshared repository.

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

indygreg created this revision.Sep 12 2018, 10:02 PM
This revision was automatically updated to reflect the committed changes.