#!/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"