diff options
Diffstat (limited to 'git-init-acl')
-rwxr-xr-x | git-init-acl | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/git-init-acl b/git-init-acl new file mode 100755 index 0000000..50950b5 --- /dev/null +++ b/git-init-acl @@ -0,0 +1,36 @@ +#!/bin/sh + +set -e + +usage() { + printf "usage: git init-acl directory [user...]\n" >&2 + exit 1 +} + +acl_mask() { + # Set the ACL mask for the directory. The default mask will be inherited by + # new directories and files (where it will correctly be set to rw-) + setfacl -m "d:m:rwx,m:rwx" "$1" +} + +add_to_acl() { + # Recursively apply all necessary ACL settings as we may be reinitializing + # the git repository with additional authorised users. + # Take care *not* to recalculate the ACL mask (-n), since rwX translates to + # a mask of rwx even on non-directory files. + setfacl -Rnm "d:u:$2:rwX,u:$2:rwX" "$1" +} + +test $# -ge 1 || usage +dir=$1 +shift + +mkdir -p "$dir" + +acl_mask "$dir" + +for user in "$(id -un)" "$@"; do + add_to_acl "$dir" "$user" +done + +exec git init --bare "$dir" |