##// END OF EJS Templates
largefiles: access to specific fields only if largefiles enabled (issue4547)...
largefiles: access to specific fields only if largefiles enabled (issue4547) Even if largefiles extension is enabled in a repository, "repo" object, which isn't "largefiles.reposetup()"-ed, is passed to overridden functions in the cases below unexpectedly, because extensions are enabled for each repositories strictly. (1) clone without -U: (2) pull with -U: (3) pull with --rebase: combination of "enabled@src", "disabled@dst" and "not-required@src" cause this situation. largefiles requirement @src @dst @src result -------- -------- --------------- -------------------- enabled disabled not-required aborted unexpectedly required requirement error (intentional) -------- -------- --------------- -------------------- enabled enabled * success -------- -------- --------------- -------------------- disabled enabled * success (only for "pull") -------- -------- --------------- -------------------- disabled disabled not-required success required requirement error (intentional) -------- -------- --------------- -------------------- (4) update/revert with a subrepo disabling largefiles In these cases, overridden functions cause accessing to largefiles specific fields of not "largefiles.reposetup()"-ed "repo" object, and execution is aborted. - (1), (2), (4) cause accessing to "_lfstatuswriters" in "getstatuswriter()" invoked via "updatelfiles()" - (3) causes accessing to "_lfcommithooks" in "overriderebase()" For safe accessing to these fields, this patch examines whether passed "repo" object is "largefiles.reposetup()"-ed or not before accessing to them. This patch chooses examining existence of newly introduced "_largefilesenabled" instead of "_lfcommithooks" and "_lfstatuswriters" directly, because the former is better name for the generic "largefiles is enabled in this repo" mark than the latter. In the future, all other overridden functions should avoid largefiles specific processing for efficiency, and "_largefilesenabled" is better also for such purpose. BTW, "lfstatus" can't be used for such purpose, because some code paths set it forcibly regardless of existence of it in specified "repo" object.

File last commit:

