##// END OF EJS Templates
posix: always seek to EOF when opening a file in append mode...
posix: always seek to EOF when opening a file in append mode Python 3 already does this, so skip it there. Consider the program: #include <stdio.h> int main() { FILE *f = fopen("narf", "w"); fprintf(f, "narf\n"); fclose(f); f = fopen("narf", "a"); printf("%ld\n", ftell(f)); fprintf(f, "troz\n"); printf("%ld\n", ftell(f)); return 0; } on macOS, FreeBSD, and Linux with glibc, this program prints 5 10 but on musl libc (Alpine Linux and probably others) this prints 0 10 By my reading of https://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html this is technically correct, specifically: > Opening a file with append mode (a as the first character in the > mode argument) shall cause all subsequent writes to the file to be > forced to the then current end-of-file, regardless of intervening > calls to fseek(). in other words, the file position doesn't really matter in append-mode files, and we can't depend on it being at all meaningful unless we perform a seek() before tell() after open(..., 'a'). Experimentally after a .write() we can do a .tell() and it'll always be reasonable, but I'm unclear from reading the specification if that's a smart thing to rely on. This matches what we do on Windows and what Python 3 does for free, so let's just be consistent. Thanks to Yuya for the idea.

File last commit:

r39417:f5e9d074 default
r42778:97ada9b8 5.0.2 stable
Show More
test-casefolding.t
257 lines | 4.7 KiB | text/troff | Tads3Lexer
/ tests / test-casefolding.t
Matt Mackall
tests: replace exit 80 with #require
r22046 #require icasefs
Brodie Rao
tests: unify test-casefolding
r12603
Mads Kiilerich
update: don't clobber untracked files with wrong casing
r15538 $ hg debugfs | grep 'case-sensitive:'
case-sensitive: no
Brodie Rao
tests: unify test-casefolding
r12603 test file addition with bad case
$ hg init repo1
$ cd repo1
$ echo a > a
$ hg add A
$ hg st
A a
$ hg ci -m adda
$ hg manifest
a
$ cd ..
test case collision on rename (issue750)
$ hg init repo2
$ cd repo2
$ echo a > a
$ hg --debug ci -Am adda
adding a
Matt Harbison
tests: fix test-casefolding.t output...
r23779 committing files:
Brodie Rao
tests: unify test-casefolding
r12603 a
Matt Harbison
tests: fix test-casefolding.t output...
r23779 committing manifest
committing changelog
Matt Harbison
test-casefolding: sync with latest code changes...
r32298 updating the branch cache
Brodie Rao
tests: unify test-casefolding
r12603 committed changeset 0:07f4944404050f47db2e5c5071e0e84e7a27bba9
Matt Mackall
tests: remove case-folding false positive
r16288
Case-changing renames should work:
Brodie Rao
tests: unify test-casefolding
r12603
Matt Mackall
tests: remove case-folding false positive
r16288 $ hg mv a A
$ hg mv A a
Brodie Rao
tests: unify test-casefolding
r12603 $ hg st
Patrick Mezard
dirstate: preserve path components case on renames (issue3402)...
r16542
Martin von Zweigbergk
dirstate.walk: don't report same file stat multiple times...
r24621 addremove after case-changing rename has no effect (issue4590)
$ hg mv a A
$ hg addremove
recording removal of a as rename to A (100% similar)
$ hg revert --all
forgetting A
undeleting a
Patrick Mezard
dirstate: preserve path components case on renames (issue3402)...
r16542 test changing case of path components
$ mkdir D
$ echo b > D/b
$ hg ci -Am addb D/b
$ hg mv D/b d/b
Simon Farnsworth
tests: fix test-casefolding.t...
r30223 D/b: not overwriting - file already committed
Pulkit Goyal
tests: update test-casefolding.t with recent changes...
r39417 ('hg rename --force' to replace the file by recording a rename)
[1]
Patrick Mezard
dirstate: preserve path components case on renames (issue3402)...
r16542 $ hg mv D/b d/c
$ hg st
A D/c
R D/b
$ mv D temp
$ mv temp d
$ hg st
A D/c
R D/b
$ hg revert -aq
$ rm d/c
$ echo c > D/c
$ hg add D/c
$ hg st
A D/c
$ hg ci -m addc D/c
$ hg mv d/b d/e
$ hg st
A D/e
R D/b
$ hg revert -aq
$ rm d/e
$ hg mv d/b D/B
$ hg st
A D/B
R D/b
Brodie Rao
tests: unify test-casefolding
r12603 $ cd ..
test case collision between revisions (issue912)
$ hg init repo3
$ cd repo3
$ echo a > a
$ hg ci -Am adda
adding a
$ hg rm a
$ hg ci -Am removea
$ echo A > A
on linux hfs keeps the old case stored, force it
$ mv a aa
$ mv aa A
$ hg ci -Am addA
adding A
used to fail under case insensitive fs
$ hg up -C 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg up -C
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
Mads Kiilerich
update: don't clobber untracked files with wrong casing
r15538
no clobbering of untracked files with wrong casing
$ hg up -r null
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo gold > a
$ hg up
Matt Mackall
merge: fix unknown file merge detection for case-folding systems...
r16284 A: untracked file differs
Jordi Gutiérrez Hermoso
merge: report all files in _checkunknown...
r15894 abort: untracked files in working directory differ from files in requested revision
Mads Kiilerich
update: don't clobber untracked files with wrong casing
r15538 [255]
$ cat a
gold
FUJIWARA Katsunori
largefiles: check existence of the file with case awareness of the filesystem...
r19160 $ rm a
test that normal file in different case on target context is not
unlinked by largefiles extension.
$ cat >> .hg/hgrc <<EOF
> [extensions]
> largefiles=
> EOF
$ hg update -q -C 1
$ hg status -A
$ echo 'A as largefiles' > A
$ hg add --large A
$ hg commit -m '#3'
created new head
$ hg manifest -r 3
.hglf/A
$ hg manifest -r 0
a
$ hg update -q -C 0
$ hg status -A
C a
FUJIWARA Katsunori
largefiles: check unknown files with case awareness of the filesystem...
r19161 $ hg update -q -C 3
$ hg update -q 0
Mads Kiilerich
update: don't clobber untracked files with wrong casing
r15538
Matt Harbison
dirstate: ensure mv source is marked deleted when walking icasefs (issue4760)...
r25877 $ hg up -C -r 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg mv A a
$ hg diff -g > rename.diff
$ hg ci -m 'A -> a'
$ hg up -q '.^'
$ hg import rename.diff -m "import rename A -> a"
applying rename.diff
$ hg st
? rename.diff
$ hg files
a
$ find * | sort
a
rename.diff
$ rm rename.diff
Brodie Rao
tests: unify test-casefolding
r12603 $ cd ..
FUJIWARA Katsunori
dirstate: avoid normalizing letter case on icasefs for exact match (issue3340)...
r16313
FUJIWARA Katsunori
dirstate: fix some problems for recursive case normalization (issue3342)...
r16323 issue 3342: file in nested directory causes unexpected abort
$ hg init issue3342
$ cd issue3342
$ mkdir -p a/B/c/D
$ echo e > a/B/c/D/e
$ hg add a/B/c/D/e
Matt Harbison
revert: restore the ability to revert across case only renames (issue4481)...
r24857 $ hg ci -m 'add e'
issue 4481: revert across case only renames
$ hg mv a/B/c/D/e a/B/c/d/E
$ hg ci -m "uppercase E"
$ echo 'foo' > a/B/c/D/E
$ hg ci -m 'e content change'
$ hg revert --all -r 0
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 removing a/B/c/D/E
adding a/B/c/D/e
Matt Harbison
revert: restore the ability to revert across case only renames (issue4481)...
r24857 $ find * | sort
a
a/B
a/B/c
a/B/c/D
a/B/c/D/e
a/B/c/D/e.orig
FUJIWARA Katsunori
dirstate: fix some problems for recursive case normalization (issue3342)...
r16323
$ cd ..
FUJIWARA Katsunori
dirstate: avoid normalizing letter case on icasefs for exact match (issue3340)...
r16313 issue 3340: mq does not handle case changes correctly
in addition to reported case, 'hg qrefresh' is also tested against
case changes.
$ echo "[extensions]" >> $HGRCPATH
$ echo "mq=" >> $HGRCPATH
$ hg init issue3340
$ cd issue3340
$ echo a > mIxEdCaSe
$ hg add mIxEdCaSe
$ hg commit -m '#0'
$ hg rename mIxEdCaSe tmp
$ hg rename tmp MiXeDcAsE
$ hg status -A
A MiXeDcAsE
mIxEdCaSe
R mIxEdCaSe
$ hg qnew changecase
$ hg status -A
C MiXeDcAsE
$ hg qpop -a
popping changecase
patch queue now empty
$ hg qnew refresh-casechange
$ hg status -A
C mIxEdCaSe
$ hg rename mIxEdCaSe tmp
$ hg rename tmp MiXeDcAsE
$ hg status -A
A MiXeDcAsE
mIxEdCaSe
R mIxEdCaSe
$ hg qrefresh
$ hg status -A
C MiXeDcAsE
Durham Goode
mq: fix qrefresh case sensitivity (issue3271)...
r17888 $ hg qpop -a
popping refresh-casechange
patch queue now empty
$ hg qnew refresh-pattern
$ hg status
$ echo A > A
$ hg add
adding A
$ hg qrefresh a # issue 3271, qrefresh with file handled case wrong
$ hg status # empty status means the qrefresh worked
Augie Fackler
test-casefolding.t: demonstrate a bug with HFS+ ignoring some codepoints
r23595 #if osx
We assume anyone running the tests on a case-insensitive volume on OS
X will be using HFS+. If that's not true, this test will fail.
$ rm A
Matt Harbison
py3: suppress the output from .write() calls in the remaining tests
r39939 >>> open(u'a\u200c'.encode('utf-8'), 'w').write('unicode is fun') and None
Augie Fackler
test-casefolding.t: demonstrate a bug with HFS+ ignoring some codepoints
r23595 $ hg status
M A
Augie Fackler
darwin: omit ignorable codepoints when normcase()ing a file path...
r23597
Augie Fackler
test-casefolding.t: demonstrate a bug with HFS+ ignoring some codepoints
r23595 #endif
Augie Fackler
darwin: omit ignorable codepoints when normcase()ing a file path...
r23597
FUJIWARA Katsunori
dirstate: avoid normalizing letter case on icasefs for exact match (issue3340)...
r16313 $ cd ..