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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).