This is an archive of the discontinued Mercurial Phabricator instance.

localrepo: move repo creation logic out of localrepository.__init__
ClosedPublic

Authored by indygreg on Sep 11 2018, 8:27 PM.

Details

Summary

It has long bothered me that local repository creation is handled as
part of localrepository.init. Upcoming changes I want to make
around how repositories are initialized and instantiated will make
the continued existence of repository creation code in
localrepository.init even more awkward.

localrepository instances are almost never constructed directly:
instead, callers are supposed to go through hg.repository() to obtain
a handle on a repository. And hg.repository() calls
localrepo.instance() to return a new repo instance.

This commit teaches localrepo.instance() to handle the create=True
logic. Most of the code for repo construction has been moved to a
standalone function. This allows extensions to monkeypatch the function
to further customize freshly-created repositories.

A few calls to localrepo.localrepository.init that were passing
create=True were converted to call localrepo.instance().

.. api:: local repo creation moved out of constructor

``localrepo.localrepository.__init__`` no longer accepts a
``create`` argument to create a new repository. New repository
creation is now performed as part of ``localrepo.instance()``
and the bulk of the work is performed by
``localrepo.createrepository()``.

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.