mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
eagerpeer: add clone support
Summary: Add clone endpoint so we can clone from an eager test repo. Note: the master group is empty and "cloneata" does not quite work yet due to EagerRepo not writing to the master group. It will be fixed later. Reviewed By: DurhamG Differential Revision: D27971121 fbshipit-source-id: 0cc35136c6987673c2c4fbbd892c344c3586fcb7
This commit is contained in:
parent
5b2ee8ccbf
commit
6763719506
@ -117,3 +117,28 @@ def emergencyclone(source, repo):
|
||||
|
||||
repo.invalidate()
|
||||
repo.invalidatechangelog()
|
||||
|
||||
|
||||
def segmentsclone(source, clonedata, repo):
|
||||
"""clone using segmented changelog's CloneData
|
||||
|
||||
This produces a repo with lazy commit hashes.
|
||||
"""
|
||||
with repo.wlock(), repo.lock(), repo.transaction("clone"):
|
||||
changelog2.migrateto(repo, "lazy")
|
||||
repo.requirements.add("remotefilelog")
|
||||
repo._writerequirements()
|
||||
|
||||
repo.ui.status(_("populating main commit graph\n"))
|
||||
repo.changelog.inner.importclonedata(clonedata)
|
||||
tip = repo.changelog.dag.all().first()
|
||||
if tip:
|
||||
repo.ui.status(_("tip commit: %s\n") % hex(tip))
|
||||
repo.svfs.write("tip", tip)
|
||||
|
||||
repo.ui.status(_("fetching selected remote bookmarks\n"))
|
||||
remote = bookmod.remotenameforurl(repo.ui, repo.ui.paths.getpath(source).rawloc)
|
||||
assert remote is not None
|
||||
repo.pull(
|
||||
source, bookmarknames=bookmod.selectivepullbookmarknames(repo, remote)
|
||||
)
|
||||
|
@ -98,6 +98,11 @@ class eagerpeer(repository.peer):
|
||||
)
|
||||
yield node, parents
|
||||
|
||||
# Clone using dag::CloneData (designed for lazy backend)
|
||||
|
||||
def clonedata(self):
|
||||
return self.edenapi.clonedata(self._reponame)
|
||||
|
||||
# The Python "peer" interface.
|
||||
# Prefer using EdenAPI to implement them.
|
||||
|
||||
@ -132,6 +137,7 @@ class eagerpeer(repository.peer):
|
||||
"branchmap",
|
||||
"addblobs",
|
||||
"commitgraph",
|
||||
"clonedata",
|
||||
}
|
||||
|
||||
def debugwireargs(self, one, two, three=None, four=None, five=None):
|
||||
|
@ -592,9 +592,14 @@ def clone(
|
||||
)
|
||||
revs = [srcpeer.lookup(r) for r in rev]
|
||||
checkout = revs[0]
|
||||
|
||||
# Can we use EdenAPI CloneData?
|
||||
if srcpeer.capable("clonedata") and shallow and not update:
|
||||
data = srcpeer.clonedata()
|
||||
clonemod.segmentsclone(srcpeer.url(), data, destrepo)
|
||||
# Can we use the new code path (stream clone + shallow + no
|
||||
# update + selective pull)?
|
||||
if (
|
||||
elif (
|
||||
destrepo
|
||||
and not pull
|
||||
and not update
|
||||
|
@ -118,3 +118,22 @@ Trigger file and tree downloading:
|
||||
TRACE eagerepo::api: found: 35e7525ce3a48913275d7061dd9a867ffef1e34d, 41 bytes
|
||||
AB (no-eol)
|
||||
|
||||
Clone:
|
||||
|
||||
$ cd $TESTTMP
|
||||
$ hg clone -U --shallow eager:$TESTTMP/e1 cloned
|
||||
DEBUG eagerepo::api: clone_data
|
||||
populating main commit graph
|
||||
fetching selected remote bookmarks
|
||||
DEBUG eagerepo::api: bookmarks master
|
||||
DEBUG edenscm::mercurial::eagerpeer: listkeyspatterns(bookmarks, ['master']) = sortdict([('master', 'dc0947a82db884575bb76ea10ac97b08536bfa03')])
|
||||
DEBUG eagerepo::api: bookmarks master
|
||||
DEBUG edenscm::mercurial::eagerpeer: listkeyspatterns(bookmarks, ['master']) = sortdict([('master', 'dc0947a82db884575bb76ea10ac97b08536bfa03')])
|
||||
DEBUG eagerepo::api: bookmarks master
|
||||
DEBUG edenscm::mercurial::eagerpeer: listkeyspatterns(bookmarks, ['master']) = sortdict([('master', 'dc0947a82db884575bb76ea10ac97b08536bfa03')])
|
||||
DEBUG eagerepo::api: commit_known
|
||||
DEBUG eagerepo::api: commit_graph dc0947a82db884575bb76ea10ac97b08536bfa03
|
||||
TRACE edenscm::mercurial::eagerpeer: graph node 426bada5c67598ca65036d57d9e4b64b0c1ce7a0 []
|
||||
TRACE edenscm::mercurial::eagerpeer: graph node dc0947a82db884575bb76ea10ac97b08536bfa03 ['426bada5c67598ca65036d57d9e4b64b0c1ce7a0']
|
||||
DEBUG eagerepo::api: bookmarks master
|
||||
DEBUG edenscm::mercurial::eagerpeer: listkeyspatterns(bookmarks, ['master']) = sortdict([('master', 'dc0947a82db884575bb76ea10ac97b08536bfa03')])
|
||||
|
Loading…
Reference in New Issue
Block a user