Skip to content
Snippets Groups Projects
Commit c608f67a authored by Alexis S. L. Carvalho's avatar Alexis S. L. Carvalho
Browse files

add test-inherit-mode

parent b74a0c4b
No related branches found
No related tags found
No related merge requests found
#!/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
umask 077
hg init repo
cd repo
chmod 02770 .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)'
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
% before commit
% store can be written by the group, other files cannot
% store is setgid
00700 ./.hg/
00600 ./.hg/00changelog.i
00600 ./.hg/requires
02770 ./.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)
% new directories are setgid
00700 ./.hg/
00600 ./.hg/00changelog.i
00660 ./.hg/dirstate
00600 ./.hg/requires
02770 ./.hg/store/
00660 ./.hg/store/00changelog.i
00660 ./.hg/store/00manifest.i
02770 ./.hg/store/data/
02770 ./.hg/store/data/dir/
00660 ./.hg/store/data/dir/bar.i
00660 ./.hg/store/data/foo.i
00600 ./.hg/store/undo
00660 ./.hg/undo.branch
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/branch.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
00600 ../push/.hg/store/undo
00660 ../push/.hg/undo.branch
00660 ../push/.hg/undo.dirstate
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment