From: Mark Hills <mark@pogo.org.uk>
To: git@vger.kernel.org
Subject: sharedRepository derived from file permissions
Date: Mon, 8 Oct 2012 10:07:30 +0100 (BST) [thread overview]
Message-ID: <1210080955590.12283@wes.ijneb.com> (raw)
We make extensive use of unix permissions and core.sharedRepository --
multiple developers push to the same repo.
I have often wondered why core.sharedRepository is needed at all as a
separate configuration?
It looks like it might be easier (and less confusing to users) to derive
this attribute from the top-level .git directory?
For many years in our organisation we have been using the scripts below to
make it easier for users to configure a repository -- a one-time
operation.
Is there a reason why Git doesn't just follow (and echo) the top-level
permissions?
Many thanks
--
Mark
#!/bin/bash
#
# Propagate permissions of the top-level directory through a repository,
# and configure it for use.
#
if [ "$1" = "--help" ]; then
echo "Usage: $0 <bare_git_repo>.git"
echo "Fix permissions on a Git repository, based on the permissions"
echo "at the top level directory."
exit 0
fi
if [ -z "$1" ]; then
echo "Repository argument is mandatory (see --help); aborting."
exit 1
fi
REPO="$1"
if [ ! -d "$REPO/objects" -o ! -f "$REPO/config" -o ! -f "$REPO/HEAD" ]; then
echo "$REPO does not look like a bare Git repository; aborting."
exit 1
fi
# Fix ownership
chown -cR --reference="$REPO" "$REPO"/*
# Fix all the directory permissions after ownership (setting ownership
# removes setgid bit)
find "$REPO" -type d | xargs chmod -c --reference="$REPO"
# Fix files
find "$REPO" -type f | xargs chmod --reference="$REPO"
find "$REPO" -type f | xargs chmod a-sx
# Tidy up; permissions on object files are always 444
find "$REPO/objects" -type f | xargs chmod 0444
# Configure the repository to remove the need for further fixes
# by basing core.SharedRepository on the top level permissions
PERM=0`stat -c '%a' "$REPO"`
MODE=`printf %04o $(($PERM&0666))` # bash required
if [ "$MODE" = "0660" ]; then
MODE=group
elif [ "$MODE" = "0666" ]; then
MODE=all
fi
git --git-dir "$REPO" repo-config core.sharedRepository "$MODE"
chmod --reference="$REPO" "$REPO/config"
chmod a-sx "$REPO/config"
next reply other threads:[~2012-10-08 9:43 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-08 9:07 Mark Hills [this message]
2012-10-08 16:46 ` sharedRepository derived from file permissions Junio C Hamano
2012-10-16 23:20 ` Mark Hills
2012-10-17 7:46 ` Junio C Hamano
2012-10-17 12:25 ` Mark Hills
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1210080955590.12283@wes.ijneb.com \
--to=mark@pogo.org.uk \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.