Mercurial > hg
diff tests/test-inherit-mode.t @ 12096:bb69460e9d2d
tests: unify test-inherit-mode
author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
---|---|
date | Mon, 30 Aug 2010 12:46:19 +0900 |
parents | tests/test-inherit-mode@68cfd7d208a5 |
children | 4c4aeaab2339 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-inherit-mode.t Mon Aug 30 12:46:19 2010 +0900 @@ -0,0 +1,140 @@ +test that new files created in .hg inherit the permissions from .hg/store + + + $ "$TESTDIR/hghave" unix-permissions || exit 80 + + $ mkdir dir + +just in case somebody has a strange $TMPDIR + + $ chmod g-s dir + $ cd dir + + $ cat >printmodes.py <<EOF + > import os, sys + > + > allnames = [] + > isdir = {} + > for root, dirs, files in os.walk(sys.argv[1]): + > for d in dirs: + > name = os.path.join(root, d) + > isdir[name] = 1 + > allnames.append(name) + > for f in files: + > name = os.path.join(root, f) + > allnames.append(name) + > allnames.sort() + > for name in allnames: + > suffix = name in isdir and '/' or '' + > print '%05o %s%s' % (os.lstat(name).st_mode & 07777, name, suffix) + > EOF + + $ cat >mode.py <<EOF + > import sys + > import os + > print '%05o' % os.lstat(sys.argv[1]).st_mode + > EOF + + $ umask 077 + + $ hg init repo + $ cd repo + + $ chmod 0770 .hg/store + +before commit +store can be written by the group, other files cannot +store is setgid + + $ python ../printmodes.py . + 00700 ./.hg/ + 00600 ./.hg/00changelog.i + 00600 ./.hg/requires + 00770 ./.hg/store/ + + $ 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 + + $ python ../printmodes.py . + 00700 ./.hg/ + 00600 ./.hg/00changelog.i + 00660 ./.hg/dirstate + 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/ + 00660 ./.hg/store/data/dir/bar.i + 00660 ./.hg/store/data/foo.i + 00660 ./.hg/store/fncache + 00660 ./.hg/store/undo + 00660 ./.hg/undo.branch + 00660 ./.hg/undo.desc + 00660 ./.hg/undo.dirstate + 00700 ./dir/ + 00600 ./dir/bar + 00600 ./foo + + $ umask 007 + $ hg init ../push + +before push +group can write everything + + $ python ../printmodes.py ../push + 00770 ../push/.hg/ + 00660 ../push/.hg/00changelog.i + 00660 ../push/.hg/requires + 00770 ../push/.hg/store/ + + $ umask 077 + $ hg -q push ../push + +after push +group can still write everything + + $ python ../printmodes.py ../push + 00770 ../push/.hg/ + 00660 ../push/.hg/00changelog.i + 00660 ../push/.hg/branchheads.cache + 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/ + 00660 ../push/.hg/store/data/dir/bar.i + 00660 ../push/.hg/store/data/foo.i + 00660 ../push/.hg/store/fncache + 00660 ../push/.hg/store/undo + 00660 ../push/.hg/undo.branch + 00660 ../push/.hg/undo.desc + 00660 ../push/.hg/undo.dirstate + + +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 + $ chmod g+s .hg/store 2> /dev/null + $ mkdir dir + $ touch dir/file + $ hg ci -qAm 'add dir/file' + $ storemode=`python ../mode.py .hg/store` + $ dirmode=`python ../mode.py .hg/store/data/dir` + $ if [ "$storemode" != "$dirmode" ]; then + > echo "$storemode != $dirmode" + $ fi