diff options
author | Sitaram Chamarty <sitaram@atc.tcs.com> | 2017-10-13 15:51:58 +0530 |
---|---|---|
committer | Sitaram Chamarty <sitaram@atc.tcs.com> | 2017-10-13 16:59:07 +0530 |
commit | c4b6521a4b82e639f6ed776abad79c86e959b27a (patch) | |
tree | 8f9c2bccdf08963a758fef1bf8d9623c6c8f54a9 | |
parent | vim syntax and indent files... (diff) | |
download | gitolite-gentoo-c4b6521a4b82e639f6ed776abad79c86e959b27a.tar.gz gitolite-gentoo-c4b6521a4b82e639f6ed776abad79c86e959b27a.tar.bz2 gitolite-gentoo-c4b6521a4b82e639f6ed776abad79c86e959b27a.zip |
allow orphan gl-conf files (see below for details)
Background:
For explicitly named repos in gitolite.conf ("repo foo bar" as
opposed to "repo @group-name" or "repo [a-z].*"), the compiled rules
are placed in a file called "gl-conf" in the repo's directory.
In addition, an entry is made in a hash called "split_conf" in the
main compiled conf file (~/.gitolite/conf/gitolite.conf-compiled.pm).
The crucial bit is this: if a repo does not have an entry in the
split_conf hash, its gl-conf file will not be honored.
Why is this? Because there are situations where that file may be
out of date, and the rules within should not be in effect. For a
simple example, consider this conf
repo seven
RW+ = u1
RW = u2
Now, management decides that "seven" needs to be assimilated into a
large group called "borg":
# add seven to borg
@borg = seven
# seven's rules are now deleted
When you make this change and push, users u1 and u2 should not get
access (unless the rules for @borg happened to allow them). That
is, the gl-conf in the repo-dir is considered an orphan, and must
not be included in rule processing.
Since there is now no "seven" entry in split_conf, this is exactly
what happens -- gl-conf is ignored.
(Note: one might argue that gitolite compile should go and delete
these orphaned gl-conf files, but that's yet another "full disk
scan" overhead.)
What this patch does:
This patch allows an admin to override this safety feature, and say,
in effect, "include orphaned gl-conf files in the rule processing; I
know what I am doing". The admin enables that by adding an rc
variable called ALLOW_ORPHAN_GL_CONF and setting it to "1".
How does this help:
This wouldn't be useful without some way of updating an individual
repo's rules directly into its gl-conf file.
contrib/commands/compile-1 does exactly that (see notes within that
file for information, assumptions, warnings, etc.)
-rw-r--r-- | src/lib/Gitolite/Conf/Load.pm | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/lib/Gitolite/Conf/Load.pm b/src/lib/Gitolite/Conf/Load.pm index d0cd985..e0e4e92 100644 --- a/src/lib/Gitolite/Conf/Load.pm +++ b/src/lib/Gitolite/Conf/Load.pm @@ -305,7 +305,7 @@ sub load_1 { } if ( -f "gl-conf" ) { - return if not $split_conf{$repo}; + return if not $split_conf{$repo} and not $rc{ALLOW_ORPHAN_GL_CONF}; my $cc = "./gl-conf"; _die "parse '$cc' failed: " . ( $@ or $! ) unless do $cc; |