test-inherit-mode
91 lines
| 1.9 KiB
| text/plain
|
TextLexer
/ tests / test-inherit-mode
Alexis S. L. Carvalho
|
r6064 | #!/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 | ||||
Alexis S. L. Carvalho
|
r6113 | cat >mode.py <<EOF | ||
import sys | ||||
import os | ||||
print '%05o' % os.lstat(sys.argv[1]).st_mode | ||||
EOF | ||||
Alexis S. L. Carvalho
|
r6064 | umask 077 | ||
hg init repo | ||||
cd repo | ||||
Thomas Arendsen Hein
|
r6073 | chmod 0770 .hg/store | ||
Alexis S. L. Carvalho
|
r6064 | |||
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' | ||||
Alexis S. L. Carvalho
|
r6160 | echo '% (in particular, store/**, dirstate, branch cache file, undo files)' | ||
Alexis S. L. Carvalho
|
r6064 | 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 | ||||
Alexis S. L. Carvalho
|
r6113 | |||
# 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 | ||||
Alexis S. L. Carvalho
|
r6301 | chmod g+rwx .hg/store | ||
Alexis S. L. Carvalho
|
r6113 | 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 | ||||