##// END OF EJS Templates
lfs: register the flag processors per repository...
Matt Harbison -
r40304:9c4cbbb0 default
parent child Browse files
Show More
@@ -124,6 +124,8 b' Configs::'
124 124
125 125 from __future__ import absolute_import
126 126
127 import sys
128
127 129 from mercurial.i18n import _
128 130
129 131 from mercurial import (
@@ -204,6 +206,12 b' command = registrar.command(cmdtable)'
204 206 templatekeyword = registrar.templatekeyword()
205 207 filesetpredicate = registrar.filesetpredicate()
206 208
209 lfsprocessor = (
210 wrapper.readfromstore,
211 wrapper.writetostore,
212 wrapper.bypasscheckhash,
213 )
214
207 215 def featuresetup(ui, supported):
208 216 # don't die on seeing a repo with the lfs requirement
209 217 supported |= {'lfs'}
@@ -302,12 +310,28 b' def wrapfilelog(filelog):'
302 310 wrapfunction(filelog, 'renamed', wrapper.filelogrenamed)
303 311 wrapfunction(filelog, 'size', wrapper.filelogsize)
304 312
313 def _resolverevlogstorevfsoptions(orig, ui, requirements, features):
314 opts = orig(ui, requirements, features)
315 for name, module in extensions.extensions(ui):
316 if module is sys.modules[__name__]:
317 if revlog.REVIDX_EXTSTORED in opts[b'flagprocessors']:
318 msg = (_(b"cannot register multiple processors on flag '%#x'.")
319 % revlog.REVIDX_EXTSTORED)
320 raise error.Abort(msg)
321
322 opts[b'flagprocessors'][revlog.REVIDX_EXTSTORED] = lfsprocessor
323 break
324
325 return opts
326
305 327 def extsetup(ui):
306 328 wrapfilelog(filelog.filelog)
307 329
308 330 wrapfunction = extensions.wrapfunction
309 331
310 332 wrapfunction(localrepo, 'makefilestorage', wrapper.localrepomakefilestorage)
333 wrapfunction(localrepo, 'resolverevlogstorevfsoptions',
334 _resolverevlogstorevfsoptions)
311 335
312 336 wrapfunction(cmdutil, '_updatecatformatter', wrapper._updatecatformatter)
313 337 wrapfunction(scmutil, 'wrapconvertsink', wrapper.convertsink)
@@ -334,15 +358,6 b' def extsetup(ui):'
334 358 wrapfunction(context.basefilectx, 'isbinary', wrapper.filectxisbinary)
335 359 context.basefilectx.islfs = wrapper.filectxislfs
336 360
337 revlog.addflagprocessor(
338 revlog.REVIDX_EXTSTORED,
339 (
340 wrapper.readfromstore,
341 wrapper.writetostore,
342 wrapper.bypasscheckhash,
343 ),
344 )
345
346 361 scmutil.fileprefetchhooks.add('lfs', wrapper._prefetchfiles)
347 362
348 363 # Make bundle choose changegroup3 instead of changegroup2. This affects
@@ -35,6 +35,26 b' make command server magic visible'
35 35 $ hg init server
36 36 $ SERVER_REQUIRES="$TESTTMP/server/.hg/requires"
37 37
38 $ cat > $TESTTMP/debugprocessors.py <<EOF
39 > from mercurial import (
40 > cmdutil,
41 > commands,
42 > pycompat,
43 > registrar,
44 > )
45 > cmdtable = {}
46 > command = registrar.command(cmdtable)
47 > @command(b'debugprocessors', [], b'FILE')
48 > def debugprocessors(ui, repo, file_=None, **opts):
49 > opts = pycompat.byteskwargs(opts)
50 > opts[b'changelog'] = False
51 > opts[b'manifest'] = False
52 > opts[b'dir'] = False
53 > rl = cmdutil.openrevlog(repo, b'debugprocessors', file_, opts)
54 > for flag, proc in rl._flagprocessors.iteritems():
55 > ui.status(b"registered processor '%#x'\n" % (flag))
56 > EOF
57
38 58 Skip the experimental.changegroup3=True config. Failure to agree on this comes
39 59 first, and causes a "ValueError: no common changegroup version" or "abort:
40 60 HTTP Error 500: Internal Server Error", if the extension is only loaded on one
@@ -42,6 +62,8 b' side. If that *is* enabled, the subsequ'
42 62 for flag '0x2000'!" if the extension is only loaded on one side (possibly also
43 63 masked by the Internal Server Error message).
44 64 $ cat >> $HGRCPATH <<EOF
65 > [extensions]
66 > debugprocessors = $TESTTMP/debugprocessors.py
45 67 > [experimental]
46 68 > lfs.disableusercache = True
47 69 > [lfs]
@@ -51,6 +73,8 b' masked by the Internal Server Error mess'
51 73 > push_ssl=False
52 74 > EOF
53 75
76 $ cp $HGRCPATH $HGRCPATH.orig
77
54 78 #if lfsremote-on
55 79 $ hg --config extensions.lfs= -R server \
56 80 > serve -p $HGPORT -d --pid-file=hg.pid --errorlog=$TESTTMP/errors.log
@@ -307,6 +331,103 b' lfs content, and the extension enabled.'
307 331 $ hg identify http://localhost:$HGPORT
308 332 c729025cc5e3
309 333
334 $ mv $HGRCPATH $HGRCPATH.tmp
335 $ cp $HGRCPATH.orig $HGRCPATH
336
337 >>> from __future__ import absolute_import
338 >>> from hgclient import check, readchannel, runcommand
339 >>> @check
340 ... def checkflags(server):
341 ... readchannel(server)
342 ... print('')
343 ... print('# LFS required- both lfs and non-lfs revlogs have 0x2000 flag')
344 ... runcommand(server, ['debugprocessors', 'lfs.bin', '-R',
345 ... '../server'])
346 ... runcommand(server, ['debugprocessors', 'nonlfs2.txt', '-R',
347 ... '../server'])
348 ... runcommand(server, ['config', 'extensions', '--cwd',
349 ... '../server'])
350 ...
351 ... print("\n# LFS not enabled- revlogs don't have 0x2000 flag")
352 ... runcommand(server, ['debugprocessors', 'nonlfs3.txt'])
353 ... runcommand(server, ['config', 'extensions'])
354
355 # LFS required- both lfs and non-lfs revlogs have 0x2000 flag
356 *** runcommand debugprocessors lfs.bin -R ../server
357 registered processor '0x8000'
358 registered processor '0x2000'
359 *** runcommand debugprocessors nonlfs2.txt -R ../server
360 registered processor '0x8000'
361 registered processor '0x2000'
362 *** runcommand config extensions --cwd ../server
363 extensions.debugprocessors=$TESTTMP/debugprocessors.py
364 extensions.lfs=
365
366 # LFS not enabled- revlogs don't have 0x2000 flag
367 *** runcommand debugprocessors nonlfs3.txt
368 registered processor '0x8000'
369 *** runcommand config extensions
370 extensions.debugprocessors=$TESTTMP/debugprocessors.py
371
372 $ rm $HGRCPATH
373 $ mv $HGRCPATH.tmp $HGRCPATH
374
375 $ hg clone $TESTTMP/client $TESTTMP/nonlfs -qr 0 --config extensions.lfs=
376 $ cat >> $TESTTMP/nonlfs/.hg/hgrc <<EOF
377 > [extensions]
378 > lfs = !
379 > EOF
380
381 >>> from __future__ import absolute_import, print_function
382 >>> from hgclient import check, readchannel, runcommand
383 >>> @check
384 ... def checkflags2(server):
385 ... readchannel(server)
386 ... print('')
387 ... print('# LFS enabled- both lfs and non-lfs revlogs have 0x2000 flag')
388 ... runcommand(server, ['debugprocessors', 'lfs.bin', '-R',
389 ... '../server'])
390 ... runcommand(server, ['debugprocessors', 'nonlfs2.txt', '-R',
391 ... '../server'])
392 ... runcommand(server, ['config', 'extensions', '--cwd',
393 ... '../server'])
394 ...
395 ... print('\n# LFS enabled without requirement- revlogs have 0x2000 flag')
396 ... runcommand(server, ['debugprocessors', 'nonlfs3.txt'])
397 ... runcommand(server, ['config', 'extensions'])
398 ...
399 ... print("\n# LFS disabled locally- revlogs don't have 0x2000 flag")
400 ... runcommand(server, ['debugprocessors', 'nonlfs.txt', '-R',
401 ... '../nonlfs'])
402 ... runcommand(server, ['config', 'extensions', '--cwd',
403 ... '../nonlfs'])
404
405 # LFS enabled- both lfs and non-lfs revlogs have 0x2000 flag
406 *** runcommand debugprocessors lfs.bin -R ../server
407 registered processor '0x8000'
408 registered processor '0x2000'
409 *** runcommand debugprocessors nonlfs2.txt -R ../server
410 registered processor '0x8000'
411 registered processor '0x2000'
412 *** runcommand config extensions --cwd ../server
413 extensions.debugprocessors=$TESTTMP/debugprocessors.py
414 extensions.lfs=
415
416 # LFS enabled without requirement- revlogs have 0x2000 flag
417 *** runcommand debugprocessors nonlfs3.txt
418 registered processor '0x8000'
419 registered processor '0x2000'
420 *** runcommand config extensions
421 extensions.debugprocessors=$TESTTMP/debugprocessors.py
422 extensions.lfs=
423
424 # LFS disabled locally- revlogs don't have 0x2000 flag
425 *** runcommand debugprocessors nonlfs.txt -R ../nonlfs
426 registered processor '0x8000'
427 *** runcommand config extensions --cwd ../nonlfs
428 extensions.debugprocessors=$TESTTMP/debugprocessors.py
429 extensions.lfs=!
430
310 431 --------------------------------------------------------------------------------
311 432 Case #6: client with lfs content and the extension enabled; server with
312 433 lfs content, and the extension enabled.
General Comments 0
You need to be logged in to leave comments. Login now