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

r37946:76d0a343 default
r42778:97ada9b8 5.0.2 stable
Show More
test-ui-verbosity.py
55 lines | 1.5 KiB | text/x-python | PythonLexer
/ tests / test-ui-verbosity.py
Pulkit Goyal
py3: make test-ui-verbosity use absolute_import
r28679 from __future__ import absolute_import, print_function
Pulkit Goyal
py3: make test-ui-verbosity use print_function
r28678
Martin Geisler
tests: renamed Python tests to .py
r8449 import os
Yuya Nishihara
tests: alias ui as uimod in test-revlog-ancestry/test-ui-verbosity
r28842 from mercurial import (
Pulkit Goyal
py3: use range instead of xrange on py3 in tests/test-ui-verbosity.py...
r36308 pycompat,
Yuya Nishihara
tests: alias ui as uimod in test-revlog-ancestry/test-ui-verbosity
r28842 ui as uimod,
)
Martin Geisler
tests: renamed Python tests to .py
r8449
Pulkit Goyal
py3: use range instead of xrange on py3 in tests/test-ui-verbosity.py...
r36308 if pycompat.ispy3:
xrange = range
Martin Geisler
tests: renamed Python tests to .py
r8449 hgrc = os.environ['HGRCPATH']
f = open(hgrc)
basehgrc = f.read()
f.close()
Pulkit Goyal
py3: make test-ui-verbosity use print_function
r28678 print(' hgrc settings command line options final result ')
print(' quiet verbo debug quiet verbo debug quiet verbo debug')
Martin Geisler
tests: renamed Python tests to .py
r8449
for i in xrange(64):
hgrc_quiet = bool(i & 1<<0)
hgrc_verbose = bool(i & 1<<1)
hgrc_debug = bool(i & 1<<2)
cmd_quiet = bool(i & 1<<3)
cmd_verbose = bool(i & 1<<4)
cmd_debug = bool(i & 1<<5)
f = open(hgrc, 'w')
f.write(basehgrc)
f.write('\n[ui]\n')
if hgrc_quiet:
f.write('quiet = True\n')
if hgrc_verbose:
f.write('verbose = True\n')
if hgrc_debug:
f.write('debug = True\n')
f.close()
Yuya Nishihara
ui: factor out ui.load() to create a ui without loading configs (API)...
r30559 u = uimod.ui.load()
Martin Geisler
tests: renamed Python tests to .py
r8449 if cmd_quiet or cmd_debug or cmd_verbose:
Augie Fackler
tests: port test-ui-verbosity.py to Python 3...
r37946 u.setconfig(b'ui', b'quiet', pycompat.bytestr(bool(cmd_quiet)))
u.setconfig(b'ui', b'verbose', pycompat.bytestr(bool(cmd_verbose)))
u.setconfig(b'ui', b'debug', pycompat.bytestr(bool(cmd_debug)))
Martin Geisler
tests: renamed Python tests to .py
r8449
check = ''
if u.debugflag:
if not u.verbose or u.quiet:
check = ' *'
elif u.verbose and u.quiet:
check = ' +'
Pulkit Goyal
py3: make test-ui-verbosity use print_function
r28678 print(('%2d %5s %5s %5s %5s %5s %5s -> %5s %5s %5s%s'
Martin Geisler
tests: renamed Python tests to .py
r8449 % (i, hgrc_quiet, hgrc_verbose, hgrc_debug,
cmd_quiet, cmd_verbose, cmd_debug,
Pulkit Goyal
py3: make test-ui-verbosity use print_function
r28678 u.quiet, u.verbose, u.debugflag, check)))