mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
infinitepush: re-enable lfs support
Summary: D17 was reverted because it broke creating bundle for non-general delta repos. The reason is the following: D17 made infinitepush extension override changegroup.supportedoutgoingversion() function and discard '01' version. For non-general delta repositories it resulted in broken `hg bundle ...` command. `abort: repository does not support bundle version 01` This diff fixes it by not overriding supportedoutgoingversion(). Instead getscratchbranchpart() has its own logic of selecting changegroup version. Test Plan: Run unit-test Run `hg bundle -r . --base .^ somefile` in non-general delta repo, make sure it works fine. Reviewers: #fbhgext, durham Reviewed By: #fbhgext, durham Subscribers: durham Differential Revision: https://phab.mercurial-scm.org/D81
This commit is contained in:
parent
782636d475
commit
214387fb21
@ -179,6 +179,16 @@ def _canskipupload(repo):
|
||||
# if remotestore is a null store, upload is a no-op and can be skipped
|
||||
return isinstance(repo.svfs.lfsremoteblobstore, blobstore._nullremote)
|
||||
|
||||
def uploadblobsfromrevs(repo, revs):
|
||||
'''upload lfs blobs introduced by revs
|
||||
|
||||
Note: also used by other extensions e. g. infinitepush. avoid renaming.
|
||||
'''
|
||||
if _canskipupload(repo):
|
||||
return
|
||||
pointers = extractpointers(repo, revs)
|
||||
uploadblobs(repo, pointers)
|
||||
|
||||
def prepush(pushop):
|
||||
"""Prepush hook.
|
||||
|
||||
@ -186,18 +196,12 @@ def prepush(pushop):
|
||||
deserialized into metadata so that we can block the push on their upload to
|
||||
the remote blobstore.
|
||||
"""
|
||||
if _canskipupload(pushop.repo):
|
||||
return
|
||||
pointers = extractpointers(pushop.repo, pushop.outgoing.missing)
|
||||
uploadblobs(pushop.repo, pointers)
|
||||
return uploadblobsfromrevs(pushop.repo, pushop.outgoing.missing)
|
||||
|
||||
def writenewbundle(orig, ui, repo, source, filename, bundletype, outgoing,
|
||||
*args, **kwargs):
|
||||
"""upload LFS blobs added by outgoing revisions on 'hg bundle'"""
|
||||
if _canskipupload(repo):
|
||||
return
|
||||
pointers = extractpointers(repo, outgoing.missing)
|
||||
uploadblobs(repo, pointers)
|
||||
uploadblobsfromrevs(repo, outgoing.missing)
|
||||
return orig(ui, repo, source, filename, bundletype, outgoing, *args,
|
||||
**kwargs)
|
||||
|
||||
|
@ -11,6 +11,7 @@ from mercurial import (
|
||||
bundle2,
|
||||
changegroup,
|
||||
error,
|
||||
extensions,
|
||||
revsetlang,
|
||||
)
|
||||
from mercurial.i18n import _
|
||||
@ -29,7 +30,12 @@ def getscratchbranchpart(repo, peer, outgoing, confignonforwardmove,
|
||||
_validaterevset(repo, revsetlang.formatspec('%ln', outgoing.missing),
|
||||
bookmark)
|
||||
|
||||
cgversion = '02'
|
||||
supportedversions = changegroup.supportedoutgoingversions(repo)
|
||||
# Explicitly avoid using '01' changegroup version in infinitepush to
|
||||
# support general delta
|
||||
supportedversions.discard('01')
|
||||
cgversion = min(supportedversions)
|
||||
_handlelfs(repo, outgoing.missing)
|
||||
cg = changegroup.getlocalchangegroupraw(repo, 'push',
|
||||
outgoing, version=cgversion)
|
||||
|
||||
@ -77,3 +83,16 @@ def _validaterevset(repo, revset, bookmark):
|
||||
if len(heads) > 1:
|
||||
raise error.Abort(
|
||||
_('cannot push more than one head to a scratch branch'))
|
||||
|
||||
def _handlelfs(repo, missing):
|
||||
'''Special case if lfs is enabled
|
||||
|
||||
If lfs is enabled then we need to call prepush hook
|
||||
to make sure large files are uploaded to lfs
|
||||
'''
|
||||
try:
|
||||
lfsmod = extensions.find('lfs')
|
||||
lfsmod.wrapper.uploadblobsfromrevs(repo, missing)
|
||||
except KeyError:
|
||||
# Ignore if lfs extension is not enabled
|
||||
return
|
||||
|
63
tests/test-infinitepush-lfs.t
Normal file
63
tests/test-infinitepush-lfs.t
Normal file
@ -0,0 +1,63 @@
|
||||
|
||||
Setup common infinitepush
|
||||
$ . "$TESTDIR/library.sh"
|
||||
$ . "$TESTDIR/library-infinitepush.sh"
|
||||
$ setupcommon
|
||||
|
||||
Setup lfs
|
||||
$ cat >> $HGRCPATH << EOF
|
||||
> [experimental]
|
||||
> changegroup3=True
|
||||
> [extensions]
|
||||
> lfs=$TESTDIR/../hgext3rd/lfs/
|
||||
> [lfs]
|
||||
> threshold=10B
|
||||
> url=file:$TESTTMP/dummy-remote/
|
||||
> EOF
|
||||
|
||||
Setup server repo
|
||||
$ hg init repo
|
||||
$ cd repo
|
||||
$ setupserver
|
||||
$ echo 1 > 1
|
||||
$ hg add 1
|
||||
$ hg ci -m initial
|
||||
|
||||
Setup client
|
||||
$ cd ..
|
||||
$ hg clone ssh://user@dummy/repo client -q
|
||||
$ cd client
|
||||
$ echo aaaaaaaaaaa > largefile
|
||||
$ hg ci -Aqm commit
|
||||
$ hg debugdata largefile 0
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ab483e1d855ad0ea27a68eeea02a04c1de6ccd2dc2c05e3a48c9a1ebb8af5f99
|
||||
size 12
|
||||
x-is-binary 0
|
||||
|
||||
$ hg push -r . --to scratch/lfscommit --create
|
||||
pushing to ssh://user@dummy/repo
|
||||
searching for changes
|
||||
remote: pushing 1 commit:
|
||||
remote: 0da81a72db1a commit
|
||||
|
||||
$ scratchbookmarks
|
||||
scratch/lfscommit 0da81a72db1a2d8256845e3808971f33e73d24c4
|
||||
|
||||
$ cd ..
|
||||
|
||||
Setup another client
|
||||
$ hg clone ssh://user@dummy/repo client2 -q
|
||||
$ cd client2
|
||||
$ hg update scratch/lfscommit
|
||||
'scratch/lfscommit' does not exist locally - looking for it remotely...
|
||||
pulling from ssh://user@dummy/repo
|
||||
searching for changes
|
||||
adding changesets
|
||||
adding manifests
|
||||
adding file changes
|
||||
added 1 changesets with 1 changes to 1 files
|
||||
(run 'hg update' to get a working copy)
|
||||
'scratch/lfscommit' found remotely
|
||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
||||
(activating bookmark scratch/lfscommit)
|
Loading…
Reference in New Issue
Block a user