localrepo: add repository feature when repo can be stream cloned
authorGregory Szorc <gregory.szorc@gmail.com>
Tue, 02 Oct 2018 12:40:39 -0700
changeset 40028 83146d176c03
parent 40027 7e807b8a9e56
child 40029 51f10e6d66c7
localrepo: add repository feature when repo can be stream cloned Right now, the wire protocol server assumes all repository objects can be stream cloned (unless the stream clone feature is disabled via config option). But not all storage backends or repository objects may support stream clone. This commit defines a repository feature denoting whether stream clone is supported. The feature is defined for revlog-based repositories, which should currently be "all repositories." Differential Revision: https://phab.mercurial-scm.org/D4852
mercurial/localrepo.py
mercurial/repository.py
--- a/mercurial/localrepo.py	Wed Sep 26 18:08:08 2018 -0700
+++ b/mercurial/localrepo.py	Tue Oct 02 12:40:39 2018 -0700
@@ -795,6 +795,7 @@
 def makefilestorage(requirements, features, **kwargs):
     """Produce a type conforming to ``ilocalrepositoryfilestorage``."""
     features.add(repository.REPO_FEATURE_REVLOG_FILE_STORAGE)
+    features.add(repository.REPO_FEATURE_STREAM_CLONE)
 
     if repository.NARROW_REQUIREMENT in requirements:
         return revlognarrowfilestorage
--- a/mercurial/repository.py	Wed Sep 26 18:08:08 2018 -0700
+++ b/mercurial/repository.py	Tue Oct 02 12:40:39 2018 -0700
@@ -27,6 +27,8 @@
 REPO_FEATURE_SHARED_STORAGE = b'sharedstore'
 # LFS supported for backing file storage.
 REPO_FEATURE_LFS = b'lfs'
+# Repository supports being stream cloned.
+REPO_FEATURE_STREAM_CLONE = b'streamclone'
 
 class ipeerconnection(interfaceutil.Interface):
     """Represents a "connection" to a repository.