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

r37961:32bc3815 default
r42778:97ada9b8 5.0.2 stable
Show More
test-ui-color.py
40 lines | 1023 B | text/x-python | PythonLexer
Pulkit Goyal
tests: make test-ui-color use absolute_import
r28915 from __future__ import absolute_import, print_function
Simon Heimberg
cleanup: remove unused imports...
r19322 import os
Pulkit Goyal
tests: make test-ui-color use absolute_import
r28915 from mercurial import (
dispatch,
ui as uimod,
)
Augie Fackler
tests: port test-ui-color.py to Python 3...
r37944 from mercurial.utils import (
stringutil,
)
Brodie Rao
color: call correct superclass method in write_err...
r11732
# ensure errors aren't buffered
Pierre-Yves David
color: drop the 'colorui' class...
r31095 testui = uimod.ui()
Brodie Rao
color: call correct superclass method in write_err...
r11732 testui.pushbuffer()
Pulkit Goyal
py3: add b'' to test-ui-color.py...
r36354 testui.write((b'buffered\n'))
testui.warn((b'warning\n'))
testui.write_err(b'error\n')
Yuya Nishihara
stringutil: flip the default of pprint() to bprefix=False...
r37961 print(stringutil.pprint(testui.popbuffer(), bprefix=True).decode('ascii'))
Idan Kamara
color: check if ui is already a subclass of colorui before wrapping it...
r14516
# test dispatch.dispatch with the same ui object
Pulkit Goyal
py3: make sure we open file in bytes mode...
r36355 hgrc = open(os.environ["HGRCPATH"], 'wb')
Pulkit Goyal
py3: add b'' to test-ui-color.py...
r36354 hgrc.write(b'[extensions]\n')
hgrc.write(b'color=\n')
Idan Kamara
color: check if ui is already a subclass of colorui before wrapping it...
r14516 hgrc.close()
Yuya Nishihara
ui: factor out ui.load() to create a ui without loading configs (API)...
r30559 ui_ = uimod.ui.load()
Pulkit Goyal
py3: add b'' to test-ui-color.py...
r36354 ui_.setconfig(b'ui', b'formatted', b'True')
Idan Kamara
color: check if ui is already a subclass of colorui before wrapping it...
r14516
Idan Kamara
ui: use I/O descriptors internally...
r14614 # we're not interested in the output, so write that to devnull
Pulkit Goyal
py3: make sure we open file in bytes mode...
r36355 ui_.fout = open(os.devnull, 'wb')
Idan Kamara
ui: use I/O descriptors internally...
r14614
Idan Kamara
color: check if ui is already a subclass of colorui before wrapping it...
r14516 # call some arbitrary command just so we go through
# color's wrapped _runcommand twice.
def runcmd():
Pulkit Goyal
py3: add b'' to test-ui-color.py...
r36354 dispatch.dispatch(dispatch.request([b'version', b'-q'], ui_))
Idan Kamara
color: check if ui is already a subclass of colorui before wrapping it...
r14516
runcmd()
Pierre-Yves David
color: drop the 'colorui' class...
r31095 print("colored? %s" % (ui_._colormode is not None))
Idan Kamara
color: check if ui is already a subclass of colorui before wrapping it...
r14516 runcmd()
Pierre-Yves David
color: drop the 'colorui' class...
r31095 print("colored? %s" % (ui_._colormode is not None))