##// 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:

r37301:d4e62df1 default
r42778:97ada9b8 5.0.2 stable
Show More
test-changelog-exec.t
57 lines | 1.1 KiB | text/troff | Tads3Lexer
/ tests / test-changelog-exec.t
Matt Mackall
tests: replace exit 80 with #require
r22046 #require execbit
Martin Geisler
tests: unify test-changelog-exec
r11875 b51a8138292a introduced a regression where we would mention in the
changelog executable files added by the second parent of a merge. Test
that that doesn't happen anymore
$ hg init repo
$ cd repo
$ echo foo > foo
$ hg ci -qAm 'add foo'
$ echo bar > bar
$ chmod +x bar
$ hg ci -qAm 'add bar'
manifest of p2:
$ hg manifest
bar
foo
$ hg up -qC 0
$ echo >> foo
$ hg ci -m 'change foo'
created new head
manifest of p1:
$ hg manifest
foo
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Matt Mackall
commit: catch changed exec bit on files from p1 (issue4382)
r22492 $ chmod +x foo
Martin Geisler
tests: unify test-changelog-exec
r11875 $ hg ci -m 'merge'
Matt Mackall
commit: catch changed exec bit on files from p1 (issue4382)
r22492 this should not mention bar but should mention foo:
Martin Geisler
tests: unify test-changelog-exec
r11875
$ hg tip -v
Matt Mackall
commit: catch changed exec bit on files from p1 (issue4382)
r22492 changeset: 3:c53d17ff3380
Martin Geisler
tests: unify test-changelog-exec
r11875 tag: tip
parent: 2:ed1b79f46b9a
parent: 1:d394a8db219b
user: test
date: Thu Jan 01 00:00:00 1970 +0000
Matt Mackall
commit: catch changed exec bit on files from p1 (issue4382)
r22492 files: foo
Martin Geisler
tests: unify test-changelog-exec
r11875 description:
merge
Sune Foldager
tests: fix deprecated use of hg debugdata/debugindex...
r14182 $ hg debugindex bar
Gregory Szorc
debugcommands: drop offset and length from debugindex by default...
r37301 rev linkrev nodeid p1 p2
0 1 b004912a8510 000000000000 000000000000
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..