mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
tests: unify test-inherit-mode
This commit is contained in:
parent
fc46cf6cbe
commit
d6c7f98ff2
@ -1,91 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# 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
|
||||
|
||||
echo '% before commit'
|
||||
echo '% store can be written by the group, other files cannot'
|
||||
echo '% store is setgid'
|
||||
python ../printmodes.py .
|
||||
|
||||
mkdir dir
|
||||
touch foo dir/bar
|
||||
hg ci -qAm 'add files'
|
||||
|
||||
echo
|
||||
echo '% after commit'
|
||||
echo '% working dir files can only be written by the owner'
|
||||
echo '% files created in .hg can be written by the group'
|
||||
echo '% (in particular, store/**, dirstate, branch cache file, undo files)'
|
||||
echo '% new directories are setgid'
|
||||
python ../printmodes.py .
|
||||
|
||||
umask 007
|
||||
hg init ../push
|
||||
echo
|
||||
echo '% before push'
|
||||
echo '% group can write everything'
|
||||
python ../printmodes.py ../push
|
||||
|
||||
umask 077
|
||||
hg -q push ../push
|
||||
echo
|
||||
echo '% after push'
|
||||
echo '% group can still write everything'
|
||||
python ../printmodes.py ../push
|
||||
|
||||
# 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
|
||||
|
@ -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
|
140
tests/test-inherit-mode.t
Normal file
140
tests/test-inherit-mode.t
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user