localrepo: move changelog backend selection to a separate method

Summary:
Move logic to select a changelog backend to a separate method so it can be used
by bundlerepo.

Reviewed By: DurhamG

Differential Revision: D24214463

fbshipit-source-id: 6667317e9d51076b4a5d4a07779792f27cbd6d5e
This commit is contained in:
Jun Wu 2020-10-19 17:05:23 -07:00 committed by Facebook GitHub Bot
parent 0498f87da1
commit 0f2c7b4abe

View File

@ -1049,54 +1049,7 @@ class localrepository(object):
if deleted:
self.ui.log("features", feature="remove-svfs-dottmp")
if "gitchangelog" in self.storerequirements:
self.ui.log("changelog_info", changelog_backend="git")
return changelog2.changelog.opengitsegments(
self.svfs, self.ui.uiconfig()
)
if "hybridchangelog" in self.storerequirements:
return changelog2.changelog.openhybrid(self)
if "doublewritechangelog" in self.storerequirements:
if self.ui.configbool("experimental", "lazy-commit-data"):
# alias of hybridchangelog
self.ui.log("changelog_info", changelog_backend="hybrid")
return changelog2.changelog.openhybrid(self)
else:
self.ui.log("changelog_info", changelog_backend="doublewrite")
return changelog2.changelog.opendoublewrite(
self.svfs, self.ui.uiconfig()
)
if "segmentedchangelog" in self.storerequirements:
self.ui.log("changelog_info", changelog_backend="segments")
return changelog2.changelog.opensegments(self.svfs, self.ui.uiconfig())
if (
(
(
self.ui.configbool("experimental", "rust-commits")
and getattr(self.svfs, "options", {}).get(
"bypass-revlog-transaction"
)
)
or "rustrevlogchangelog" in self.storerequirements
)
and "hgsql" not in self.requirements
and "pythonrevlogchangelog" not in self.storerequirements
):
self.ui.log("changelog_info", changelog_backend="rustrevlog")
return changelog2.changelog.openrevlog(self.svfs, self.ui.uiconfig())
if "zstorecommitdata" in self.storerequirements:
zstore = bindings.zstore.zstore(self.svfs.join("hgcommits/v1"))
else:
zstore = None
self.ui.log("changelog_info", changelog_backend="pythonrevlog")
return changelog.changelog(
self.svfs,
uiconfig=self.ui.uiconfig(),
trypending=txnutil.mayhavesharedpending(self.root, self.sharedroot),
zstore=zstore,
)
return _openchangelog(self)
cl = loadchangelog(self)
@ -3069,3 +3022,48 @@ def _remotenodes(repo):
publicnodes += nodes
return publicnodes, draftnodes
def _openchangelog(repo):
if "gitchangelog" in repo.storerequirements:
repo.ui.log("changelog_info", changelog_backend="git")
return changelog2.changelog.opengitsegments(repo.svfs, repo.ui.uiconfig())
if "hybridchangelog" in repo.storerequirements:
return changelog2.changelog.openhybrid(repo)
if "doublewritechangelog" in repo.storerequirements:
if repo.ui.configbool("experimental", "lazy-commit-data"):
# alias of hybridchangelog
repo.ui.log("changelog_info", changelog_backend="hybrid")
return changelog2.changelog.openhybrid(repo)
else:
repo.ui.log("changelog_info", changelog_backend="doublewrite")
return changelog2.changelog.opendoublewrite(repo.svfs, repo.ui.uiconfig())
if "segmentedchangelog" in repo.storerequirements:
repo.ui.log("changelog_info", changelog_backend="segments")
return changelog2.changelog.opensegments(repo.svfs, repo.ui.uiconfig())
if (
(
(
repo.ui.configbool("experimental", "rust-commits")
and getattr(repo.svfs, "options", {}).get("bypass-revlog-transaction")
)
or "rustrevlogchangelog" in repo.storerequirements
)
and "hgsql" not in repo.requirements
and "pythonrevlogchangelog" not in repo.storerequirements
):
repo.ui.log("changelog_info", changelog_backend="rustrevlog")
return changelog2.changelog.openrevlog(repo.svfs, repo.ui.uiconfig())
if "zstorecommitdata" in repo.storerequirements:
zstore = bindings.zstore.zstore(repo.svfs.join("hgcommits/v1"))
else:
zstore = None
repo.ui.log("changelog_info", changelog_backend="pythonrevlog")
return changelog.changelog(
repo.svfs,
uiconfig=repo.ui.uiconfig(),
trypending=txnutil.mayhavesharedpending(repo.root, repo.sharedroot),
zstore=zstore,
)