cc815f59e6
Honor the repository permssions set with the umask or core.sharedRepository when creating directories by using tools.MkdirAll. Pass an appropriate configuration or filesystem object through as needed to ensure that we can query the proper permissions. Add a test that these code paths work by cloning a new repository and then performing some operations on it. Note that in the test, we match patterns with either the setgid bit clear or set, since it may be set or not depending on whether the system has SysV or BSD group semantics.
115 lines
2.9 KiB
Bash
Executable File
115 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
. "$(dirname "$0")/testlib.sh"
|
|
|
|
if [ $IS_WINDOWS -eq 1 ]; then
|
|
echo "skip $0: Windows lacks POSIX permissions"
|
|
exit
|
|
fi
|
|
|
|
clean_setup () {
|
|
mkdir "$1"
|
|
cd "$1"
|
|
git init
|
|
}
|
|
|
|
perms_for () {
|
|
local file=$(echo "$1" | sed "s!^\(..\)\(..\)!.git/lfs/objects/\1/\2/\1\2!")
|
|
ls -l "$file" | awk '{print $1}'
|
|
}
|
|
|
|
assert_dir_perms () {
|
|
local perms="$1"
|
|
[ "$(find .git/lfs -type d -ls | grep -vE "$perms")" = "" ]
|
|
}
|
|
|
|
begin_test "honors umask"
|
|
(
|
|
set -e
|
|
clean_setup "simple"
|
|
|
|
umask 027
|
|
echo "whatever" | git lfs clean | tee clean.log
|
|
[ "$(perms_for cd293be6cea034bd45a0352775a219ef5dc7825ce55d1f7dae9762d80ce64411)" = "-rw-r-----" ]
|
|
|
|
umask 007
|
|
echo "random" | git lfs clean | tee clean.log
|
|
[ "$(perms_for 87c1b129fbadd7b6e9abc0a9ef7695436d767aece042bec198a97e949fcbe14c)" = "-rw-rw----" ]
|
|
)
|
|
end_test
|
|
|
|
begin_test "honors umask for directories"
|
|
(
|
|
set -e
|
|
reponame="simple-directories"
|
|
setup_remote_repo_with_file "$reponame" "a.dat"
|
|
|
|
umask 027
|
|
clone_repo "$reponame" "$reponame-a"
|
|
echo "whatever" | git lfs clean
|
|
assert_dir_perms "drwxr-[xs]---"
|
|
|
|
umask 007
|
|
clone_repo "$reponame" "$reponame-b"
|
|
echo "whatever" | git lfs clean
|
|
assert_dir_perms "drwxrw[xs]---"
|
|
)
|
|
end_test
|
|
|
|
# This is tested more comprehensively in the unit tests.
|
|
begin_test "honors core.sharedrepository"
|
|
(
|
|
set -e
|
|
clean_setup "shared-repo"
|
|
|
|
umask 027
|
|
git config core.sharedRepository 0660
|
|
echo "whatever" | git lfs clean | tee clean.log
|
|
[ "$(perms_for cd293be6cea034bd45a0352775a219ef5dc7825ce55d1f7dae9762d80ce64411)" = "-rw-rw----" ]
|
|
|
|
git config core.sharedRepository everybody
|
|
echo "random" | git lfs clean | tee clean.log
|
|
[ "$(perms_for 87c1b129fbadd7b6e9abc0a9ef7695436d767aece042bec198a97e949fcbe14c)" = "-rw-rw-r--" ]
|
|
|
|
git config core.sharedRepository false
|
|
echo "something else" | git lfs clean | tee clean.log
|
|
[ "$(perms_for a1621be95040239ee14362c16e20510ddc20f527d772d823b2a1679b33f5cd74)" = "-rw-r-----" ]
|
|
|
|
umask 007
|
|
echo "who cares" | git lfs clean | tee clean.log
|
|
[ "$(perms_for 261ded5f01a8ca18d9fb1958e8f58c53fa77648cc88a6d67c93d241a91133f3e)" = "-rw-rw----" ]
|
|
|
|
)
|
|
end_test
|
|
|
|
begin_test "honors core.sharedrepository for directories"
|
|
(
|
|
set -e
|
|
reponame="shared-repo-directories"
|
|
setup_remote_repo_with_file "$reponame" "a.dat"
|
|
|
|
umask 027
|
|
git config --global core.sharedRepository 0660
|
|
clone_repo "$reponame" "$reponame-a"
|
|
echo "whatever" | git lfs clean
|
|
assert_dir_perms "drwxrw[xs]---"
|
|
|
|
git config --global core.sharedRepository everybody
|
|
clone_repo "$reponame" "$reponame-b"
|
|
echo "whatever" | git lfs clean
|
|
assert_dir_perms "drwxrw[xs]r-x"
|
|
|
|
git config --global core.sharedRepository false
|
|
clone_repo "$reponame" "$reponame-c"
|
|
echo "whatever" | git lfs clean
|
|
assert_dir_perms "drwxr-[xs]---"
|
|
|
|
umask 007
|
|
clone_repo "$reponame" "$reponame-d"
|
|
echo "whatever" | git lfs clean
|
|
assert_dir_perms "drwxrw[xs]---"
|
|
|
|
git config --global --unset-all core.sharedRepository
|
|
)
|
|
end_test
|