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

r42311:9d5692d6 default
r42778:97ada9b8 5.0.2 stable
Show More
base-revsets.txt
52 lines | 1.7 KiB | text/plain | TextLexer
# Base Revsets to be used with revsetbenchmarks.py script
#
# The goal of this file is to gather a limited amount of revsets that allow a
# good coverage of the internal revsets mechanisms. Revsets included should not
# be selected for their individual implementation, but for what they reveal of
# the internal implementation of smartsets classes (and their interactions).
#
# Use and update this file when you change internal implementation of these
# smartsets classes. Please include a comment explaining what each of your
# addition is testing. Also check if your changes to the smartset class makes
# some of the tests inadequate and replace them with a new one testing the same
# behavior.
#
# If you want to benchmark revsets predicate itself, check 'all-revsets.txt'.
#
# The current content of this file is currently likely not reaching this goal
# entirely, feel free, to audit its content and comment on each revset to
# highlight what internal mechanisms they test.
all()
draft()
::tip
draft() and ::tip
::tip and draft()
0::tip
roots(0::tip)
author(lmoscovicz)
author(mpm)
author(lmoscovicz) or author(mpm)
author(mpm) or author(lmoscovicz)
tip:0
0::
# those two `roots(...)` inputs are close to what phase movement use.
roots((tip~100::) - (tip~100::tip))
roots((0::) - (0::tip))
42:68 and roots(42:tip)
::p1(p1(tip))::
public()
:10000 and public()
draft()
:10000 and draft()
roots((0:tip)::)
(not public() - obsolete())
(_intlist('20000\x0020001')) and merge()
parents(20000)
(20000::) - (20000)
# The one below is used by rebase
(children(ancestor(tip~5, tip)) and ::(tip~5))::
heads(commonancestors(last(head(), 2)))
heads(-10000:-1)
roots(-10000:-1)
only(max(head()), min(head()))