aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/access')
-rwxr-xr-xsrc/commands/access10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/commands/access b/src/commands/access
index f02e533..7d4a5b9 100755
--- a/src/commands/access
+++ b/src/commands/access
@@ -51,7 +51,7 @@ $ref ||= 'any';
# fq the ref if needed
$ref =~ s(^)(refs/heads/) if $ref and $ref ne 'any' and $ref !~ m(^(refs|VREF)/);
_die "invalid perm" if not( $aa and $aa =~ /^(R|W|\+|C|D|M|\^C)$/ );
-_die "invalid ref name" if not( $ref and $ref =~ $REPONAME_PATT );
+_die "invalid ref name" if not( $ref and $ref =~ $REF_OR_FILENAME_PATT );
my $ret = '';
@@ -61,6 +61,9 @@ if ( $repo ne '%' and $user ne '%' ) {
show($ret) if $s;
+ # adjust for fallthru in VREFs
+ $ret =~ s/DENIED by fallthru/allowed by fallthru/ if $ref =~ m(^VREF/);
+
if ( $ret =~ /DENIED/ ) {
print "$ret\n" unless $q;
exit 1;
@@ -85,8 +88,9 @@ while (<>) {
sub adjust_aa {
my ($repo, $aa) = @_;
- $aa = '+' if $aa eq 'C' and not option($repo, 'CREATE_IS_C');
+ $aa = 'W' if $aa eq 'C' and not option($repo, 'CREATE_IS_C');
$aa = '+' if $aa eq 'D' and not option($repo, 'DELETE_IS_D');
+ $aa = 'W' if $aa eq 'M' and not option($repo, 'MERGE_CHECK');
return $aa;
}
@@ -103,7 +107,7 @@ sub show {
p => skipped due to perm (W, +, etc) not matching,
D => explicitly denied,
A => explicitly allowed,
- F => denied due to fallthru (no rules matched)
+ F => fallthru; access denied for normal refs, allowed for VREFs
";