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

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
Lint Skipped
Unit
Unit Tests Skipped

Event Timeline

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