Added support for Git smart HTTP transport. Add "RedmineSCMProtocol git-smart-http" to the configuration file.

1.x
Adirelle 2012-04-12 11:07:05 +02:00
parent 7f3d4406e1
commit a9f5eb7325
1 changed files with 25 additions and 1 deletions

View File

@ -228,6 +228,12 @@ my @directives = (
args_how => FLAG,
errmsg => 'Grant all permissions to administrators. Defaults to yes.',
},
{
name => 'RedmineSCMProtocol',
req_override => OR_AUTHCFG,
args_how => TAKE1,
errmsg => 'Indicate the type of SCM protocol (dav-svn or git-smart-http). This is used to properly detected write requests. Defaults to dev-svn.',
},
);
# Initialize defaults configuration
@ -244,6 +250,7 @@ sub DIR_CREATE {
AND members.id = member_roles.member_id
AND member_roles.role_id = roles.id
"),
SCMProtocol => 'dav-svn',
IdentifierRegex => $identifier_re ? qr{$identifier_re} : undef,
CacheCredsMax => 0,
CacheCredsCount => 0,
@ -274,6 +281,17 @@ sub RedmineDbWhereClause {
}
}
sub RedmineSCMProtocol {
my ($cfg, $parms, $arg) = @_;
$arg = trim($arg);
if($arg eq 'dav-svn' || $arg eq 'git-smart-http') {
$cfg->{SCMProtocol} = $arg;
} else {
die "Invalid RedmineSCMProtocol value: $arg, choose either dav-svn or git-smart-http !";
}
}
sub set_val {
my ($key, $cfg, $parms, $arg) = @_;
$cfg->{$key} = $arg;
@ -517,7 +535,13 @@ sub get_project_identifier {
sub is_read_request {
my $r = shift;
return defined $read_only_methods{$r->method};
my $cfg = get_config($r);
if($cfg->{SCMProtocol} eq "dav-svn") {
return defined $read_only_methods{$r->method};
} else {
my $quoted_location = quotemeta($r->location);
return $r->uri !~ m@^$quoted_location/.*/git-receive-pack$@;
}
}
# check if one of the required permissions is in the passed list