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

r42131:e4ac7e63 default
r42778:97ada9b8 5.0.2 stable
Show More
test-inherit-mode.t
182 lines | 5.2 KiB | text/troff | Tads3Lexer
/ tests / test-inherit-mode.t
Matt Mackall
tests: replace exit 80 with #require
r22046 #require unix-permissions
Nicolas Dumazet
tests: unify test-inherit-mode
r12096
Matt Mackall
tests: replace exit 80 with #require
r22046 test that new files created in .hg inherit the permissions from .hg/store
Nicolas Dumazet
tests: unify test-inherit-mode
r12096
$ mkdir dir
just in case somebody has a strange $TMPDIR
$ chmod g-s dir
$ cd dir
$ cat >printmodes.py <<EOF
Augie Fackler
tests: update test-inherit-mode to pass our import checker
r33991 > from __future__ import absolute_import, print_function
> import os
> import sys
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 >
> allnames = []
> isdir = {}
> for root, dirs, files in os.walk(sys.argv[1]):
> for d in dirs:
Adrian Buehlmann
check-code: add 'no tab indent' check for unified tests...
r12743 > name = os.path.join(root, d)
> isdir[name] = 1
> allnames.append(name)
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 > for f in files:
Adrian Buehlmann
check-code: add 'no tab indent' check for unified tests...
r12743 > name = os.path.join(root, f)
> allnames.append(name)
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 > allnames.sort()
> for name in allnames:
> suffix = name in isdir and '/' or ''
Augie Fackler
tests: update test-inherit-mode to pass our import checker
r33991 > print('%05o %s%s' % (os.lstat(name).st_mode & 0o7777, name, suffix))
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 > EOF
$ cat >mode.py <<EOF
Augie Fackler
tests: update test-inherit-mode to pass our import checker
r33991 > from __future__ import absolute_import, print_function
> import os
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 > import sys
Augie Fackler
tests: clean up many print statements to be print functions instead...
r33687 > print('%05o' % os.lstat(sys.argv[1]).st_mode)
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 > EOF
$ umask 077
$ hg init repo
$ cd repo
Boris Feld
cache: create `wcache` directory at init time...
r40825 $ chmod 0770 .hg/store .hg/cache .hg/wcache
Nicolas Dumazet
tests: unify test-inherit-mode
r12096
before commit
store can be written by the group, other files cannot
store is setgid
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" ../printmodes.py .
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00700 ./.hg/
00600 ./.hg/00changelog.i
Boris Feld
cache: create `cache` directory at init time...
r40824 00770 ./.hg/cache/
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00600 ./.hg/requires
00770 ./.hg/store/
Boris Feld
cache: create `wcache` directory at init time...
r40825 00770 ./.hg/wcache/
Nicolas Dumazet
tests: unify test-inherit-mode
r12096
$ mkdir dir
$ touch foo dir/bar
$ hg ci -qAm 'add files'
after commit
working dir files can only be written by the owner
files created in .hg can be written by the group
(in particular, store/**, dirstate, branch cache file, undo files)
new directories are setgid
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" ../printmodes.py .
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00700 ./.hg/
00600 ./.hg/00changelog.i
Mads Kiilerich
localrepo: update branchcache in a more reliable way...
r15886 00770 ./.hg/cache/
Brodie Rao
branchmap: cache open/closed branch head information...
r20185 00660 ./.hg/cache/branch2-served
Mads Kiilerich
branchmap: use revbranchcache when updating branch map...
r23786 00660 ./.hg/cache/rbc-names-v1
00660 ./.hg/cache/rbc-revs-v1
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00660 ./.hg/dirstate
FUJIWARA Katsunori
tests: add extra output for fsmonitor at checking under .hg
r33427 00660 ./.hg/fsmonitor.state (fsmonitor !)
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00660 ./.hg/last-message.txt
00600 ./.hg/requires
00770 ./.hg/store/
00660 ./.hg/store/00changelog.i
00660 ./.hg/store/00manifest.i
00770 ./.hg/store/data/
00770 ./.hg/store/data/dir/
Gregory Szorc
tests: conditionalize tests for various repo features...
r37434 00660 ./.hg/store/data/dir/bar.i (reporevlogstore !)
00660 ./.hg/store/data/foo.i (reporevlogstore !)
00770 ./.hg/store/data/dir/bar/ (reposimplestore !)
00660 ./.hg/store/data/dir/bar/b80de5d138758541c5f05265ad144ab9fa86d1db (reposimplestore !)
00660 ./.hg/store/data/dir/bar/index (reposimplestore !)
00770 ./.hg/store/data/foo/ (reposimplestore !)
00660 ./.hg/store/data/foo/b80de5d138758541c5f05265ad144ab9fa86d1db (reposimplestore !)
00660 ./.hg/store/data/foo/index (reposimplestore !)
Gregory Szorc
simplestore: use a custom store for the simple store repo...
r37433 00660 ./.hg/store/fncache (repofncache !)
Pierre-Yves David
phases: set new commit in 1-phase
r15483 00660 ./.hg/store/phaseroots
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00660 ./.hg/store/undo
Pierre-Yves David
transaction: include backup file in the "undo" transaction...
r23904 00660 ./.hg/store/undo.backupfiles
Pierre-Yves David
phases: add rollback support
r15455 00660 ./.hg/store/undo.phaseroots
Laurent Charignon
localrepo: put bookmark move following commit in one transaction...
r26998 00660 ./.hg/undo.backup.dirstate
Alexander Solovyov
fix bookmarks rollback behavior...
r14266 00660 ./.hg/undo.bookmarks
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00660 ./.hg/undo.branch
00660 ./.hg/undo.desc
00660 ./.hg/undo.dirstate
Boris Feld
check-exec: write file in 'wcache' instead of 'cache'...
r40823 00770 ./.hg/wcache/
00711 ./.hg/wcache/checkisexec
Augie Fackler
tests: stabilize test-inherit-mode.t on FreeBSD and macOS again...
r40866 007.. ./.hg/wcache/checklink (re)
Boris Feld
check-exec: write file in 'wcache' instead of 'cache'...
r40823 00600 ./.hg/wcache/checklink-target
manifestcache: use `wcache` directory for manifest cache...
r42131 00660 ./.hg/wcache/manifestfulltextcache (reporevlogstore !)
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00700 ./dir/
00600 ./dir/bar
00600 ./foo
$ umask 007
$ hg init ../push
before push
group can write everything
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" ../printmodes.py ../push
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00770 ../push/.hg/
00660 ../push/.hg/00changelog.i
Boris Feld
cache: create `cache` directory at init time...
r40824 00770 ../push/.hg/cache/
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00660 ../push/.hg/requires
00770 ../push/.hg/store/
Boris Feld
cache: create `wcache` directory at init time...
r40825 00770 ../push/.hg/wcache/
Nicolas Dumazet
tests: unify test-inherit-mode
r12096
$ umask 077
$ hg -q push ../push
after push
group can still write everything
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" ../printmodes.py ../push
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00770 ../push/.hg/
00660 ../push/.hg/00changelog.i
jfh
move tags.cache and branchheads.cache to a collected cache folder .hg/cache/...
r13272 00770 ../push/.hg/cache/
Brodie Rao
branchmap: cache open/closed branch head information...
r20185 00660 ../push/.hg/cache/branch2-base
Mateusz Kwapich
localrepo: use dirstate savebackup instead of handling dirstate file manually...
r29191 00660 ../push/.hg/dirstate
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00660 ../push/.hg/requires
00770 ../push/.hg/store/
00660 ../push/.hg/store/00changelog.i
00660 ../push/.hg/store/00manifest.i
00770 ../push/.hg/store/data/
00770 ../push/.hg/store/data/dir/
Gregory Szorc
tests: conditionalize tests for various repo features...
r37434 00660 ../push/.hg/store/data/dir/bar.i (reporevlogstore !)
00660 ../push/.hg/store/data/foo.i (reporevlogstore !)
00770 ../push/.hg/store/data/dir/bar/ (reposimplestore !)
00660 ../push/.hg/store/data/dir/bar/b80de5d138758541c5f05265ad144ab9fa86d1db (reposimplestore !)
00660 ../push/.hg/store/data/dir/bar/index (reposimplestore !)
00770 ../push/.hg/store/data/foo/ (reposimplestore !)
00660 ../push/.hg/store/data/foo/b80de5d138758541c5f05265ad144ab9fa86d1db (reposimplestore !)
00660 ../push/.hg/store/data/foo/index (reposimplestore !)
Gregory Szorc
simplestore: use a custom store for the simple store repo...
r37433 00660 ../push/.hg/store/fncache (repofncache !)
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00660 ../push/.hg/store/undo
Pierre-Yves David
transaction: include backup file in the "undo" transaction...
r23904 00660 ../push/.hg/store/undo.backupfiles
Pierre-Yves David
phases: add rollback support
r15455 00660 ../push/.hg/store/undo.phaseroots
Alexander Solovyov
fix bookmarks rollback behavior...
r14266 00660 ../push/.hg/undo.bookmarks
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 00660 ../push/.hg/undo.branch
00660 ../push/.hg/undo.desc
00660 ../push/.hg/undo.dirstate
Boris Feld
cache: create `wcache` directory at init time...
r40825 00770 ../push/.hg/wcache/
Nicolas Dumazet
tests: unify test-inherit-mode
r12096
Test that we don't lose the setgid bit when we call chmod.
Not all systems support setgid directories (e.g. HFS+), so
just check that directories have the same mode.
$ cd ..
$ hg init setgid
$ cd setgid
$ chmod g+rwx .hg/store
Javi Merino
tests: ignore the return code of chmod in test-inherit-mode...
r16225 $ chmod g+s .hg/store 2> /dev/null || true
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 $ mkdir dir
$ touch dir/file
$ hg ci -qAm 'add dir/file'
Matt Harbison
tests: quote PYTHON usage...
r39743 $ storemode=`"$PYTHON" ../mode.py .hg/store`
$ dirmode=`"$PYTHON" ../mode.py .hg/store/data/dir`
Nicolas Dumazet
tests: unify test-inherit-mode
r12096 $ if [ "$storemode" != "$dirmode" ]; then
> echo "$storemode != $dirmode"
Mads Kiilerich
tests: cleanup of tests that got lost in their own nested directories...
r16912 > fi
$ cd ..
$ cd .. # g-s dir