[PATCH] test: split test-largefile.t in multiple file

Siddharth Agarwal sid at less-broken.com
Fri May 16 19:52:46 CDT 2014


On 05/15/2014 11:36 PM, pierre-yves.david at ens-lyon.org wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1400216161 25200
> #      Thu May 15 21:56:01 2014 -0700
> # Node ID a11399582ebe4f270b762f51fdedf269cbc7719e
> # Parent  1ae3cd6f836c3c96ee3e9a872c8e966750910c2d
> test: split test-largefile.t in multiple file

This patch looks good -- the way I look at it is that it adds 
parallelism to the test suite. As Pierre-Yves pointed out, I queued this 
several hours ago but forgot to notify the list.



>
> The `test-largefiles.t` unified test is significantly longer (about 30%) than
> any other tests in the mercurial test suite. As a result, its is alway the last
> test my test runner is waiting for at the end of a run.
>
> In practice, this means that `test-largefile.t` is wasting half a minute of my
> life every times I'm running the mercurial test suites. This probably mean more
> a few cumulated day by now.
>
> I've finally decided to split it up in multiple smaller tests to bring it back in
> reasonable length.
>
> This changeset extracts independent test cases in two files. One dedicated to
> wire protocole testing, and another one dedicated to all other tests that could
> be independently extracted.
>
> No test case were haltered in the making of this changeset.
>
> Various timing available below. All timing have been done on a with 90 jobs on a
> 64 cores machine. Similar result are shown on firefly (20 jobs on 12 core).
>
> General timing of the whole run
> --------------------------------
>
> We see a 25% real time improvement for no significant cpu time impact.
>
> Before split:
>
>      real   2m1.149s
>      user  58m4.662s
>      sys   11m28.563s
>
> After split:
>
>      real   1m31.977s
>      user  57m45.993s
>      sys   11m33.634s
>
>
> Last test to finish (using run-test.py --time)
> ----------------------------------------------
>
> test-largefile.t is now finishing at the same time than other slow tests.
>
> Before split:
>
>      Time      Test
>      119.280   test-largefiles.t
>       93.995   test-mq.t
>       89.897   test-subrepo.t
>       86.920   test-glog.t
>       85.508   test-rename-merge2.t
>       83.594   test-revset.t
>       79.824   test-keyword.t
>       78.077   test-mq-header-date.t
>
> After split:
>
>      Time      Test
>      90.414   test-mq.t
>      88.594   test-largefiles.t
>      85.363   test-subrepo.t
>      81.059   test-glog.t
>      78.927   test-rename-merge2.t
>      78.021   test-revset.t
>      77.777   test-command-template.t
>
>
>
> Timing of largefile test themself
> -----------------------------------
>
> Running only tests prefixed with "test-largefiles".
> No significant change in cumulated time.
>
> Before:
>
>      Time     Test
>      58.673   test-largefiles.t
>       2.931   test-largefiles-cache.t
>       0.583   test-largefiles-small-disk.t
>
> After:
>
>      Time     Test
>      31.754   test-largefiles.t
>      17.460   test-largefiles-misc.t
>       8.888   test-largefiles-wireproto.t
>       2.864   test-largefiles-cache.t
>       0.580   test-largefiles-small-disk.t
>
> diff --git a/tests/test-largefiles-misc.t b/tests/test-largefiles-misc.t
> new file mode 100644
> --- /dev/null
> +++ b/tests/test-largefiles-misc.t
> @@ -0,0 +1,696 @@
> +This file contains testcases that tend to be related to special cases or less
> +common commands affecting largefile.
> +
> +Each sections should be independent of each others.
> +
> +  $ USERCACHE="$TESTTMP/cache"; export USERCACHE
> +  $ mkdir "${USERCACHE}"
> +  $ cat >> $HGRCPATH <<EOF
> +  > [extensions]
> +  > largefiles=
> +  > purge=
> +  > rebase=
> +  > transplant=
> +  > [phases]
> +  > publish=False
> +  > [largefiles]
> +  > minsize=2
> +  > patterns=glob:**.dat
> +  > usercache=${USERCACHE}
> +  > [hooks]
> +  > precommit=sh -c "echo \\"Invoking status precommit hook\\"; hg status"
> +  > EOF
> +
> +
> +
> +Test copies and moves from a directory other than root (issue3516)
> +=========================================================================
> +
> +  $ hg init lf_cpmv
> +  $ cd lf_cpmv
> +  $ mkdir dira
> +  $ mkdir dira/dirb
> +  $ touch dira/dirb/largefile
> +  $ hg add --large dira/dirb/largefile
> +  $ hg commit -m "added"
> +  Invoking status precommit hook
> +  A dira/dirb/largefile
> +  $ cd dira
> +  $ hg cp dirb/largefile foo/largefile
> +  $ hg ci -m "deep copy"
> +  Invoking status precommit hook
> +  A dira/foo/largefile
> +  $ find . | sort
> +  .
> +  ./dirb
> +  ./dirb/largefile
> +  ./foo
> +  ./foo/largefile
> +  $ hg mv foo/largefile baz/largefile
> +  $ hg ci -m "moved"
> +  Invoking status precommit hook
> +  A dira/baz/largefile
> +  R dira/foo/largefile
> +  $ find . | sort
> +  .
> +  ./baz
> +  ./baz/largefile
> +  ./dirb
> +  ./dirb/largefile
> +  $ cd ..
> +  $ hg mv dira dirc
> +  moving .hglf/dira/baz/largefile to .hglf/dirc/baz/largefile (glob)
> +  moving .hglf/dira/dirb/largefile to .hglf/dirc/dirb/largefile (glob)
> +  $ find * | sort
> +  dirc
> +  dirc/baz
> +  dirc/baz/largefile
> +  dirc/dirb
> +  dirc/dirb/largefile
> +  $ hg up -qC
> +  $ cd ..
> +
> +Clone a local repository owned by another user
> +===================================================
> +
> +#if unix-permissions
> +
> +We have to simulate that here by setting $HOME and removing write permissions
> +  $ ORIGHOME="$HOME"
> +  $ mkdir alice
> +  $ HOME="`pwd`/alice"
> +  $ cd alice
> +  $ hg init pubrepo
> +  $ cd pubrepo
> +  $ dd if=/dev/zero bs=1k count=11k > a-large-file 2> /dev/null
> +  $ hg add --large a-large-file
> +  $ hg commit -m "Add a large file"
> +  Invoking status precommit hook
> +  A a-large-file
> +  $ cd ..
> +  $ chmod -R a-w pubrepo
> +  $ cd ..
> +  $ mkdir bob
> +  $ HOME="`pwd`/bob"
> +  $ cd bob
> +  $ hg clone --pull ../alice/pubrepo pubrepo
> +  requesting all changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 1 changesets with 1 changes to 1 files
> +  updating to branch default
> +  getting changed largefiles
> +  1 largefiles updated, 0 removed
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ cd ..
> +  $ chmod -R u+w alice/pubrepo
> +  $ HOME="$ORIGHOME"
> +
> +#endif
> +
> +
> +Symlink to a large largefile should behave the same as a symlink to a normal file
> +=====================================================================================
> +
> +#if symlink
> +
> +  $ hg init largesymlink
> +  $ cd largesymlink
> +  $ dd if=/dev/zero bs=1k count=10k of=largefile 2>/dev/null
> +  $ hg add --large largefile
> +  $ hg commit -m "commit a large file"
> +  Invoking status precommit hook
> +  A largefile
> +  $ ln -s largefile largelink
> +  $ hg add largelink
> +  $ hg commit -m "commit a large symlink"
> +  Invoking status precommit hook
> +  A largelink
> +  $ rm -f largelink
> +  $ hg up >/dev/null
> +  $ test -f largelink
> +  [1]
> +  $ test -L largelink
> +  [1]
> +  $ rm -f largelink # make next part of the test independent of the previous
> +  $ hg up -C >/dev/null
> +  $ test -f largelink
> +  $ test -L largelink
> +  $ cd ..
> +
> +#endif
> +
> +
> +test for pattern matching on 'hg status':
> +==============================================
> +
> +
> +to boost performance, largefiles checks whether specified patterns are
> +related to largefiles in working directory (NOT to STANDIN) or not.
> +
> +  $ hg init statusmatch
> +  $ cd statusmatch
> +
> +  $ mkdir -p a/b/c/d
> +  $ echo normal > a/b/c/d/e.normal.txt
> +  $ hg add a/b/c/d/e.normal.txt
> +  $ echo large > a/b/c/d/e.large.txt
> +  $ hg add --large a/b/c/d/e.large.txt
> +  $ mkdir -p a/b/c/x
> +  $ echo normal > a/b/c/x/y.normal.txt
> +  $ hg add a/b/c/x/y.normal.txt
> +  $ hg commit -m 'add files'
> +  Invoking status precommit hook
> +  A a/b/c/d/e.large.txt
> +  A a/b/c/d/e.normal.txt
> +  A a/b/c/x/y.normal.txt
> +
> +(1) no pattern: no performance boost
> +  $ hg status -A
> +  C a/b/c/d/e.large.txt
> +  C a/b/c/d/e.normal.txt
> +  C a/b/c/x/y.normal.txt
> +
> +(2) pattern not related to largefiles: performance boost
> +  $ hg status -A a/b/c/x
> +  C a/b/c/x/y.normal.txt
> +
> +(3) pattern related to largefiles: no performance boost
> +  $ hg status -A a/b/c/d
> +  C a/b/c/d/e.large.txt
> +  C a/b/c/d/e.normal.txt
> +
> +(4) pattern related to STANDIN (not to largefiles): performance boost
> +  $ hg status -A .hglf/a
> +  C .hglf/a/b/c/d/e.large.txt
> +
> +(5) mixed case: no performance boost
> +  $ hg status -A a/b/c/x a/b/c/d
> +  C a/b/c/d/e.large.txt
> +  C a/b/c/d/e.normal.txt
> +  C a/b/c/x/y.normal.txt
> +
> +verify that largefiles doesn't break filesets
> +
> +  $ hg log --rev . --exclude "set:binary()"
> +  changeset:   0:41bd42f10efa
> +  tag:         tip
> +  user:        test
> +  date:        Thu Jan 01 00:00:00 1970 +0000
> +  summary:     add files
> +
> +verify that large files in subrepos handled properly
> +  $ hg init subrepo
> +  $ echo "subrepo = subrepo" > .hgsub
> +  $ hg add .hgsub
> +  $ hg ci -m "add subrepo"
> +  Invoking status precommit hook
> +  A .hgsub
> +  ? .hgsubstate
> +  $ echo "rev 1" > subrepo/large.txt
> +  $ hg -R subrepo add --large subrepo/large.txt
> +  $ hg sum
> +  parent: 1:8ee150ea2e9c tip
> +   add subrepo
> +  branch: default
> +  commit: 1 subrepos
> +  update: (current)
> +  $ hg st
> +  $ hg st -S
> +  A subrepo/large.txt
> +  $ hg ci -S -m "commit top repo"
> +  committing subrepository subrepo
> +  Invoking status precommit hook
> +  A large.txt
> +  Invoking status precommit hook
> +  M .hgsubstate
> +# No differences
> +  $ hg st -S
> +  $ hg sum
> +  parent: 2:ce4cd0c527a6 tip
> +   commit top repo
> +  branch: default
> +  commit: (clean)
> +  update: (current)
> +  $ echo "rev 2" > subrepo/large.txt
> +  $ hg st -S
> +  M subrepo/large.txt
> +  $ hg sum
> +  parent: 2:ce4cd0c527a6 tip
> +   commit top repo
> +  branch: default
> +  commit: 1 subrepos
> +  update: (current)
> +  $ hg ci -m "this commit should fail without -S"
> +  abort: uncommitted changes in subrepo subrepo
> +  (use --subrepos for recursive commit)
> +  [255]
> +
> +Add a normal file to the subrepo, then test archiving
> +
> +  $ echo 'normal file' > subrepo/normal.txt
> +  $ hg -R subrepo add subrepo/normal.txt
> +
> +Lock in subrepo, otherwise the change isn't archived
> +
> +  $ hg ci -S -m "add normal file to top level"
> +  committing subrepository subrepo
> +  Invoking status precommit hook
> +  M large.txt
> +  A normal.txt
> +  Invoking status precommit hook
> +  M .hgsubstate
> +  $ hg archive -S ../lf_subrepo_archive
> +  $ find ../lf_subrepo_archive | sort
> +  ../lf_subrepo_archive
> +  ../lf_subrepo_archive/.hg_archival.txt
> +  ../lf_subrepo_archive/.hgsub
> +  ../lf_subrepo_archive/.hgsubstate
> +  ../lf_subrepo_archive/a
> +  ../lf_subrepo_archive/a/b
> +  ../lf_subrepo_archive/a/b/c
> +  ../lf_subrepo_archive/a/b/c/d
> +  ../lf_subrepo_archive/a/b/c/d/e.large.txt
> +  ../lf_subrepo_archive/a/b/c/d/e.normal.txt
> +  ../lf_subrepo_archive/a/b/c/x
> +  ../lf_subrepo_archive/a/b/c/x/y.normal.txt
> +  ../lf_subrepo_archive/subrepo
> +  ../lf_subrepo_archive/subrepo/large.txt
> +  ../lf_subrepo_archive/subrepo/normal.txt
> +
> +Test update with subrepos.
> +
> +  $ hg update 0
> +  getting changed largefiles
> +  0 largefiles updated, 1 removed
> +  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
> +  $ hg status -S
> +  $ hg update tip
> +  getting changed largefiles
> +  1 largefiles updated, 0 removed
> +  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ hg status -S
> +# modify a large file
> +  $ echo "modified" > subrepo/large.txt
> +  $ hg st -S
> +  M subrepo/large.txt
> +# update -C should revert the change.
> +  $ hg update -C
> +  getting changed largefiles
> +  1 largefiles updated, 0 removed
> +  getting changed largefiles
> +  0 largefiles updated, 0 removed
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ hg status -S
> +
> +Test archiving a revision that references a subrepo that is not yet
> +cloned (see test-subrepo-recursion.t):
> +
> +  $ hg clone -U . ../empty
> +  $ cd ../empty
> +  $ hg archive --subrepos -r tip ../archive.tar.gz
> +  cloning subrepo subrepo from $TESTTMP/statusmatch/subrepo
> +  $ cd ..
> +
> +
> +
> +
> +
> +
> +Test addremove, forget and others
> +==============================================
> +
> +Test that addremove picks up largefiles prior to the initial commit (issue3541)
> +
> +  $ hg init addrm2
> +  $ cd addrm2
> +  $ touch large.dat
> +  $ touch large2.dat
> +  $ touch normal
> +  $ hg add --large large.dat
> +  $ hg addremove -v
> +  adding large2.dat as a largefile
> +  adding normal
> +
> +Test that forgetting all largefiles reverts to islfilesrepo() == False
> +(addremove will add *.dat as normal files now)
> +  $ hg forget large.dat
> +  $ hg forget large2.dat
> +  $ hg addremove -v
> +  adding large.dat
> +  adding large2.dat
> +
> +Test commit's addremove option prior to the first commit
> +  $ hg forget large.dat
> +  $ hg forget large2.dat
> +  $ hg add --large large.dat
> +  $ hg ci -Am "commit"
> +  adding large2.dat as a largefile
> +  Invoking status precommit hook
> +  A large.dat
> +  A large2.dat
> +  A normal
> +  $ find .hglf | sort
> +  .hglf
> +  .hglf/large.dat
> +  .hglf/large2.dat
> +
> +Test actions on largefiles using relative paths from subdir
> +
> +  $ mkdir sub
> +  $ cd sub
> +  $ echo anotherlarge > anotherlarge
> +  $ hg add --large anotherlarge
> +  $ hg st
> +  A sub/anotherlarge
> +  $ hg st anotherlarge
> +  A anotherlarge
> +  $ hg commit -m anotherlarge anotherlarge
> +  Invoking status precommit hook
> +  A sub/anotherlarge
> +  $ hg log anotherlarge
> +  changeset:   1:9627a577c5e9
> +  tag:         tip
> +  user:        test
> +  date:        Thu Jan 01 00:00:00 1970 +0000
> +  summary:     anotherlarge
> +
> +  $ hg log -G anotherlarge
> +  @  changeset:   1:9627a577c5e9
> +  |  tag:         tip
> +  |  user:        test
> +  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  summary:     anotherlarge
> +  |
> +  $ echo more >> anotherlarge
> +  $ hg st .
> +  M anotherlarge
> +  $ hg cat anotherlarge
> +  anotherlarge
> +  $ hg revert anotherlarge
> +  $ hg st
> +  ? sub/anotherlarge.orig
> +  $ cd ..
> +
> +  $ cd ..
> +
> +Check error message while exchange
> +=========================================================
> +
> +issue3651: summary/outgoing with largefiles shows "no remote repo"
> +unexpectedly
> +
> +  $ mkdir issue3651
> +  $ cd issue3651
> +
> +  $ hg init src
> +  $ echo a > src/a
> +  $ hg -R src add --large src/a
> +  $ hg -R src commit -m '#0'
> +  Invoking status precommit hook
> +  A a
> +
> +check messages when no remote repository is specified:
> +"no remote repo" route for "hg outgoing --large" is not tested here,
> +because it can't be reproduced easily.
> +
> +  $ hg init clone1
> +  $ hg -R clone1 -q pull src
> +  $ hg -R clone1 -q update
> +  $ hg -R clone1 paths | grep default
> +  [1]
> +
> +  $ hg -R clone1 summary --large
> +  parent: 0:fc0bd45326d3 tip
> +   #0
> +  branch: default
> +  commit: (clean)
> +  update: (current)
> +  largefiles: (no remote repo)
> +
> +check messages when there is no files to upload:
> +
> +  $ hg -q clone src clone2
> +  $ hg -R clone2 paths | grep default
> +  default = $TESTTMP/issue3651/src (glob)
> +
> +  $ hg -R clone2 summary --large
> +  parent: 0:fc0bd45326d3 tip
> +   #0
> +  branch: default
> +  commit: (clean)
> +  update: (current)
> +  largefiles: (no files to upload)
> +  $ hg -R clone2 outgoing --large
> +  comparing with $TESTTMP/issue3651/src (glob)
> +  searching for changes
> +  no changes found
> +  largefiles: no files to upload
> +  [1]
> +
> +  $ hg -R clone2 outgoing --large --graph --template "{rev}"
> +  comparing with $TESTTMP/issue3651/src (glob)
> +  searching for changes
> +  no changes found
> +  largefiles: no files to upload
> +
> +check messages when there are files to upload:
> +
> +  $ echo b > clone2/b
> +  $ hg -R clone2 add --large clone2/b
> +  $ hg -R clone2 commit -m '#1'
> +  Invoking status precommit hook
> +  A b
> +  $ hg -R clone2 summary --large
> +  parent: 1:1acbe71ce432 tip
> +   #1
> +  branch: default
> +  commit: (clean)
> +  update: (current)
> +  largefiles: 1 to upload
> +  $ hg -R clone2 outgoing --large
> +  comparing with $TESTTMP/issue3651/src (glob)
> +  searching for changes
> +  changeset:   1:1acbe71ce432
> +  tag:         tip
> +  user:        test
> +  date:        Thu Jan 01 00:00:00 1970 +0000
> +  summary:     #1
> +
> +  largefiles to upload:
> +  b
> +
> +  $ hg -R clone2 outgoing --large --graph --template "{rev}"
> +  comparing with $TESTTMP/issue3651/src
> +  searching for changes
> +  @  1
> +
> +  largefiles to upload:
> +  b
> +
> +
> +  $ cd ..
> +
> +merge action 'd' for 'local renamed directory to d2/g' which has no filename
> +==================================================================================
> +
> +  $ hg init merge-action
> +  $ cd merge-action
> +  $ touch l
> +  $ hg add --large l
> +  $ mkdir d1
> +  $ touch d1/f
> +  $ hg ci -Aqm0
> +  Invoking status precommit hook
> +  A d1/f
> +  A l
> +  $ echo > d1/f
> +  $ touch d1/g
> +  $ hg ci -Aqm1
> +  Invoking status precommit hook
> +  M d1/f
> +  A d1/g
> +  $ hg up -qr0
> +  $ hg mv d1 d2
> +  moving d1/f to d2/f (glob)
> +  $ hg ci -qm2
> +  Invoking status precommit hook
> +  A d2/f
> +  R d1/f
> +  $ hg merge
> +  merging d2/f and d1/f to d2/f
> +  1 files updated, 1 files merged, 0 files removed, 0 files unresolved
> +  (branch merge, don't forget to commit)
> +  getting changed largefiles
> +  0 largefiles updated, 0 removed
> +  $ cd ..
> +
> +
> +Merge conflicts:
> +=====================
> +
> +  $ hg init merge
> +  $ cd merge
> +  $ echo 0 > f-different
> +  $ echo 0 > f-same
> +  $ echo 0 > f-unchanged-1
> +  $ echo 0 > f-unchanged-2
> +  $ hg add --large *
> +  $ hg ci -m0
> +  Invoking status precommit hook
> +  A f-different
> +  A f-same
> +  A f-unchanged-1
> +  A f-unchanged-2
> +  $ echo tmp1 > f-unchanged-1
> +  $ echo tmp1 > f-unchanged-2
> +  $ echo tmp1 > f-same
> +  $ hg ci -m1
> +  Invoking status precommit hook
> +  M f-same
> +  M f-unchanged-1
> +  M f-unchanged-2
> +  $ echo 2 > f-different
> +  $ echo 0 > f-unchanged-1
> +  $ echo 1 > f-unchanged-2
> +  $ echo 1 > f-same
> +  $ hg ci -m2
> +  Invoking status precommit hook
> +  M f-different
> +  M f-same
> +  M f-unchanged-1
> +  M f-unchanged-2
> +  $ hg up -qr0
> +  $ echo tmp2 > f-unchanged-1
> +  $ echo tmp2 > f-unchanged-2
> +  $ echo tmp2 > f-same
> +  $ hg ci -m3
> +  Invoking status precommit hook
> +  M f-same
> +  M f-unchanged-1
> +  M f-unchanged-2
> +  created new head
> +  $ echo 1 > f-different
> +  $ echo 1 > f-unchanged-1
> +  $ echo 0 > f-unchanged-2
> +  $ echo 1 > f-same
> +  $ hg ci -m4
> +  Invoking status precommit hook
> +  M f-different
> +  M f-same
> +  M f-unchanged-1
> +  M f-unchanged-2
> +  $ hg merge
> +  largefile f-different has a merge conflict
> +  ancestor was 09d2af8dd22201dd8d48e5dcfcaed281ff9422c7
> +  keep (l)ocal e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e or
> +  take (o)ther 7448d8798a4380162d4b56f9b452e2f6f9e24e7a? l
> +  0 files updated, 4 files merged, 0 files removed, 0 files unresolved
> +  (branch merge, don't forget to commit)
> +  getting changed largefiles
> +  1 largefiles updated, 0 removed
> +  $ cat f-different
> +  1
> +  $ cat f-same
> +  1
> +  $ cat f-unchanged-1
> +  1
> +  $ cat f-unchanged-2
> +  1
> +  $ cd ..
> +
> +Test largefile insulation (do not enabled a side effect
> +========================================================
> +
> +Check whether "largefiles" feature is supported only in repositories
> +enabling largefiles extension.
> +
> +  $ mkdir individualenabling
> +  $ cd individualenabling
> +
> +  $ hg init enabledlocally
> +  $ echo large > enabledlocally/large
> +  $ hg -R enabledlocally add --large enabledlocally/large
> +  $ hg -R enabledlocally commit -m '#0'
> +  Invoking status precommit hook
> +  A large
> +
> +  $ hg init notenabledlocally
> +  $ echo large > notenabledlocally/large
> +  $ hg -R notenabledlocally add --large notenabledlocally/large
> +  $ hg -R notenabledlocally commit -m '#0'
> +  Invoking status precommit hook
> +  A large
> +
> +  $ cat >> $HGRCPATH <<EOF
> +  > [extensions]
> +  > # disable globally
> +  > largefiles=!
> +  > EOF
> +  $ cat >> enabledlocally/.hg/hgrc <<EOF
> +  > [extensions]
> +  > # enable locally
> +  > largefiles=
> +  > EOF
> +  $ hg -R enabledlocally root
> +  $TESTTMP/individualenabling/enabledlocally (glob)
> +  $ hg -R notenabledlocally root
> +  abort: repository requires features unknown to this Mercurial: largefiles!
> +  (see http://mercurial.selenic.com/wiki/MissingRequirement for more information)
> +  [255]
> +
> +  $ hg init push-dst
> +  $ hg -R enabledlocally push push-dst
> +  pushing to push-dst
> +  abort: required features are not supported in the destination: largefiles
> +  [255]
> +
> +  $ hg init pull-src
> +  $ hg -R pull-src pull enabledlocally
> +  pulling from enabledlocally
> +  abort: required features are not supported in the destination: largefiles
> +  [255]
> +
> +  $ hg clone enabledlocally clone-dst
> +  abort: repository requires features unknown to this Mercurial: largefiles!
> +  (see http://mercurial.selenic.com/wiki/MissingRequirement for more information)
> +  [255]
> +  $ test -d clone-dst
> +  [1]
> +  $ hg clone --pull enabledlocally clone-pull-dst
> +  abort: required features are not supported in the destination: largefiles
> +  [255]
> +  $ test -d clone-pull-dst
> +  [1]
> +
> +#if serve
> +
> +Test largefiles specific peer setup, when largefiles is enabled
> +locally (issue4109)
> +
> +  $ hg showconfig extensions | grep largefiles
> +  extensions.largefiles=!
> +  $ mkdir -p $TESTTMP/individualenabling/usercache
> +
> +  $ hg serve -R enabledlocally -d -p $HGPORT --pid-file hg.pid
> +  $ cat hg.pid >> $DAEMON_PIDS
> +
> +  $ hg init pull-dst
> +  $ cat > pull-dst/.hg/hgrc <<EOF
> +  > [extensions]
> +  > # enable locally
> +  > largefiles=
> +  > [largefiles]
> +  > # ignore system cache to force largefiles specific wire proto access
> +  > usercache=$TESTTMP/individualenabling/usercache
> +  > EOF
> +  $ hg -R pull-dst -q pull -u http://localhost:$HGPORT
> +
> +  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
> +#endif
> +
> +  $ cd ..
> +
> +
> +
> diff --git a/tests/test-largefiles-wireproto.t b/tests/test-largefiles-wireproto.t
> new file mode 100644
> --- /dev/null
> +++ b/tests/test-largefiles-wireproto.t
> @@ -0,0 +1,293 @@
> +This file contains testcases that tend to be related to the wireprotocol part of
> +largefile.
> +
> +  $ USERCACHE="$TESTTMP/cache"; export USERCACHE
> +  $ mkdir "${USERCACHE}"
> +  $ cat >> $HGRCPATH <<EOF
> +  > [extensions]
> +  > largefiles=
> +  > purge=
> +  > rebase=
> +  > transplant=
> +  > [phases]
> +  > publish=False
> +  > [largefiles]
> +  > minsize=2
> +  > patterns=glob:**.dat
> +  > usercache=${USERCACHE}
> +  > [hooks]
> +  > precommit=sh -c "echo \\"Invoking status precommit hook\\"; hg status"
> +  > EOF
> +
> +
> +#if serve
> +vanilla clients not locked out from largefiles servers on vanilla repos
> +  $ mkdir r1
> +  $ cd r1
> +  $ hg init
> +  $ echo c1 > f1
> +  $ hg add f1
> +  $ hg commit -m "m1"
> +  Invoking status precommit hook
> +  A f1
> +  $ cd ..
> +  $ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid
> +  $ cat hg.pid >> $DAEMON_PIDS
> +  $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2
> +  requesting all changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 1 changesets with 1 changes to 1 files
> +  updating to branch default
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +
> +largefiles clients still work with vanilla servers
> +  $ hg --config extensions.largefiles=! serve -R r1 -d -p $HGPORT1 --pid-file hg.pid
> +  $ cat hg.pid >> $DAEMON_PIDS
> +  $ hg clone http://localhost:$HGPORT1 r3
> +  requesting all changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 1 changesets with 1 changes to 1 files
> +  updating to branch default
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +#endif
> +
> +vanilla clients locked out from largefiles http repos
> +  $ mkdir r4
> +  $ cd r4
> +  $ hg init
> +  $ echo c1 > f1
> +  $ hg add --large f1
> +  $ hg commit -m "m1"
> +  Invoking status precommit hook
> +  A f1
> +  $ cd ..
> +
> +largefiles can be pushed locally (issue3583)
> +  $ hg init dest
> +  $ cd r4
> +  $ hg outgoing ../dest
> +  comparing with ../dest
> +  searching for changes
> +  changeset:   0:639881c12b4c
> +  tag:         tip
> +  user:        test
> +  date:        Thu Jan 01 00:00:00 1970 +0000
> +  summary:     m1
> +
> +  $ hg push ../dest
> +  pushing to ../dest
> +  searching for changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 1 changesets with 1 changes to 1 files
> +
> +exit code with nothing outgoing (issue3611)
> +  $ hg outgoing ../dest
> +  comparing with ../dest
> +  searching for changes
> +  no changes found
> +  [1]
> +  $ cd ..
> +
> +#if serve
> +  $ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid
> +  $ cat hg.pid >> $DAEMON_PIDS
> +  $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5
> +  abort: remote error:
> +
> +  This repository uses the largefiles extension.
> +
> +  Please enable it in your Mercurial config file.
> +  [255]
> +
> +used all HGPORTs, kill all daemons
> +  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
> +#endif
> +
> +vanilla clients locked out from largefiles ssh repos
> +  $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5
> +  abort: remote error:
> +
> +  This repository uses the largefiles extension.
> +
> +  Please enable it in your Mercurial config file.
> +  [255]
> +
> +#if serve
> +
> +largefiles clients refuse to push largefiles repos to vanilla servers
> +  $ mkdir r6
> +  $ cd r6
> +  $ hg init
> +  $ echo c1 > f1
> +  $ hg add f1
> +  $ hg commit -m "m1"
> +  Invoking status precommit hook
> +  A f1
> +  $ cat >> .hg/hgrc <<!
> +  > [web]
> +  > push_ssl = false
> +  > allow_push = *
> +  > !
> +  $ cd ..
> +  $ hg clone r6 r7
> +  updating to branch default
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ cd r7
> +  $ echo c2 > f2
> +  $ hg add --large f2
> +  $ hg commit -m "m2"
> +  Invoking status precommit hook
> +  A f2
> +  $ hg --config extensions.largefiles=! -R ../r6 serve -d -p $HGPORT --pid-file ../hg.pid
> +  $ cat ../hg.pid >> $DAEMON_PIDS
> +  $ hg push http://localhost:$HGPORT
> +  pushing to http://localhost:$HGPORT/
> +  searching for changes
> +  abort: http://localhost:$HGPORT/ does not appear to be a largefile store
> +  [255]
> +  $ cd ..
> +
> +putlfile errors are shown (issue3123)
> +Corrupt the cached largefile in r7 and move it out of the servers usercache
> +  $ mv r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 .
> +  $ echo 'client side corruption' > r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
> +  $ rm "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8"
> +  $ hg init empty
> +  $ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \
> +  >   --config 'web.allow_push=*' --config web.push_ssl=False
> +  $ cat hg.pid >> $DAEMON_PIDS
> +  $ hg push -R r7 http://localhost:$HGPORT1
> +  pushing to http://localhost:$HGPORT1/
> +  searching for changes
> +  remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash
> +  abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob)
> +  [255]
> +  $ mv 4cdac4d8b084d0b599525cf732437fb337d422a8 r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
> +Push of file that exists on server but is corrupted - magic healing would be nice ... but too magic
> +  $ echo "server side corruption" > empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
> +  $ hg push -R r7 http://localhost:$HGPORT1
> +  pushing to http://localhost:$HGPORT1/
> +  searching for changes
> +  remote: adding changesets
> +  remote: adding manifests
> +  remote: adding file changes
> +  remote: added 2 changesets with 2 changes to 2 files
> +  $ cat empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
> +  server side corruption
> +  $ rm -rf empty
> +
> +Push a largefiles repository to a served empty repository
> +  $ hg init r8
> +  $ echo c3 > r8/f1
> +  $ hg add --large r8/f1 -R r8
> +  $ hg commit -m "m1" -R r8
> +  Invoking status precommit hook
> +  A f1
> +  $ hg init empty
> +  $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
> +  >   --config 'web.allow_push=*' --config web.push_ssl=False
> +  $ cat hg.pid >> $DAEMON_PIDS
> +  $ rm "${USERCACHE}"/*
> +  $ hg push -R r8 http://localhost:$HGPORT2/#default
> +  pushing to http://localhost:$HGPORT2/
> +  searching for changes
> +  remote: adding changesets
> +  remote: adding manifests
> +  remote: adding file changes
> +  remote: added 1 changesets with 1 changes to 1 files
> +  $ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
> +  $ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
> +
> +Clone over http, no largefiles pulled on clone.
> +
> +  $ hg clone http://localhost:$HGPORT2/#default http-clone -U
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 1 changesets with 1 changes to 1 files
> +
> +test 'verify' with remotestore:
> +
> +  $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
> +  $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
> +  $ hg -R http-clone verify --large --lfa
> +  checking changesets
> +  checking manifests
> +  crosschecking files in changesets and manifests
> +  checking files
> +  1 files, 1 changesets, 1 total revisions
> +  searching 1 changesets for largefiles
> +  changeset 0:cf03e5bb9936: f1 missing
> +  verified existence of 1 revisions of 1 largefiles
> +  [1]
> +  $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
> +  $ hg -R http-clone -q verify --large --lfa
> +
> +largefiles pulled on update - a largefile missing on the server:
> +  $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
> +  $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
> +  getting changed largefiles
> +  f1: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 not available from http://localhost:$HGPORT2/
> +  0 largefiles updated, 0 removed
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ hg -R http-clone st
> +  ! f1
> +  $ hg -R http-clone up -Cqr null
> +
> +largefiles pulled on update - a largefile corrupted on the server:
> +  $ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
> +  $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
> +  getting changed largefiles
> +  f1: data corruption (expected 02a439e5c31c526465ab1a0ca1f431f76b827b90, got 6a7bb2556144babe3899b25e5428123735bb1e27)
> +  0 largefiles updated, 0 removed
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ hg -R http-clone st
> +  ! f1
> +  $ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
> +  $ [ ! -f http-clone/f1 ]
> +  $ [ ! -f http-clone-usercache ]
> +  $ hg -R http-clone verify --large --lfc
> +  checking changesets
> +  checking manifests
> +  crosschecking files in changesets and manifests
> +  checking files
> +  1 files, 1 changesets, 1 total revisions
> +  searching 1 changesets for largefiles
> +  verified contents of 1 revisions of 1 largefiles
> +  $ hg -R http-clone up -Cqr null
> +
> +largefiles pulled on update - no server side problems:
> +  $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
> +  $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache
> +  resolving manifests
> +   branchmerge: False, force: False, partial: False
> +   ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936
> +   .hglf/f1: remote created -> g
> +  getting .hglf/f1
> +  updating: .hglf/f1 1/1 files (100.00%)
> +  getting changed largefiles
> +  using http://localhost:$HGPORT2/
> +  sending capabilities command
> +  sending batch command
> +  getting largefiles: 0/1 lfile (0.00%)
> +  getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90
> +  sending getlfile command
> +  found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store
> +  1 largefiles updated, 0 removed
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +
> +  $ ls http-clone-usercache/*
> +  http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
> +
> +  $ rm -rf empty http-clone*
> +
> +used all HGPORTs, kill all daemons
> +  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
> +
> +#endif
> diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t
> --- a/tests/test-largefiles.t
> +++ b/tests/test-largefiles.t
> @@ -1,5 +1,10 @@
> +This file used to contains all largefile tests.
> +Do not add any new tests in this file as it his already far too long to run.
> +
> +It contains all the testing of the basic concepts of large file in a single block.
> +
>     $ USERCACHE="$TESTTMP/cache"; export USERCACHE
>     $ mkdir "${USERCACHE}"
>     $ cat >> $HGRCPATH <<EOF
>     > [extensions]
>     > largefiles=
> @@ -178,56 +183,10 @@ Test moving largefiles and verify that n
>     $ cat sub/normal4
>     normal22
>     $ cat sub/large4
>     large22
>   
> -Test copies and moves from a directory other than root (issue3516)
> -
> -  $ cd ..
> -  $ hg init lf_cpmv
> -  $ cd lf_cpmv
> -  $ mkdir dira
> -  $ mkdir dira/dirb
> -  $ touch dira/dirb/largefile
> -  $ hg add --large dira/dirb/largefile
> -  $ hg commit -m "added"
> -  Invoking status precommit hook
> -  A dira/dirb/largefile
> -  $ cd dira
> -  $ hg cp dirb/largefile foo/largefile
> -  $ hg ci -m "deep copy"
> -  Invoking status precommit hook
> -  A dira/foo/largefile
> -  $ find . | sort
> -  .
> -  ./dirb
> -  ./dirb/largefile
> -  ./foo
> -  ./foo/largefile
> -  $ hg mv foo/largefile baz/largefile
> -  $ hg ci -m "moved"
> -  Invoking status precommit hook
> -  A dira/baz/largefile
> -  R dira/foo/largefile
> -  $ find . | sort
> -  .
> -  ./baz
> -  ./baz/largefile
> -  ./dirb
> -  ./dirb/largefile
> -  $ cd ..
> -  $ hg mv dira dirc
> -  moving .hglf/dira/baz/largefile to .hglf/dirc/baz/largefile (glob)
> -  moving .hglf/dira/dirb/largefile to .hglf/dirc/dirb/largefile (glob)
> -  $ find * | sort
> -  dirc
> -  dirc/baz
> -  dirc/baz/largefile
> -  dirc/dirb
> -  dirc/dirb/largefile
> -  $ hg up -qC
> -  $ cd ../a
>   
>   #if serve
>   Test display of largefiles in hgweb
>   
>     $ hg serve -d -p $HGPORT --pid-file ../hg.pid
> @@ -1671,875 +1630,7 @@ Test --normal flag
>     $ hg add --normal new-largefile
>     new-largefile: up to 69 MB of RAM may be required to manage this file
>     (use 'hg revert new-largefile' to cancel the pending addition)
>     $ cd ..
>   
> -#if serve
> -vanilla clients not locked out from largefiles servers on vanilla repos
> -  $ mkdir r1
> -  $ cd r1
> -  $ hg init
> -  $ echo c1 > f1
> -  $ hg add f1
> -  $ hg commit -m "m1"
> -  Invoking status precommit hook
> -  A f1
> -  $ cd ..
> -  $ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid
> -  $ cat hg.pid >> $DAEMON_PIDS
> -  $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2
> -  requesting all changes
> -  adding changesets
> -  adding manifests
> -  adding file changes
> -  added 1 changesets with 1 changes to 1 files
> -  updating to branch default
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   
> -largefiles clients still work with vanilla servers
> -  $ hg --config extensions.largefiles=! serve -R r1 -d -p $HGPORT1 --pid-file hg.pid
> -  $ cat hg.pid >> $DAEMON_PIDS
> -  $ hg clone http://localhost:$HGPORT1 r3
> -  requesting all changes
> -  adding changesets
> -  adding manifests
> -  adding file changes
> -  added 1 changesets with 1 changes to 1 files
> -  updating to branch default
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -#endif
>   
> -
> -vanilla clients locked out from largefiles http repos
> -  $ mkdir r4
> -  $ cd r4
> -  $ hg init
> -  $ echo c1 > f1
> -  $ hg add --large f1
> -  $ hg commit -m "m1"
> -  Invoking status precommit hook
> -  A f1
> -  $ cd ..
> -
> -largefiles can be pushed locally (issue3583)
> -  $ hg init dest
> -  $ cd r4
> -  $ hg outgoing ../dest
> -  comparing with ../dest
> -  searching for changes
> -  changeset:   0:639881c12b4c
> -  tag:         tip
> -  user:        test
> -  date:        Thu Jan 01 00:00:00 1970 +0000
> -  summary:     m1
> -
> -  $ hg push ../dest
> -  pushing to ../dest
> -  searching for changes
> -  adding changesets
> -  adding manifests
> -  adding file changes
> -  added 1 changesets with 1 changes to 1 files
> -
> -exit code with nothing outgoing (issue3611)
> -  $ hg outgoing ../dest
> -  comparing with ../dest
> -  searching for changes
> -  no changes found
> -  [1]
> -  $ cd ..
> -
> -#if serve
> -  $ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid
> -  $ cat hg.pid >> $DAEMON_PIDS
> -  $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5
> -  abort: remote error:
> -
> -  This repository uses the largefiles extension.
> -
> -  Please enable it in your Mercurial config file.
> -  [255]
> -
> -used all HGPORTs, kill all daemons
> -  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
> -#endif
> -
> -vanilla clients locked out from largefiles ssh repos
> -  $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5
> -  abort: remote error:
> -
> -  This repository uses the largefiles extension.
> -
> -  Please enable it in your Mercurial config file.
> -  [255]
> -
> -#if serve
> -
> -largefiles clients refuse to push largefiles repos to vanilla servers
> -  $ mkdir r6
> -  $ cd r6
> -  $ hg init
> -  $ echo c1 > f1
> -  $ hg add f1
> -  $ hg commit -m "m1"
> -  Invoking status precommit hook
> -  A f1
> -  $ cat >> .hg/hgrc <<!
> -  > [web]
> -  > push_ssl = false
> -  > allow_push = *
> -  > !
> -  $ cd ..
> -  $ hg clone r6 r7
> -  updating to branch default
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ cd r7
> -  $ echo c2 > f2
> -  $ hg add --large f2
> -  $ hg commit -m "m2"
> -  Invoking status precommit hook
> -  A f2
> -  $ hg --config extensions.largefiles=! -R ../r6 serve -d -p $HGPORT --pid-file ../hg.pid
> -  $ cat ../hg.pid >> $DAEMON_PIDS
> -  $ hg push http://localhost:$HGPORT
> -  pushing to http://localhost:$HGPORT/
> -  searching for changes
> -  abort: http://localhost:$HGPORT/ does not appear to be a largefile store
> -  [255]
> -  $ cd ..
> -
> -putlfile errors are shown (issue3123)
> -Corrupt the cached largefile in r7 and move it out of the servers usercache
> -  $ mv r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 .
> -  $ echo 'client side corruption' > r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
> -  $ rm "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8"
> -  $ hg init empty
> -  $ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \
> -  >   --config 'web.allow_push=*' --config web.push_ssl=False
> -  $ cat hg.pid >> $DAEMON_PIDS
> -  $ hg push -R r7 http://localhost:$HGPORT1
> -  pushing to http://localhost:$HGPORT1/
> -  searching for changes
> -  remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash
> -  abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob)
> -  [255]
> -  $ mv 4cdac4d8b084d0b599525cf732437fb337d422a8 r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
> -Push of file that exists on server but is corrupted - magic healing would be nice ... but too magic
> -  $ echo "server side corruption" > empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
> -  $ hg push -R r7 http://localhost:$HGPORT1
> -  pushing to http://localhost:$HGPORT1/
> -  searching for changes
> -  remote: adding changesets
> -  remote: adding manifests
> -  remote: adding file changes
> -  remote: added 2 changesets with 2 changes to 2 files
> -  $ cat empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
> -  server side corruption
> -  $ rm -rf empty
> -
> -Push a largefiles repository to a served empty repository
> -  $ hg init r8
> -  $ echo c3 > r8/f1
> -  $ hg add --large r8/f1 -R r8
> -  $ hg commit -m "m1" -R r8
> -  Invoking status precommit hook
> -  A f1
> -  $ hg init empty
> -  $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
> -  >   --config 'web.allow_push=*' --config web.push_ssl=False
> -  $ cat hg.pid >> $DAEMON_PIDS
> -  $ rm "${USERCACHE}"/*
> -  $ hg push -R r8 http://localhost:$HGPORT2/#default
> -  pushing to http://localhost:$HGPORT2/
> -  searching for changes
> -  remote: adding changesets
> -  remote: adding manifests
> -  remote: adding file changes
> -  remote: added 1 changesets with 1 changes to 1 files
> -  $ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
> -  $ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
> -
> -Clone over http, no largefiles pulled on clone.
> -
> -  $ hg clone http://localhost:$HGPORT2/#default http-clone -U
> -  adding changesets
> -  adding manifests
> -  adding file changes
> -  added 1 changesets with 1 changes to 1 files
> -
> -test 'verify' with remotestore:
> -
> -  $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
> -  $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
> -  $ hg -R http-clone verify --large --lfa
> -  checking changesets
> -  checking manifests
> -  crosschecking files in changesets and manifests
> -  checking files
> -  1 files, 1 changesets, 1 total revisions
> -  searching 1 changesets for largefiles
> -  changeset 0:cf03e5bb9936: f1 missing
> -  verified existence of 1 revisions of 1 largefiles
> -  [1]
> -  $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
> -  $ hg -R http-clone -q verify --large --lfa
> -
> -largefiles pulled on update - a largefile missing on the server:
> -  $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
> -  $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
> -  getting changed largefiles
> -  f1: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 not available from http://localhost:$HGPORT2/
> -  0 largefiles updated, 0 removed
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ hg -R http-clone st
> -  ! f1
> -  $ hg -R http-clone up -Cqr null
> -
> -largefiles pulled on update - a largefile corrupted on the server:
> -  $ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
> -  $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
> -  getting changed largefiles
> -  f1: data corruption (expected 02a439e5c31c526465ab1a0ca1f431f76b827b90, got 6a7bb2556144babe3899b25e5428123735bb1e27)
> -  0 largefiles updated, 0 removed
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ hg -R http-clone st
> -  ! f1
> -  $ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
> -  $ [ ! -f http-clone/f1 ]
> -  $ [ ! -f http-clone-usercache ]
> -  $ hg -R http-clone verify --large --lfc
> -  checking changesets
> -  checking manifests
> -  crosschecking files in changesets and manifests
> -  checking files
> -  1 files, 1 changesets, 1 total revisions
> -  searching 1 changesets for largefiles
> -  verified contents of 1 revisions of 1 largefiles
> -  $ hg -R http-clone up -Cqr null
> -
> -largefiles pulled on update - no server side problems:
> -  $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
> -  $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache
> -  resolving manifests
> -   branchmerge: False, force: False, partial: False
> -   ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936
> -   .hglf/f1: remote created -> g
> -  getting .hglf/f1
> -  updating: .hglf/f1 1/1 files (100.00%)
> -  getting changed largefiles
> -  using http://localhost:$HGPORT2/
> -  sending capabilities command
> -  sending batch command
> -  getting largefiles: 0/1 lfile (0.00%)
> -  getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90
> -  sending getlfile command
> -  found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store
> -  1 largefiles updated, 0 removed
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -
> -  $ ls http-clone-usercache/*
> -  http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
> -
> -  $ rm -rf empty http-clone*
> -
> -used all HGPORTs, kill all daemons
> -  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
> -
> -#endif
> -
> -
> -#if unix-permissions
> -
> -Clone a local repository owned by another user
> -We have to simulate that here by setting $HOME and removing write permissions
> -  $ ORIGHOME="$HOME"
> -  $ mkdir alice
> -  $ HOME="`pwd`/alice"
> -  $ cd alice
> -  $ hg init pubrepo
> -  $ cd pubrepo
> -  $ dd if=/dev/zero bs=1k count=11k > a-large-file 2> /dev/null
> -  $ hg add --large a-large-file
> -  $ hg commit -m "Add a large file"
> -  Invoking status precommit hook
> -  A a-large-file
> -  $ cd ..
> -  $ chmod -R a-w pubrepo
> -  $ cd ..
> -  $ mkdir bob
> -  $ HOME="`pwd`/bob"
> -  $ cd bob
> -  $ hg clone --pull ../alice/pubrepo pubrepo
> -  requesting all changes
> -  adding changesets
> -  adding manifests
> -  adding file changes
> -  added 1 changesets with 1 changes to 1 files
> -  updating to branch default
> -  getting changed largefiles
> -  1 largefiles updated, 0 removed
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ cd ..
> -  $ chmod -R u+w alice/pubrepo
> -  $ HOME="$ORIGHOME"
> -
> -#endif
> -
> -#if symlink
> -
> -Symlink to a large largefile should behave the same as a symlink to a normal file
> -  $ hg init largesymlink
> -  $ cd largesymlink
> -  $ dd if=/dev/zero bs=1k count=10k of=largefile 2>/dev/null
> -  $ hg add --large largefile
> -  $ hg commit -m "commit a large file"
> -  Invoking status precommit hook
> -  A largefile
> -  $ ln -s largefile largelink
> -  $ hg add largelink
> -  $ hg commit -m "commit a large symlink"
> -  Invoking status precommit hook
> -  A largelink
> -  $ rm -f largelink
> -  $ hg up >/dev/null
> -  $ test -f largelink
> -  [1]
> -  $ test -L largelink
> -  [1]
> -  $ rm -f largelink # make next part of the test independent of the previous
> -  $ hg up -C >/dev/null
> -  $ test -f largelink
> -  $ test -L largelink
> -  $ cd ..
> -
> -#endif
> -
> -test for pattern matching on 'hg status':
> -to boost performance, largefiles checks whether specified patterns are
> -related to largefiles in working directory (NOT to STANDIN) or not.
> -
> -  $ hg init statusmatch
> -  $ cd statusmatch
> -
> -  $ mkdir -p a/b/c/d
> -  $ echo normal > a/b/c/d/e.normal.txt
> -  $ hg add a/b/c/d/e.normal.txt
> -  $ echo large > a/b/c/d/e.large.txt
> -  $ hg add --large a/b/c/d/e.large.txt
> -  $ mkdir -p a/b/c/x
> -  $ echo normal > a/b/c/x/y.normal.txt
> -  $ hg add a/b/c/x/y.normal.txt
> -  $ hg commit -m 'add files'
> -  Invoking status precommit hook
> -  A a/b/c/d/e.large.txt
> -  A a/b/c/d/e.normal.txt
> -  A a/b/c/x/y.normal.txt
> -
> -(1) no pattern: no performance boost
> -  $ hg status -A
> -  C a/b/c/d/e.large.txt
> -  C a/b/c/d/e.normal.txt
> -  C a/b/c/x/y.normal.txt
> -
> -(2) pattern not related to largefiles: performance boost
> -  $ hg status -A a/b/c/x
> -  C a/b/c/x/y.normal.txt
> -
> -(3) pattern related to largefiles: no performance boost
> -  $ hg status -A a/b/c/d
> -  C a/b/c/d/e.large.txt
> -  C a/b/c/d/e.normal.txt
> -
> -(4) pattern related to STANDIN (not to largefiles): performance boost
> -  $ hg status -A .hglf/a
> -  C .hglf/a/b/c/d/e.large.txt
> -
> -(5) mixed case: no performance boost
> -  $ hg status -A a/b/c/x a/b/c/d
> -  C a/b/c/d/e.large.txt
> -  C a/b/c/d/e.normal.txt
> -  C a/b/c/x/y.normal.txt
> -
> -verify that largefiles doesn't break filesets
> -
> -  $ hg log --rev . --exclude "set:binary()"
> -  changeset:   0:41bd42f10efa
> -  tag:         tip
> -  user:        test
> -  date:        Thu Jan 01 00:00:00 1970 +0000
> -  summary:     add files
> -
> -verify that large files in subrepos handled properly
> -  $ hg init subrepo
> -  $ echo "subrepo = subrepo" > .hgsub
> -  $ hg add .hgsub
> -  $ hg ci -m "add subrepo"
> -  Invoking status precommit hook
> -  A .hgsub
> -  ? .hgsubstate
> -  $ echo "rev 1" > subrepo/large.txt
> -  $ hg -R subrepo add --large subrepo/large.txt
> -  $ hg sum
> -  parent: 1:8ee150ea2e9c tip
> -   add subrepo
> -  branch: default
> -  commit: 1 subrepos
> -  update: (current)
> -  $ hg st
> -  $ hg st -S
> -  A subrepo/large.txt
> -  $ hg ci -S -m "commit top repo"
> -  committing subrepository subrepo
> -  Invoking status precommit hook
> -  A large.txt
> -  Invoking status precommit hook
> -  M .hgsubstate
> -# No differences
> -  $ hg st -S
> -  $ hg sum
> -  parent: 2:ce4cd0c527a6 tip
> -   commit top repo
> -  branch: default
> -  commit: (clean)
> -  update: (current)
> -  $ echo "rev 2" > subrepo/large.txt
> -  $ hg st -S
> -  M subrepo/large.txt
> -  $ hg sum
> -  parent: 2:ce4cd0c527a6 tip
> -   commit top repo
> -  branch: default
> -  commit: 1 subrepos
> -  update: (current)
> -  $ hg ci -m "this commit should fail without -S"
> -  abort: uncommitted changes in subrepo subrepo
> -  (use --subrepos for recursive commit)
> -  [255]
> -
> -Add a normal file to the subrepo, then test archiving
> -
> -  $ echo 'normal file' > subrepo/normal.txt
> -  $ hg -R subrepo add subrepo/normal.txt
> -
> -Lock in subrepo, otherwise the change isn't archived
> -
> -  $ hg ci -S -m "add normal file to top level"
> -  committing subrepository subrepo
> -  Invoking status precommit hook
> -  M large.txt
> -  A normal.txt
> -  Invoking status precommit hook
> -  M .hgsubstate
> -  $ hg archive -S ../lf_subrepo_archive
> -  $ find ../lf_subrepo_archive | sort
> -  ../lf_subrepo_archive
> -  ../lf_subrepo_archive/.hg_archival.txt
> -  ../lf_subrepo_archive/.hgsub
> -  ../lf_subrepo_archive/.hgsubstate
> -  ../lf_subrepo_archive/a
> -  ../lf_subrepo_archive/a/b
> -  ../lf_subrepo_archive/a/b/c
> -  ../lf_subrepo_archive/a/b/c/d
> -  ../lf_subrepo_archive/a/b/c/d/e.large.txt
> -  ../lf_subrepo_archive/a/b/c/d/e.normal.txt
> -  ../lf_subrepo_archive/a/b/c/x
> -  ../lf_subrepo_archive/a/b/c/x/y.normal.txt
> -  ../lf_subrepo_archive/subrepo
> -  ../lf_subrepo_archive/subrepo/large.txt
> -  ../lf_subrepo_archive/subrepo/normal.txt
> -
> -Test update with subrepos.
> -
> -  $ hg update 0
> -  getting changed largefiles
> -  0 largefiles updated, 1 removed
> -  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
> -  $ hg status -S
> -  $ hg update tip
> -  getting changed largefiles
> -  1 largefiles updated, 0 removed
> -  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ hg status -S
> -# modify a large file
> -  $ echo "modified" > subrepo/large.txt
> -  $ hg st -S
> -  M subrepo/large.txt
> -# update -C should revert the change.
> -  $ hg update -C
> -  getting changed largefiles
> -  1 largefiles updated, 0 removed
> -  getting changed largefiles
> -  0 largefiles updated, 0 removed
> -  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ hg status -S
> -
> -Test archiving a revision that references a subrepo that is not yet
> -cloned (see test-subrepo-recursion.t):
> -
> -  $ hg clone -U . ../empty
> -  $ cd ../empty
> -  $ hg archive --subrepos -r tip ../archive.tar.gz
> -  cloning subrepo subrepo from $TESTTMP/statusmatch/subrepo
> -  $ cd ..
> -
> -Test that addremove picks up largefiles prior to the initial commit (issue3541)
> -
> -  $ hg init addrm2
> -  $ cd addrm2
> -  $ touch large.dat
> -  $ touch large2.dat
> -  $ touch normal
> -  $ hg add --large large.dat
> -  $ hg addremove -v
> -  adding large2.dat as a largefile
> -  adding normal
> -
> -Test that forgetting all largefiles reverts to islfilesrepo() == False
> -(addremove will add *.dat as normal files now)
> -  $ hg forget large.dat
> -  $ hg forget large2.dat
> -  $ hg addremove -v
> -  adding large.dat
> -  adding large2.dat
> -
> -Test commit's addremove option prior to the first commit
> -  $ hg forget large.dat
> -  $ hg forget large2.dat
> -  $ hg add --large large.dat
> -  $ hg ci -Am "commit"
> -  adding large2.dat as a largefile
> -  Invoking status precommit hook
> -  A large.dat
> -  A large2.dat
> -  A normal
> -  $ find .hglf | sort
> -  .hglf
> -  .hglf/large.dat
> -  .hglf/large2.dat
> -
> -Test actions on largefiles using relative paths from subdir
> -
> -  $ mkdir sub
> -  $ cd sub
> -  $ echo anotherlarge > anotherlarge
> -  $ hg add --large anotherlarge
> -  $ hg st
> -  A sub/anotherlarge
> -  $ hg st anotherlarge
> -  A anotherlarge
> -  $ hg commit -m anotherlarge anotherlarge
> -  Invoking status precommit hook
> -  A sub/anotherlarge
> -  $ hg log anotherlarge
> -  changeset:   1:9627a577c5e9
> -  tag:         tip
> -  user:        test
> -  date:        Thu Jan 01 00:00:00 1970 +0000
> -  summary:     anotherlarge
> -
> -  $ hg log -G anotherlarge
> -  @  changeset:   1:9627a577c5e9
> -  |  tag:         tip
> -  |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> -  |  summary:     anotherlarge
> -  |
> -  $ echo more >> anotherlarge
> -  $ hg st .
> -  M anotherlarge
> -  $ hg cat anotherlarge
> -  anotherlarge
> -  $ hg revert anotherlarge
> -  $ hg st
> -  ? sub/anotherlarge.orig
> -  $ cd ..
> -
> -  $ cd ..
> -
> -issue3651: summary/outgoing with largefiles shows "no remote repo"
> -unexpectedly
> -
> -  $ mkdir issue3651
> -  $ cd issue3651
> -
> -  $ hg init src
> -  $ echo a > src/a
> -  $ hg -R src add --large src/a
> -  $ hg -R src commit -m '#0'
> -  Invoking status precommit hook
> -  A a
> -
> -check messages when no remote repository is specified:
> -"no remote repo" route for "hg outgoing --large" is not tested here,
> -because it can't be reproduced easily.
> -
> -  $ hg init clone1
> -  $ hg -R clone1 -q pull src
> -  $ hg -R clone1 -q update
> -  $ hg -R clone1 paths | grep default
> -  [1]
> -
> -  $ hg -R clone1 summary --large
> -  parent: 0:fc0bd45326d3 tip
> -   #0
> -  branch: default
> -  commit: (clean)
> -  update: (current)
> -  largefiles: (no remote repo)
> -
> -check messages when there is no files to upload:
> -
> -  $ hg -q clone src clone2
> -  $ hg -R clone2 paths | grep default
> -  default = $TESTTMP/issue3651/src (glob)
> -
> -  $ hg -R clone2 summary --large
> -  parent: 0:fc0bd45326d3 tip
> -   #0
> -  branch: default
> -  commit: (clean)
> -  update: (current)
> -  largefiles: (no files to upload)
> -  $ hg -R clone2 outgoing --large
> -  comparing with $TESTTMP/issue3651/src (glob)
> -  searching for changes
> -  no changes found
> -  largefiles: no files to upload
> -  [1]
> -
> -  $ hg -R clone2 outgoing --large --graph --template "{rev}"
> -  comparing with $TESTTMP/issue3651/src (glob)
> -  searching for changes
> -  no changes found
> -  largefiles: no files to upload
> -
> -check messages when there are files to upload:
> -
> -  $ echo b > clone2/b
> -  $ hg -R clone2 add --large clone2/b
> -  $ hg -R clone2 commit -m '#1'
> -  Invoking status precommit hook
> -  A b
> -  $ hg -R clone2 summary --large
> -  parent: 1:1acbe71ce432 tip
> -   #1
> -  branch: default
> -  commit: (clean)
> -  update: (current)
> -  largefiles: 1 to upload
> -  $ hg -R clone2 outgoing --large
> -  comparing with $TESTTMP/issue3651/src (glob)
> -  searching for changes
> -  changeset:   1:1acbe71ce432
> -  tag:         tip
> -  user:        test
> -  date:        Thu Jan 01 00:00:00 1970 +0000
> -  summary:     #1
> -
> -  largefiles to upload:
> -  b
> -
> -  $ hg -R clone2 outgoing --large --graph --template "{rev}"
> -  comparing with $TESTTMP/issue3651/src
> -  searching for changes
> -  @  1
> -
> -  largefiles to upload:
> -  b
> -
> -
> -  $ cd ..
> -
> -merge action 'd' for 'local renamed directory to d2/g' which has no filename
> -
> -  $ hg init merge-action
> -  $ cd merge-action
> -  $ touch l
> -  $ hg add --large l
> -  $ mkdir d1
> -  $ touch d1/f
> -  $ hg ci -Aqm0
> -  Invoking status precommit hook
> -  A d1/f
> -  A l
> -  $ echo > d1/f
> -  $ touch d1/g
> -  $ hg ci -Aqm1
> -  Invoking status precommit hook
> -  M d1/f
> -  A d1/g
> -  $ hg up -qr0
> -  $ hg mv d1 d2
> -  moving d1/f to d2/f (glob)
> -  $ hg ci -qm2
> -  Invoking status precommit hook
> -  A d2/f
> -  R d1/f
> -  $ hg merge
> -  merging d2/f and d1/f to d2/f
> -  1 files updated, 1 files merged, 0 files removed, 0 files unresolved
> -  (branch merge, don't forget to commit)
> -  getting changed largefiles
> -  0 largefiles updated, 0 removed
> -  $ cd ..
> -
> -
> -Merge conflicts:
> -
> -  $ hg init merge
> -  $ cd merge
> -  $ echo 0 > f-different
> -  $ echo 0 > f-same
> -  $ echo 0 > f-unchanged-1
> -  $ echo 0 > f-unchanged-2
> -  $ hg add --large *
> -  $ hg ci -m0
> -  Invoking status precommit hook
> -  A f-different
> -  A f-same
> -  A f-unchanged-1
> -  A f-unchanged-2
> -  $ echo tmp1 > f-unchanged-1
> -  $ echo tmp1 > f-unchanged-2
> -  $ echo tmp1 > f-same
> -  $ hg ci -m1
> -  Invoking status precommit hook
> -  M f-same
> -  M f-unchanged-1
> -  M f-unchanged-2
> -  $ echo 2 > f-different
> -  $ echo 0 > f-unchanged-1
> -  $ echo 1 > f-unchanged-2
> -  $ echo 1 > f-same
> -  $ hg ci -m2
> -  Invoking status precommit hook
> -  M f-different
> -  M f-same
> -  M f-unchanged-1
> -  M f-unchanged-2
> -  $ hg up -qr0
> -  $ echo tmp2 > f-unchanged-1
> -  $ echo tmp2 > f-unchanged-2
> -  $ echo tmp2 > f-same
> -  $ hg ci -m3
> -  Invoking status precommit hook
> -  M f-same
> -  M f-unchanged-1
> -  M f-unchanged-2
> -  created new head
> -  $ echo 1 > f-different
> -  $ echo 1 > f-unchanged-1
> -  $ echo 0 > f-unchanged-2
> -  $ echo 1 > f-same
> -  $ hg ci -m4
> -  Invoking status precommit hook
> -  M f-different
> -  M f-same
> -  M f-unchanged-1
> -  M f-unchanged-2
> -  $ hg merge
> -  largefile f-different has a merge conflict
> -  ancestor was 09d2af8dd22201dd8d48e5dcfcaed281ff9422c7
> -  keep (l)ocal e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e or
> -  take (o)ther 7448d8798a4380162d4b56f9b452e2f6f9e24e7a? l
> -  0 files updated, 4 files merged, 0 files removed, 0 files unresolved
> -  (branch merge, don't forget to commit)
> -  getting changed largefiles
> -  1 largefiles updated, 0 removed
> -  $ cat f-different
> -  1
> -  $ cat f-same
> -  1
> -  $ cat f-unchanged-1
> -  1
> -  $ cat f-unchanged-2
> -  1
> -  $ cd ..
> -
> -Check whether "largefiles" feature is supported only in repositories
> -enabling largefiles extension.
> -
> -  $ mkdir individualenabling
> -  $ cd individualenabling
> -
> -  $ hg init enabledlocally
> -  $ echo large > enabledlocally/large
> -  $ hg -R enabledlocally add --large enabledlocally/large
> -  $ hg -R enabledlocally commit -m '#0'
> -  Invoking status precommit hook
> -  A large
> -
> -  $ hg init notenabledlocally
> -  $ echo large > notenabledlocally/large
> -  $ hg -R notenabledlocally add --large notenabledlocally/large
> -  $ hg -R notenabledlocally commit -m '#0'
> -  Invoking status precommit hook
> -  A large
> -
> -  $ cat >> $HGRCPATH <<EOF
> -  > [extensions]
> -  > # disable globally
> -  > largefiles=!
> -  > EOF
> -  $ cat >> enabledlocally/.hg/hgrc <<EOF
> -  > [extensions]
> -  > # enable locally
> -  > largefiles=
> -  > EOF
> -  $ hg -R enabledlocally root
> -  $TESTTMP/individualenabling/enabledlocally (glob)
> -  $ hg -R notenabledlocally root
> -  abort: repository requires features unknown to this Mercurial: largefiles!
> -  (see http://mercurial.selenic.com/wiki/MissingRequirement for more information)
> -  [255]
> -
> -  $ hg init push-dst
> -  $ hg -R enabledlocally push push-dst
> -  pushing to push-dst
> -  abort: required features are not supported in the destination: largefiles
> -  [255]
> -
> -  $ hg init pull-src
> -  $ hg -R pull-src pull enabledlocally
> -  pulling from enabledlocally
> -  abort: required features are not supported in the destination: largefiles
> -  [255]
> -
> -  $ hg clone enabledlocally clone-dst
> -  abort: repository requires features unknown to this Mercurial: largefiles!
> -  (see http://mercurial.selenic.com/wiki/MissingRequirement for more information)
> -  [255]
> -  $ test -d clone-dst
> -  [1]
> -  $ hg clone --pull enabledlocally clone-pull-dst
> -  abort: required features are not supported in the destination: largefiles
> -  [255]
> -  $ test -d clone-pull-dst
> -  [1]
> -
> -#if serve
> -
> -Test largefiles specific peer setup, when largefiles is enabled
> -locally (issue4109)
> -
> -  $ hg showconfig extensions | grep largefiles
> -  extensions.largefiles=!
> -  $ mkdir -p $TESTTMP/individualenabling/usercache
> -
> -  $ hg serve -R enabledlocally -d -p $HGPORT --pid-file hg.pid
> -  $ cat hg.pid >> $DAEMON_PIDS
> -
> -  $ hg init pull-dst
> -  $ cat > pull-dst/.hg/hgrc <<EOF
> -  > [extensions]
> -  > # enable locally
> -  > largefiles=
> -  > [largefiles]
> -  > # ignore system cache to force largefiles specific wire proto access
> -  > usercache=$TESTTMP/individualenabling/usercache
> -  > EOF
> -  $ hg -R pull-dst -q pull -u http://localhost:$HGPORT
> -
> -  $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
> -#endif
> -
> -  $ cd ..
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list