D5130: lfs: autoload the extension when cloning from repo with lfs enabled
mharbison72 (Matt Harbison)
phabricator at mercurial-scm.org
Wed Oct 17 07:30:02 UTC 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG6637b079ae45: lfs: autoload the extension when cloning from repo with lfs enabled (authored by mharbison72, committed by ).
CHANGED PRIOR TO COMMIT
https://phab.mercurial-scm.org/D5130?vs=12189&id=12190#toc
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D5130?vs=12189&id=12190
REVISION DETAIL
https://phab.mercurial-scm.org/D5130
AFFECTED FILES
hgext/lfs/wrapper.py
mercurial/hg.py
mercurial/localrepo.py
tests/test-lfs-serve-access.t
tests/test-lfs-serve.t
CHANGE DETAILS
diff --git a/tests/test-lfs-serve.t b/tests/test-lfs-serve.t
--- a/tests/test-lfs-serve.t
+++ b/tests/test-lfs-serve.t
@@ -304,10 +304,10 @@
$ grep 'lfs' .hg/requires $SERVER_REQUIRES
$TESTTMP/server/.hg/requires:lfs
-TODO: fail more gracefully.
-
- $ hg clone -q http://localhost:$HGPORT $TESTTMP/client4_clone
- abort: HTTP Error 500: Internal Server Error
+ $ hg clone http://localhost:$HGPORT $TESTTMP/client4_clone
+ (remote is using large file support (lfs), but it is explicitly disabled in the local configuration)
+ abort: repository requires features unknown to this Mercurial: lfs!
+ (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
[255]
$ grep 'lfs' $TESTTMP/client4_clone/.hg/requires $SERVER_REQUIRES
grep: $TESTTMP/client4_clone/.hg/requires: $ENOENT$
@@ -661,8 +661,6 @@
$ cat $TESTTMP/errors.log | grep '^[A-Z]'
Traceback (most recent call last):
ValueError: no common changegroup version
- Traceback (most recent call last):
- ValueError: no common changegroup version
#else
$ cat $TESTTMP/errors.log
#endif
diff --git a/tests/test-lfs-serve-access.t b/tests/test-lfs-serve-access.t
--- a/tests/test-lfs-serve-access.t
+++ b/tests/test-lfs-serve-access.t
@@ -42,6 +42,7 @@
Downloads fail...
$ hg clone http://localhost:$HGPORT httpclone
+ (remote is using large file support (lfs); lfs will be enabled for this repository)
requesting all changes
adding changesets
adding manifests
@@ -76,6 +77,7 @@
$ hg clone --debug http://localhost:$HGPORT/subdir/mount/point cloned2
using http://localhost:$HGPORT/subdir/mount/point
sending capabilities command
+ (remote is using large file support (lfs); lfs will be enabled for this repository)
query 1; heads
sending batch command
requesting all changes
@@ -88,7 +90,6 @@
adding file changes
adding lfs.bin revisions
added 1 changesets with 1 changes to 1 files
- calling hook pretxnchangegroup.lfs: hgext.lfs.checkrequireslfs
bundle2-input-part: total payload size 648
bundle2-input-part: "listkeys" (params: 1 mandatory) supported
bundle2-input-part: "phase-heads" supported
@@ -239,6 +240,7 @@
Test an I/O error in localstore.verify() (Batch API) with GET
$ hg clone http://localhost:$HGPORT1 httpclone2
+ (remote is using large file support (lfs); lfs will be enabled for this repository)
requesting all changes
adding changesets
adding manifests
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -2895,6 +2895,9 @@
if createopts.get('narrowfiles'):
requirements.add(repository.NARROW_REQUIREMENT)
+ if createopts.get('lfs'):
+ requirements.add('lfs')
+
return requirements
def filterknowncreateopts(ui, createopts):
@@ -2913,6 +2916,7 @@
"""
known = {
'backend',
+ 'lfs',
'narrowfiles',
'sharedrepo',
'sharedrelative',
@@ -2931,6 +2935,9 @@
backend
The storage backend to use.
+ lfs
+ Repository will be created with ``lfs`` requirement. The lfs extension
+ will automatically be loaded when the repository is accessed.
narrowfiles
Set up repository to support narrow file storage.
sharedrepo
diff --git a/mercurial/hg.py b/mercurial/hg.py
--- a/mercurial/hg.py
+++ b/mercurial/hg.py
@@ -578,6 +578,23 @@
createopts['narrowfiles'] = True
+ if srcpeer.capable(b'lfs-serve'):
+ # Repository creation honors the config if it disabled the extension, so
+ # we can't just announce that lfs will be enabled. This check avoids
+ # saying that lfs will be enabled, and then saying it's an unknown
+ # feature. The lfs creation option is set in either case so that a
+ # requirement is added. If the extension is explicitly disabled but the
+ # requirement is set, the clone aborts early, before transferring any
+ # data.
+ createopts['lfs'] = True
+
+ if extensions.disabledext('lfs'):
+ ui.status(_('(remote is using large file support (lfs), but it is '
+ 'explicitly disabled in the local configuration)\n'))
+ else:
+ ui.status(_('(remote is using large file support (lfs); lfs will '
+ 'be enabled for this repository)\n'))
+
shareopts = shareopts or {}
sharepool = shareopts.get('pool')
sharenamemode = shareopts.get('mode')
diff --git a/hgext/lfs/wrapper.py b/hgext/lfs/wrapper.py
--- a/hgext/lfs/wrapper.py
+++ b/hgext/lfs/wrapper.py
@@ -46,7 +46,13 @@
'''Wrap server command to announce lfs server capability'''
caps = orig(repo, proto)
if util.safehasattr(repo.svfs, 'lfslocalblobstore'):
- # XXX: change to 'lfs=serve' when separate git server isn't required?
+ # Advertise a slightly different capability when lfs is *required*, so
+ # that the client knows it MUST load the extension. If lfs is not
+ # required on the server, there's no reason to autoload the extension
+ # on the client.
+ if b'lfs' in repo.requirements:
+ caps.append('lfs-serve')
+
caps.append('lfs')
return caps
To: mharbison72, indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list