r22947:c63a09b6 default
r24158:d414c28d stable
Show More
test-win32text.t
426 lines | 8.4 KiB | text/troff | Tads3Lexer
Matt Mackall
tests: unify test-win32text
r12494
$ hg init t
$ cd t
$ cat > unix2dos.py <<EOF
> import sys
>
> for path in sys.argv[1:]:
> data = file(path, 'rb').read()
> data = data.replace('\n', '\r\n')
> file(path, 'wb').write(data)
> EOF
$ echo '[hooks]' >> .hg/hgrc
$ echo 'pretxncommit.crlf = python:hgext.win32text.forbidcrlf' >> .hg/hgrc
$ echo 'pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf' >> .hg/hgrc
$ cat .hg/hgrc
[hooks]
pretxncommit.crlf = python:hgext.win32text.forbidcrlf
pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Matt Mackall
tests: unify test-win32text
r12494 $ echo hello > f
$ hg add f
commit should succeed
$ hg ci -m 1
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Matt Mackall
tests: unify test-win32text
r12494 $ hg clone . ../zoz
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cp .hg/hgrc ../zoz/.hg
$ python unix2dos.py f
commit should fail
$ hg ci -m 2.1
Martin Geisler
win32text: lowercase warning message
r16932 attempt to commit or push text file(s) using CRLF line endings
Matt Mackall
tests: unify test-win32text
r12494 in f583ea08d42a: f
transaction abort!
rollback completed
abort: pretxncommit.crlf hook failed
[255]
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Matt Mackall
tests: unify test-win32text
r12494 $ mv .hg/hgrc .hg/hgrc.bak
commits should succeed
$ hg ci -m 2
$ hg cp f g
$ hg ci -m 2.2
push should fail
$ hg push ../zoz
pushing to ../zoz
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
Martin Geisler
win32text: lowercase warning message
r16932 attempt to commit or push text file(s) using CRLF line endings
Matt Mackall
tests: unify test-win32text
r12494 in bc2d09796734: g
in b1aa5cde7ff4: f
To prevent this mistake in your local repository,
add to Mercurial.ini or .hg/hgrc:
[hooks]
pretxncommit.crlf = python:hgext.win32text.forbidcrlf
and also consider adding:
[extensions]
win32text =
[encode]
** = cleverencode:
[decode]
** = cleverdecode:
transaction abort!
rollback completed
abort: pretxnchangegroup.crlf hook failed
[255]
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Matt Mackall
tests: unify test-win32text
r12494 $ mv .hg/hgrc.bak .hg/hgrc
$ echo hello > f
$ hg rm g
commit should succeed
$ hg ci -m 2.3
push should succeed
$ hg push ../zoz
pushing to ../zoz
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 3 changes to 2 files
and now for something completely different
$ mkdir d
$ echo hello > d/f2
$ python unix2dos.py d/f2
$ hg add d/f2
$ hg ci -m 3
Martin Geisler
win32text: lowercase warning message
r16932 attempt to commit or push text file(s) using CRLF line endings
Matt Mackall
tests: unify test-win32text
r12494 in 053ba1a3035a: d/f2
transaction abort!
rollback completed
abort: pretxncommit.crlf hook failed
[255]
$ hg revert -a
Mads Kiilerich
tests: add missing '(glob)'s to match '\' in paths in test output on windows
r15520 forgetting d/f2 (glob)
Matt Mackall
tests: unify test-win32text
r12494 $ rm d/f2
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Matt Mackall
tests: unify test-win32text
r12494 $ hg rem f
$ hg ci -m 4
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Augie Fackler
tests: use $PYTHON instead of hardcoding python...
r22947 $ $PYTHON -c 'file("bin", "wb").write("hello\x00\x0D\x0A")'
Matt Mackall
tests: unify test-win32text
r12494 $ hg add bin
$ hg ci -m 5
$ hg log -v
changeset: 5:f0b1c8d75fce
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: bin
description:
5
changeset: 4:77796dbcd4ad
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f
description:
4
changeset: 3:7c1b5430b350
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f g
description:
2.3
changeset: 2:bc2d09796734
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: g
description:
2.2
changeset: 1:b1aa5cde7ff4
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f
description:
2
changeset: 0:fcf06d5c4e1d
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f
description:
1
$ hg clone . dupe
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Matt Mackall
tests: unify test-win32text
r12494 $ for x in a b c d; do echo content > dupe/$x; done
$ hg -R dupe add
Mads Kiilerich
tests: add missing '(glob)'s to match '\' in paths in test output on windows
r15520 adding dupe/a (glob)
adding dupe/b (glob)
adding dupe/c (glob)
adding dupe/d (glob)
Matt Mackall
tests: unify test-win32text
r12494 $ python unix2dos.py dupe/b dupe/c dupe/d
$ hg -R dupe ci -m a dupe/a
$ hg -R dupe ci -m b/c dupe/[bc]
$ hg -R dupe ci -m d dupe/d
$ hg -R dupe log -v
changeset: 8:67ac5962ab43
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: d
description:
d
changeset: 7:68c127d1834e
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: b c
description:
b/c
changeset: 6:adbf8bf7f31d
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: a
description:
a
changeset: 5:f0b1c8d75fce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: bin
description:
5
changeset: 4:77796dbcd4ad
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f
description:
4
changeset: 3:7c1b5430b350
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f g
description:
2.3
changeset: 2:bc2d09796734
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: g
description:
2.2
changeset: 1:b1aa5cde7ff4
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f
description:
2
changeset: 0:fcf06d5c4e1d
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f
description:
1
$ hg pull dupe
pulling from dupe
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 4 changes to 4 files
Martin Geisler
win32text: lowercase warning message
r16932 attempt to commit or push text file(s) using CRLF line endings
Matt Mackall
tests: unify test-win32text
r12494 in 67ac5962ab43: d
in 68c127d1834e: b
in 68c127d1834e: c
To prevent this mistake in your local repository,
add to Mercurial.ini or .hg/hgrc:
[hooks]
pretxncommit.crlf = python:hgext.win32text.forbidcrlf
and also consider adding:
[extensions]
win32text =
[encode]
** = cleverencode:
[decode]
** = cleverdecode:
transaction abort!
rollback completed
abort: pretxnchangegroup.crlf hook failed
[255]
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Matt Mackall
tests: unify test-win32text
r12494 $ hg log -v
changeset: 5:f0b1c8d75fce
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: bin
description:
5
changeset: 4:77796dbcd4ad
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f
description:
4
changeset: 3:7c1b5430b350
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f g
description:
2.3
changeset: 2:bc2d09796734
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: g
description:
2.2
changeset: 1:b1aa5cde7ff4
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f
description:
2
changeset: 0:fcf06d5c4e1d
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: f
description:
1
$ rm .hg/hgrc
$ (echo some; echo text) > f3
Augie Fackler
tests: use $PYTHON instead of hardcoding python...
r22947 $ $PYTHON -c 'file("f4.bat", "wb").write("rem empty\x0D\x0A")'
Matt Mackall
tests: unify test-win32text
r12494 $ hg add f3 f4.bat
$ hg ci -m 6
Martin Geisler
test-win32text: use (esc) lines instead of Python script
r12977 $ cat bin
hello\x00\r (esc)
$ cat f3
some
text
$ cat f4.bat
rem empty\r (esc)
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Matt Mackall
tests: unify test-win32text
r12494 $ echo '[extensions]' >> .hg/hgrc
$ echo 'win32text = ' >> .hg/hgrc
$ echo '[decode]' >> .hg/hgrc
$ echo '** = cleverdecode:' >> .hg/hgrc
$ echo '[encode]' >> .hg/hgrc
$ echo '** = cleverencode:' >> .hg/hgrc
$ cat .hg/hgrc
[extensions]
win32text =
[decode]
** = cleverdecode:
[encode]
** = cleverencode:
Martin Geisler
tests: test/silence win32text deprecation warning
r12843
Trigger deprecation warning:
Mads Kiilerich
test-win32text.t: stabilize test output...
r12853 $ hg id -t
Martin Geisler
tests: test/silence win32text deprecation warning
r12843 win32text is deprecated: http://mercurial.selenic.com/wiki/Win32TextExtension
Mads Kiilerich
test-win32text.t: stabilize test output...
r12853 tip
Martin Geisler
tests: test/silence win32text deprecation warning
r12843
Disable warning:
$ echo '[win32text]' >> .hg/hgrc
$ echo 'warn = no' >> .hg/hgrc
Mads Kiilerich
test-win32text.t: stabilize test output...
r12853 $ hg id -t
tip
Martin Geisler
tests: test/silence win32text deprecation warning
r12843
Matt Mackall
tests: unify test-win32text
r12494 $ rm f3 f4.bat bin
Martin Geisler
test-win32text: use $TESTTMP in output
r12978 $ hg co -C
Matt Mackall
tests: unify test-win32text
r12494 WARNING: f4.bat already has CRLF line endings
and does not need EOL conversion by the win32text plugin.
Before your next commit, please reconsider your encode/decode settings in
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 Mercurial.ini or $TESTTMP/t/.hg/hgrc. (glob)
Matt Mackall
tests: unify test-win32text
r12494 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
Martin Geisler
test-win32text: use (esc) lines instead of Python script
r12977 $ cat bin
hello\x00\r (esc)
$ cat f3
some\r (esc)
text\r (esc)
$ cat f4.bat
rem empty\r (esc)
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Augie Fackler
tests: use $PYTHON instead of hardcoding python...
r22947 $ $PYTHON -c 'file("f5.sh", "wb").write("# empty\x0D\x0A")'
Matt Mackall
tests: unify test-win32text
r12494 $ hg add f5.sh
$ hg ci -m 7
Martin Geisler
test-win32text: use (esc) lines instead of Python script
r12977 $ cat f5.sh
# empty\r (esc)
$ hg cat f5.sh
# empty
Matt Mackall
tests: unify test-win32text
r12494 $ echo '% just linefeed' > linefeed
$ hg ci -qAm 8 linefeed
Martin Geisler
test-win32text: use (esc) lines instead of Python script
r12977 $ cat linefeed
% just linefeed
$ hg cat linefeed
% just linefeed
Matt Mackall
tests: unify test-win32text
r12494 $ hg st -q
$ hg revert -a linefeed
no changes needed to linefeed
Martin Geisler
test-win32text: use (esc) lines instead of Python script
r12977 $ cat linefeed
% just linefeed
Matt Mackall
tests: unify test-win32text
r12494 $ hg st -q
$ echo modified >> linefeed
$ hg st -q
M linefeed
$ hg revert -a
reverting linefeed
$ hg st -q
Martin Geisler
test-win32text: use (esc) lines instead of Python script
r12977 $ cat linefeed
% just linefeed\r (esc)
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..