diff --git a/tests/test-inherit-mode.out b/tests/test-inherit-mode.out deleted file mode 100644 --- a/tests/test-inherit-mode.out +++ /dev/null @@ -1,59 +0,0 @@ -% before commit -% store can be written by the group, other files cannot -% store is setgid -00700 ./.hg/ -00600 ./.hg/00changelog.i -00600 ./.hg/requires -00770 ./.hg/store/ - -% 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 -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 - -% before push -% group can write everything -00770 ../push/.hg/ -00660 ../push/.hg/00changelog.i -00660 ../push/.hg/requires -00770 ../push/.hg/store/ - -% after push -% group can still write everything -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 diff --git a/tests/test-inherit-mode b/tests/test-inherit-mode.t old mode 100755 new mode 100644 rename from tests/test-inherit-mode rename to tests/test-inherit-mode.t --- a/tests/test-inherit-mode +++ b/tests/test-inherit-mode.t @@ -1,91 +1,140 @@ -#!/bin/sh +test that new files created in .hg inherit the permissions from .hg/store + + + $ "$TESTDIR/hghave" unix-permissions || exit 80 -# test that new files created in .hg inherit the permissions from .hg/store + $ mkdir dir -"$TESTDIR/hghave" unix-permissions || exit 80 +just in case somebody has a strange $TMPDIR + + $ chmod g-s dir + $ cd dir -mkdir dir -# just in case somebody has a strange $TMPDIR -chmod g-s dir -cd dir - -cat >printmodes.py <printmodes.py < 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 -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 < 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 -cat >mode.py < /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 + $ 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