test-largefiles-misc.t
1121 lines
| 29.1 KiB
| text/troff
|
Tads3Lexer
/ tests / test-largefiles-misc.t
|
r21424 | 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 | ||||
|
r24813 | |||
TODO: Ideally, this should mention the largefile, not the standin | ||||
$ hg log -T '{rev}\n' --stat 'set:clean()' | ||||
0 | ||||
.hglf/dira/dirb/largefile | 1 + | ||||
1 files changed, 1 insertions(+), 0 deletions(-) | ||||
|
r21424 | $ 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 | ||||
|
r23441 | |||
$ hg clone -q . ../fetch | ||||
$ hg --config extensions.fetch= fetch ../fetch | ||||
abort: uncommitted changes | ||||
[255] | ||||
|
r21424 | $ 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 | ||||
|
r34662 | new changesets 09a186cfa6da | ||
|
r21424 | 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 | ||||
|
r31892 | sharing a largefile repo automatically enables largefiles on the share | ||
$ hg share --config extensions.share= . ../shared_lfrepo | ||||
updating working directory | ||||
getting changed largefiles | ||||
1 largefiles updated, 0 removed | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cat ../shared_lfrepo/.hg/hgrc | ||||
[extensions] | ||||
largefiles= | ||||
|
r21424 | 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 | ||||
|
r23886 | $ hg add --large subrepo/large.txt | ||
|
r21424 | $ hg sum | ||
parent: 1:8ee150ea2e9c tip | ||||
add subrepo | ||||
branch: default | ||||
commit: 1 subrepos | ||||
update: (current) | ||||
|
r25382 | phases: 2 draft | ||
|
r21424 | $ 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) | ||||
|
r25382 | phases: 3 draft | ||
|
r21424 | $ 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) | ||||
|
r25382 | phases: 3 draft | ||
|
r21424 | $ hg ci -m "this commit should fail without -S" | ||
|
r33365 | abort: uncommitted changes in subrepository "subrepo" | ||
|
r21424 | (use --subrepos for recursive commit) | ||
[255] | ||||
Add a normal file to the subrepo, then test archiving | ||||
$ echo 'normal file' > subrepo/normal.txt | ||||
|
r23721 | $ touch large.dat | ||
|
r23592 | $ mv subrepo/large.txt subrepo/renamed-large.txt | ||
|
r23766 | $ hg addremove -S --dry-run | ||
adding large.dat as a largefile | ||||
removing subrepo/large.txt | ||||
adding subrepo/normal.txt | ||||
adding subrepo/renamed-large.txt | ||||
$ hg status -S | ||||
! subrepo/large.txt | ||||
? large.dat | ||||
? subrepo/normal.txt | ||||
? subrepo/renamed-large.txt | ||||
$ hg addremove --dry-run subrepo | ||||
removing subrepo/large.txt (glob) | ||||
adding subrepo/normal.txt (glob) | ||||
adding subrepo/renamed-large.txt (glob) | ||||
|
r23592 | $ hg status -S | ||
! subrepo/large.txt | ||||
|
r23721 | ? large.dat | ||
|
r23592 | ? subrepo/normal.txt | ||
? subrepo/renamed-large.txt | ||||
|
r23766 | $ cd .. | ||
$ hg -R statusmatch addremove --dry-run statusmatch/subrepo | ||||
removing statusmatch/subrepo/large.txt (glob) | ||||
adding statusmatch/subrepo/normal.txt (glob) | ||||
adding statusmatch/subrepo/renamed-large.txt (glob) | ||||
$ hg -R statusmatch status -S | ||||
! subrepo/large.txt | ||||
? large.dat | ||||
? subrepo/normal.txt | ||||
? subrepo/renamed-large.txt | ||||
$ hg -R statusmatch addremove --dry-run -S | ||||
|
r23767 | adding large.dat as a largefile | ||
|
r23766 | removing subrepo/large.txt | ||
adding subrepo/normal.txt | ||||
adding subrepo/renamed-large.txt | ||||
$ cd statusmatch | ||||
|
r23592 | $ mv subrepo/renamed-large.txt subrepo/large.txt | ||
|
r23766 | $ hg addremove subrepo | ||
adding subrepo/normal.txt (glob) | ||||
$ hg forget subrepo/normal.txt | ||||
|
r21424 | |||
|
r23741 | $ hg addremove -S | ||
|
r23721 | adding large.dat as a largefile | ||
|
r23766 | adding subrepo/normal.txt | ||
|
r23721 | $ rm large.dat | ||
|
r23741 | $ hg addremove subrepo | ||
$ hg addremove -S | ||||
|
r23721 | removing large.dat | ||
|
r21424 | 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 | ||||
|
r24679 | $ cat ../lf_subrepo_archive/.hg_archival.txt | ||
repo: 41bd42f10efa43698cc02052ea0977771cba506d | ||||
node: d56a95e6522858bc08a724c4fe2bdee066d1c30b | ||||
branch: default | ||||
latesttag: null | ||||
latesttagdistance: 4 | ||||
|
r24680 | changessincelatesttag: 4 | ||
|
r21424 | |||
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 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg status -S | ||||
|
r24133 | $ hg forget -v subrepo/large.txt | ||
removing subrepo/large.txt (glob) | ||||
Test reverting a forgotten file | ||||
$ hg revert -R subrepo subrepo/large.txt | ||||
$ hg status -SA subrepo/large.txt | ||||
C subrepo/large.txt | ||||
|
r23782 | $ hg rm -v subrepo/large.txt | ||
removing subrepo/large.txt (glob) | ||||
$ hg revert -R subrepo subrepo/large.txt | ||||
|
r23766 | $ rm subrepo/large.txt | ||
$ hg addremove -S | ||||
removing subrepo/large.txt | ||||
$ hg st -S | ||||
R subrepo/large.txt | ||||
|
r21424 | 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 | ||||
|
r24208 | $ hg --debug log -T '{rev}: {desc}\n' ../sub/anotherlarge | ||
|
r32308 | updated patterns: ../.hglf/sub/../sub/anotherlarge, ../sub/anotherlarge | ||
|
r24208 | 1: anotherlarge | ||
|
r21424 | $ hg log -G anotherlarge | ||
@ changeset: 1:9627a577c5e9 | ||||
| tag: tip | ||||
|
r28627 | ~ user: test | ||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: anotherlarge | ||||
|
r24206 | |||
$ hg log glob:another* | ||||
changeset: 1:9627a577c5e9 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: anotherlarge | ||||
|
r24207 | $ hg --debug log -T '{rev}: {desc}\n' -G glob:another* | ||
|
r32308 | updated patterns: glob:../.hglf/sub/another*, glob:another* | ||
|
r24207 | @ 1: anotherlarge | ||
|
r24206 | | | ||
|
r28627 | ~ | ||
|
r24206 | |||
|
r24207 | #if no-msys | ||
$ hg --debug log -T '{rev}: {desc}\n' 'glob:../.hglf/sub/another*' # no-msys | ||||
|
r32308 | updated patterns: glob:../.hglf/sub/another* | ||
|
r24207 | 1: anotherlarge | ||
$ hg --debug log -G -T '{rev}: {desc}\n' 'glob:../.hglf/sub/another*' # no-msys | ||||
|
r32308 | updated patterns: glob:../.hglf/sub/another* | ||
|
r24207 | @ 1: anotherlarge | ||
| | ||||
|
r28627 | ~ | ||
|
r24207 | #endif | ||
|
r21424 | $ echo more >> anotherlarge | ||
$ hg st . | ||||
M anotherlarge | ||||
$ hg cat anotherlarge | ||||
anotherlarge | ||||
$ hg revert anotherlarge | ||||
$ hg st | ||||
? sub/anotherlarge.orig | ||||
|
r26944 | |||
Test orig files go where we want them | ||||
$ echo moremore >> anotherlarge | ||||
$ hg revert anotherlarge -v --config 'ui.origbackuppath=.hg/origbackups' | ||||
|
r26969 | creating directory: $TESTTMP/addrm2/.hg/origbackups/.hglf/sub (glob) | ||
|
r34145 | saving current version of ../.hglf/sub/anotherlarge as $TESTTMP/addrm2/.hg/origbackups/.hglf/sub/anotherlarge (glob) | ||
|
r26944 | reverting ../.hglf/sub/anotherlarge (glob) | ||
|
r26969 | creating directory: $TESTTMP/addrm2/.hg/origbackups/sub (glob) | ||
|
r26944 | found 90c622cf65cebe75c5842f9136c459333faf392e in store | ||
found 90c622cf65cebe75c5842f9136c459333faf392e in store | ||||
$ ls ../.hg/origbackups/sub | ||||
|
r34145 | anotherlarge | ||
|
r21424 | $ cd .. | ||
|
r24206 | Test glob logging from the root dir | ||
$ hg log glob:**another* | ||||
changeset: 1:9627a577c5e9 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: anotherlarge | ||||
$ hg log -G glob:**another* | ||||
@ changeset: 1:9627a577c5e9 | ||||
| tag: tip | ||||
|
r28627 | ~ user: test | ||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: anotherlarge | ||||
|
r24206 | |||
|
r21424 | $ cd .. | ||
|
r24208 | Log from outer space | ||
$ hg --debug log -R addrm2 -T '{rev}: {desc}\n' 'addrm2/sub/anotherlarge' | ||||
|
r32308 | updated patterns: addrm2/.hglf/sub/anotherlarge, addrm2/sub/anotherlarge | ||
|
r24208 | 1: anotherlarge | ||
$ hg --debug log -R addrm2 -T '{rev}: {desc}\n' 'addrm2/.hglf/sub/anotherlarge' | ||||
|
r32308 | updated patterns: addrm2/.hglf/sub/anotherlarge | ||
|
r24208 | 1: anotherlarge | ||
|
r21424 | 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) | ||||
|
r25382 | phases: 1 draft | ||
|
r21424 | 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) | ||||
|
r25382 | phases: 1 draft | ||
|
r21424 | 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) | ||||
|
r25382 | phases: 2 draft | ||
|
r21882 | largefiles: 1 entities for 1 files to upload | ||
|
r21424 | $ 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 | ||||
|
r21883 | largefiles to upload (1 entities): | ||
|
r21424 | b | ||
$ hg -R clone2 outgoing --large --graph --template "{rev}" | ||||
|
r23348 | comparing with $TESTTMP/issue3651/src (glob) | ||
|
r21424 | searching for changes | ||
@ 1 | ||||
|
r21883 | largefiles to upload (1 entities): | ||
|
r21424 | b | ||
|
r21881 | $ cp clone2/b clone2/b1 | ||
$ cp clone2/b clone2/b2 | ||||
$ hg -R clone2 add --large clone2/b1 clone2/b2 | ||||
$ hg -R clone2 commit -m '#2: add largefiles referring same entity' | ||||
Invoking status precommit hook | ||||
A b1 | ||||
A b2 | ||||
$ hg -R clone2 summary --large | ||||
parent: 2:6095d0695d70 tip | ||||
#2: add largefiles referring same entity | ||||
branch: default | ||||
commit: (clean) | ||||
update: (current) | ||||
|
r25382 | phases: 3 draft | ||
|
r21882 | largefiles: 1 entities for 3 files to upload | ||
|
r21881 | $ hg -R clone2 outgoing --large -T "{rev}:{node|short}\n" | ||
comparing with $TESTTMP/issue3651/src (glob) | ||||
searching for changes | ||||
1:1acbe71ce432 | ||||
2:6095d0695d70 | ||||
|
r21883 | largefiles to upload (1 entities): | ||
|
r21881 | b | ||
b1 | ||||
b2 | ||||
|
r21883 | $ hg -R clone2 cat -r 1 clone2/.hglf/b | ||
89e6c98d92887913cadf06b2adb97f26cde4849b | ||||
|
r25125 | $ hg -R clone2 outgoing --large -T "{rev}:{node|short}\n" --debug --config progress.debug=true | ||
|
r21883 | comparing with $TESTTMP/issue3651/src (glob) | ||
query 1; heads | ||||
searching for changes | ||||
all remote heads known locally | ||||
1:1acbe71ce432 | ||||
2:6095d0695d70 | ||||
r28464 | finding outgoing largefiles: 0/2 revisions (0.00%) | |||
finding outgoing largefiles: 1/2 revisions (50.00%) | ||||
|
r21883 | largefiles to upload (1 entities): | ||
b | ||||
89e6c98d92887913cadf06b2adb97f26cde4849b | ||||
b1 | ||||
89e6c98d92887913cadf06b2adb97f26cde4849b | ||||
b2 | ||||
89e6c98d92887913cadf06b2adb97f26cde4849b | ||||
|
r21881 | |||
$ echo bbb > clone2/b | ||||
$ hg -R clone2 commit -m '#3: add new largefile entity as existing file' | ||||
Invoking status precommit hook | ||||
M b | ||||
$ echo bbbb > clone2/b | ||||
$ hg -R clone2 commit -m '#4: add new largefile entity as existing file' | ||||
Invoking status precommit hook | ||||
M b | ||||
$ cp clone2/b1 clone2/b | ||||
$ hg -R clone2 commit -m '#5: refer existing largefile entity again' | ||||
Invoking status precommit hook | ||||
M b | ||||
$ hg -R clone2 summary --large | ||||
parent: 5:036794ea641c tip | ||||
#5: refer existing largefile entity again | ||||
branch: default | ||||
commit: (clean) | ||||
update: (current) | ||||
|
r25382 | phases: 6 draft | ||
|
r21882 | largefiles: 3 entities for 3 files to upload | ||
|
r21881 | $ hg -R clone2 outgoing --large -T "{rev}:{node|short}\n" | ||
comparing with $TESTTMP/issue3651/src (glob) | ||||
searching for changes | ||||
1:1acbe71ce432 | ||||
2:6095d0695d70 | ||||
3:7983dce246cc | ||||
4:233f12ada4ae | ||||
5:036794ea641c | ||||
|
r21883 | largefiles to upload (3 entities): | ||
|
r21881 | b | ||
b1 | ||||
b2 | ||||
|
r21883 | $ hg -R clone2 cat -r 3 clone2/.hglf/b | ||
c801c9cfe94400963fcb683246217d5db77f9a9a | ||||
$ hg -R clone2 cat -r 4 clone2/.hglf/b | ||||
13f9ed0898e315bf59dc2973fec52037b6f441a2 | ||||
|
r25125 | $ hg -R clone2 outgoing --large -T "{rev}:{node|short}\n" --debug --config progress.debug=true | ||
|
r21883 | comparing with $TESTTMP/issue3651/src (glob) | ||
query 1; heads | ||||
searching for changes | ||||
all remote heads known locally | ||||
1:1acbe71ce432 | ||||
2:6095d0695d70 | ||||
3:7983dce246cc | ||||
4:233f12ada4ae | ||||
5:036794ea641c | ||||
r28464 | finding outgoing largefiles: 0/5 revisions (0.00%) | |||
finding outgoing largefiles: 1/5 revisions (20.00%) | ||||
finding outgoing largefiles: 2/5 revisions (40.00%) | ||||
finding outgoing largefiles: 3/5 revisions (60.00%) | ||||
finding outgoing largefiles: 4/5 revisions (80.00%) | ||||
|
r21883 | largefiles to upload (3 entities): | ||
b | ||||
13f9ed0898e315bf59dc2973fec52037b6f441a2 | ||||
89e6c98d92887913cadf06b2adb97f26cde4849b | ||||
c801c9cfe94400963fcb683246217d5db77f9a9a | ||||
b1 | ||||
89e6c98d92887913cadf06b2adb97f26cde4849b | ||||
b2 | ||||
89e6c98d92887913cadf06b2adb97f26cde4849b | ||||
|
r21881 | |||
|
r23139 | Pushing revision #1 causes uploading entity 89e6c98d9288, which is | ||
|
r21884 | shared also by largefiles b1, b2 in revision #2 and b in revision #5. | ||
Then, entity 89e6c98d9288 is not treated as "outgoing entity" at "hg | ||||
summary" and "hg outgoing", even though files in outgoing revision #2 | ||||
and #5 refer it. | ||||
$ hg -R clone2 push -r 1 -q | ||||
$ hg -R clone2 summary --large | ||||
parent: 5:036794ea641c tip | ||||
#5: refer existing largefile entity again | ||||
branch: default | ||||
commit: (clean) | ||||
update: (current) | ||||
|
r25382 | phases: 6 draft | ||
|
r21884 | largefiles: 2 entities for 1 files to upload | ||
$ hg -R clone2 outgoing --large -T "{rev}:{node|short}\n" | ||||
comparing with $TESTTMP/issue3651/src (glob) | ||||
searching for changes | ||||
2:6095d0695d70 | ||||
3:7983dce246cc | ||||
4:233f12ada4ae | ||||
5:036794ea641c | ||||
largefiles to upload (2 entities): | ||||
b | ||||
|
r25125 | $ hg -R clone2 outgoing --large -T "{rev}:{node|short}\n" --debug --config progress.debug=true | ||
|
r21884 | comparing with $TESTTMP/issue3651/src (glob) | ||
query 1; heads | ||||
searching for changes | ||||
all remote heads known locally | ||||
2:6095d0695d70 | ||||
3:7983dce246cc | ||||
4:233f12ada4ae | ||||
5:036794ea641c | ||||
r28464 | finding outgoing largefiles: 0/4 revisions (0.00%) | |||
finding outgoing largefiles: 1/4 revisions (25.00%) | ||||
finding outgoing largefiles: 2/4 revisions (50.00%) | ||||
finding outgoing largefiles: 3/4 revisions (75.00%) | ||||
|
r21884 | largefiles to upload (2 entities): | ||
b | ||||
13f9ed0898e315bf59dc2973fec52037b6f441a2 | ||||
c801c9cfe94400963fcb683246217d5db77f9a9a | ||||
|
r21424 | $ 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) | ||||
$ 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 | ||||
|
r22288 | getting changed largefiles | ||
1 largefiles updated, 0 removed | ||||
|
r21424 | 0 files updated, 4 files merged, 0 files removed, 0 files unresolved | ||
(branch merge, don't forget to commit) | ||||
$ 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! | ||||
|
r26421 | (see https://mercurial-scm.org/wiki/MissingRequirement for more information) | ||
|
r21424 | [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! | ||||
|
r26421 | (see https://mercurial-scm.org/wiki/MissingRequirement for more information) | ||
|
r21424 | [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 | ||||
|
r25474 | $ killdaemons.py | ||
|
r21424 | #endif | ||
|
r24158 | Test overridden functions work correctly even for repos disabling | ||
largefiles (issue4547) | ||||
$ hg showconfig extensions | grep largefiles | ||||
extensions.largefiles=! | ||||
(test updating implied by clone) | ||||
$ hg init enabled-but-no-largefiles | ||||
$ echo normal1 > enabled-but-no-largefiles/normal1 | ||||
$ hg -R enabled-but-no-largefiles add enabled-but-no-largefiles/normal1 | ||||
$ hg -R enabled-but-no-largefiles commit -m '#0@enabled-but-no-largefiles' | ||||
Invoking status precommit hook | ||||
A normal1 | ||||
$ cat >> enabled-but-no-largefiles/.hg/hgrc <<EOF | ||||
> [extensions] | ||||
> # enable locally | ||||
> largefiles= | ||||
> EOF | ||||
$ hg clone -q enabled-but-no-largefiles no-largefiles | ||||
$ echo normal2 > enabled-but-no-largefiles/normal2 | ||||
$ hg -R enabled-but-no-largefiles add enabled-but-no-largefiles/normal2 | ||||
$ hg -R enabled-but-no-largefiles commit -m '#1@enabled-but-no-largefiles' | ||||
Invoking status precommit hook | ||||
A normal2 | ||||
$ echo normal3 > no-largefiles/normal3 | ||||
$ hg -R no-largefiles add no-largefiles/normal3 | ||||
$ hg -R no-largefiles commit -m '#1@no-largefiles' | ||||
Invoking status precommit hook | ||||
A normal3 | ||||
$ hg -R no-largefiles -q pull --rebase | ||||
Invoking status precommit hook | ||||
|
r25753 | A normal3 | ||
|
r24158 | |||
(test reverting) | ||||
$ hg init subrepo-root | ||||
$ cat >> subrepo-root/.hg/hgrc <<EOF | ||||
> [extensions] | ||||
> # enable locally | ||||
> largefiles= | ||||
> EOF | ||||
$ echo large > subrepo-root/large | ||||
$ hg -R subrepo-root add --large subrepo-root/large | ||||
$ hg clone -q no-largefiles subrepo-root/no-largefiles | ||||
$ cat > subrepo-root/.hgsub <<EOF | ||||
> no-largefiles = no-largefiles | ||||
> EOF | ||||
$ hg -R subrepo-root add subrepo-root/.hgsub | ||||
$ hg -R subrepo-root commit -m '#0' | ||||
Invoking status precommit hook | ||||
A .hgsub | ||||
A large | ||||
? .hgsubstate | ||||
$ echo dirty >> subrepo-root/large | ||||
$ echo dirty >> subrepo-root/no-largefiles/normal1 | ||||
$ hg -R subrepo-root status -S | ||||
M large | ||||
M no-largefiles/normal1 | ||||
|
r32835 | $ hg -R subrepo-root extdiff -p echo -S --config extensions.extdiff= | ||
"*\\no-largefiles\\normal1" "*\\no-largefiles\\normal1" (glob) (windows !) | ||||
*/no-largefiles/normal1 */no-largefiles/normal1 (glob) (no-windows !) | ||||
[1] | ||||
|
r24158 | $ hg -R subrepo-root revert --all | ||
reverting subrepo-root/.hglf/large (glob) | ||||
reverting subrepo no-largefiles | ||||
reverting subrepo-root/no-largefiles/normal1 (glob) | ||||
|
r21424 | $ cd .. | ||
|
r23183 | Test "pull --rebase" when rebase is enabled before largefiles (issue3861) | ||
========================================================================= | ||||
|
r21424 | |||
|
r23183 | $ hg showconfig extensions | grep largefiles | ||
extensions.largefiles=! | ||||
$ mkdir issue3861 | ||||
$ cd issue3861 | ||||
$ hg init src | ||||
$ hg clone -q src dst | ||||
$ echo a > src/a | ||||
$ hg -R src commit -Aqm "#0" | ||||
Invoking status precommit hook | ||||
A a | ||||
$ cat >> dst/.hg/hgrc <<EOF | ||||
> [extensions] | ||||
> largefiles= | ||||
> EOF | ||||
$ hg -R dst pull --rebase | ||||
pulling from $TESTTMP/issue3861/src (glob) | ||||
requesting all changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
|
r34662 | new changesets bf5e395ced2c | ||
|
r28189 | nothing to rebase - updating instead | ||
|
r23183 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
$ cd .. | ||||