test-inherit-mode.t
186 lines
| 5.3 KiB
| text/troff
|
Tads3Lexer
/ tests / test-inherit-mode.t
Matt Mackall
|
r22046 | #require unix-permissions | ||
Nicolas Dumazet
|
r12096 | |||
Matt Mackall
|
r22046 | test that new files created in .hg inherit the permissions from .hg/store | ||
Nicolas Dumazet
|
r12096 | |||
$ mkdir dir | ||||
just in case somebody has a strange $TMPDIR | ||||
$ chmod g-s dir | ||||
$ cd dir | ||||
$ cat >printmodes.py <<EOF | ||||
Augie Fackler
|
r33991 | > import os | ||
> import sys | ||||
Nicolas Dumazet
|
r12096 | > | ||
> allnames = [] | ||||
> isdir = {} | ||||
> for root, dirs, files in os.walk(sys.argv[1]): | ||||
> for d in dirs: | ||||
Adrian Buehlmann
|
r12743 | > name = os.path.join(root, d) | ||
> isdir[name] = 1 | ||||
> allnames.append(name) | ||||
Nicolas Dumazet
|
r12096 | > for f in files: | ||
Adrian Buehlmann
|
r12743 | > name = os.path.join(root, f) | ||
> allnames.append(name) | ||||
Nicolas Dumazet
|
r12096 | > allnames.sort() | ||
> for name in allnames: | ||||
> suffix = name in isdir and '/' or '' | ||||
Augie Fackler
|
r33991 | > print('%05o %s%s' % (os.lstat(name).st_mode & 0o7777, name, suffix)) | ||
Nicolas Dumazet
|
r12096 | > EOF | ||
$ cat >mode.py <<EOF | ||||
Augie Fackler
|
r33991 | > import os | ||
Nicolas Dumazet
|
r12096 | > import sys | ||
Augie Fackler
|
r33687 | > print('%05o' % os.lstat(sys.argv[1]).st_mode) | ||
Nicolas Dumazet
|
r12096 | > EOF | ||
$ umask 077 | ||||
$ hg init repo | ||||
$ cd repo | ||||
Boris Feld
|
r40825 | $ chmod 0770 .hg/store .hg/cache .hg/wcache | ||
Nicolas Dumazet
|
r12096 | |||
before commit | ||||
store can be written by the group, other files cannot | ||||
store is setgid | ||||
Matt Harbison
|
r39743 | $ "$PYTHON" ../printmodes.py . | ||
Nicolas Dumazet
|
r12096 | 00700 ./.hg/ | ||
00600 ./.hg/00changelog.i | ||||
Boris Feld
|
r40824 | 00770 ./.hg/cache/ | ||
Nicolas Dumazet
|
r12096 | 00600 ./.hg/requires | ||
00770 ./.hg/store/ | ||||
r49515 | 00600 ./.hg/store/requires | |||
Boris Feld
|
r40825 | 00770 ./.hg/wcache/ | ||
Nicolas Dumazet
|
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
|
r39743 | $ "$PYTHON" ../printmodes.py . | ||
Nicolas Dumazet
|
r12096 | 00700 ./.hg/ | ||
00600 ./.hg/00changelog.i | ||||
r51090 | 00660 ./.hg/branch | |||
Mads Kiilerich
|
r15886 | 00770 ./.hg/cache/ | ||
Brodie Rao
|
r20185 | 00660 ./.hg/cache/branch2-served | ||
Mads Kiilerich
|
r23786 | 00660 ./.hg/cache/rbc-names-v1 | ||
00660 ./.hg/cache/rbc-revs-v1 | ||||
Nicolas Dumazet
|
r12096 | 00660 ./.hg/dirstate | ||
FUJIWARA Katsunori
|
r33427 | 00660 ./.hg/fsmonitor.state (fsmonitor !) | ||
Nicolas Dumazet
|
r12096 | 00660 ./.hg/last-message.txt | ||
00600 ./.hg/requires | ||||
00770 ./.hg/store/ | ||||
r52074 | 00660 ./.hg/store/00changelog-150e1cfc.nd (rust !) | |||
00660 ./.hg/store/00changelog.d | ||||
Nicolas Dumazet
|
r12096 | 00660 ./.hg/store/00changelog.i | ||
r52074 | 00660 ./.hg/store/00changelog.n (rust !) | |||
Nicolas Dumazet
|
r12096 | 00660 ./.hg/store/00manifest.i | ||
00770 ./.hg/store/data/ | ||||
00770 ./.hg/store/data/dir/ | ||||
Gregory Szorc
|
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
|
r37433 | 00660 ./.hg/store/fncache (repofncache !) | ||
Pierre-Yves David
|
r15483 | 00660 ./.hg/store/phaseroots | ||
r49515 | 00600 ./.hg/store/requires | |||
Nicolas Dumazet
|
r12096 | 00660 ./.hg/store/undo | ||
Pierre-Yves David
|
r23904 | 00660 ./.hg/store/undo.backupfiles | ||
r51358 | 00660 ./.hg/undo.backup.branch.bck | |||
Nicolas Dumazet
|
r12096 | 00660 ./.hg/undo.desc | ||
Boris Feld
|
r40823 | 00770 ./.hg/wcache/ | ||
00711 ./.hg/wcache/checkisexec | ||||
Augie Fackler
|
r40866 | 007.. ./.hg/wcache/checklink (re) | ||
Boris Feld
|
r40823 | 00600 ./.hg/wcache/checklink-target | ||
r42131 | 00660 ./.hg/wcache/manifestfulltextcache (reporevlogstore !) | |||
Nicolas Dumazet
|
r12096 | 00700 ./dir/ | ||
00600 ./dir/bar | ||||
00600 ./foo | ||||
$ umask 007 | ||||
$ hg init ../push | ||||
before push | ||||
group can write everything | ||||
Matt Harbison
|
r39743 | $ "$PYTHON" ../printmodes.py ../push | ||
Nicolas Dumazet
|
r12096 | 00770 ../push/.hg/ | ||
00660 ../push/.hg/00changelog.i | ||||
Boris Feld
|
r40824 | 00770 ../push/.hg/cache/ | ||
Nicolas Dumazet
|
r12096 | 00660 ../push/.hg/requires | ||
00770 ../push/.hg/store/ | ||||
r49515 | 00660 ../push/.hg/store/requires | |||
Boris Feld
|
r40825 | 00770 ../push/.hg/wcache/ | ||
Nicolas Dumazet
|
r12096 | |||
$ umask 077 | ||||
$ hg -q push ../push | ||||
after push | ||||
group can still write everything | ||||
Matt Harbison
|
r39743 | $ "$PYTHON" ../printmodes.py ../push | ||
Nicolas Dumazet
|
r12096 | 00770 ../push/.hg/ | ||
00660 ../push/.hg/00changelog.i | ||||
r51090 | 00660 ../push/.hg/branch | |||
jfh
|
r13272 | 00770 ../push/.hg/cache/ | ||
Brodie Rao
|
r20185 | 00660 ../push/.hg/cache/branch2-base | ||
Joerg Sonnenberger
|
r47084 | 00660 ../push/.hg/cache/rbc-names-v1 | ||
00660 ../push/.hg/cache/rbc-revs-v1 | ||||
Nicolas Dumazet
|
r12096 | 00660 ../push/.hg/requires | ||
00770 ../push/.hg/store/ | ||||
r52074 | 00660 ../push/.hg/store/00changelog-b870a51b.nd (rust !) | |||
00660 ../push/.hg/store/00changelog.d | ||||
Nicolas Dumazet
|
r12096 | 00660 ../push/.hg/store/00changelog.i | ||
r52074 | 00660 ../push/.hg/store/00changelog.n (rust !) | |||
Nicolas Dumazet
|
r12096 | 00660 ../push/.hg/store/00manifest.i | ||
00770 ../push/.hg/store/data/ | ||||
00770 ../push/.hg/store/data/dir/ | ||||
Gregory Szorc
|
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
|
r37433 | 00660 ../push/.hg/store/fncache (repofncache !) | ||
r49515 | 00660 ../push/.hg/store/requires | |||
Nicolas Dumazet
|
r12096 | 00660 ../push/.hg/store/undo | ||
Pierre-Yves David
|
r23904 | 00660 ../push/.hg/store/undo.backupfiles | ||
r51358 | 00660 ../push/.hg/undo.backup.branch.bck | |||
Nicolas Dumazet
|
r12096 | 00660 ../push/.hg/undo.desc | ||
Boris Feld
|
r40825 | 00770 ../push/.hg/wcache/ | ||
Nicolas Dumazet
|
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
|
r16225 | $ chmod g+s .hg/store 2> /dev/null || true | ||
Nicolas Dumazet
|
r12096 | $ mkdir dir | ||
$ touch dir/file | ||||
$ hg ci -qAm 'add dir/file' | ||||
Matt Harbison
|
r39743 | $ storemode=`"$PYTHON" ../mode.py .hg/store` | ||
$ dirmode=`"$PYTHON" ../mode.py .hg/store/data/dir` | ||||
Nicolas Dumazet
|
r12096 | $ if [ "$storemode" != "$dirmode" ]; then | ||
> echo "$storemode != $dirmode" | ||||
Mads Kiilerich
|
r16912 | > fi | ||
$ cd .. | ||||
$ cd .. # g-s dir | ||||