SVN::Hooks::AllowPropChange - Allow changes in revision properties.


SVN-Hooks documentation Contained in the SVN-Hooks distribution.

Index


Code Index:

NAME

Top

SVN::Hooks::AllowPropChange - Allow changes in revision properties.

SYNOPSIS

Top

This SVN::Hooks plugin is used to allow revision (or non-versioned) properties (svn:author, svn:date, and svn:log) to be changed by a group of users.

It's active in the pre-revprop-change hook.

It's configured by the following directive.

ALLOW_PROP_CHANGE(PROP => WHO, ...)

This directive enables the change of revision properties.

By default any change is denied unless explicitly allowed by the directive. You can use the directive more than once.

The PROP argument specifies the propertie(s) that are to be configured depending on its type. If no argument is given, no user can change any property.

STRING

Specify a single property by name (author, date, or log).

REGEXP

Specify all properties that match the Regexp.

The optional WHO arguments specify the users that are allowed to make those changes. If absent, no user can change a log message. Otherwise, it specifies the allowed users depending on its type.

STRING

Specify a single user by name.

REGEXP

Specify the class of users whose names are matched by the Regexp.

	ALLOW_PROP_CHANGE('svn:log' => 'jsilva'); # jsilva can change svn:log
	ALLOW_PROP_CHANGE(qr/./ => qr/silva$/); # any *silva can change any property

AUTHOR

Top

Gustavo Chaves, <gnustavo@cpan.org>

BUGS

Top

Please report any bugs or feature requests to bug-svn-hooks-checkproperty at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=SVN-Hooks. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc SVN::Hooks

You can also look for information at:

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=SVN-Hooks

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/SVN-Hooks

* CPAN Ratings

http://cpanratings.perl.org/d/SVN-Hooks

* Search CPAN

http://search.cpan.org/dist/SVN-Hooks

COPYRIGHT & LICENSE

Top


SVN-Hooks documentation Contained in the SVN-Hooks distribution.
package SVN::Hooks::AllowPropChange;

use strict;
use warnings;
use Carp;
use SVN::Hooks;

use Exporter qw/import/;
my $HOOK = 'ALLOW_PROP_CHANGE';
our @EXPORT = ($HOOK);

our $VERSION = $SVN::Hooks::VERSION;

my @Specs;

sub ALLOW_PROP_CHANGE {
    my @args = @_;

    my @whos;

    foreach my $arg (@args) {
	if (not ref $arg or ref $arg eq 'Regexp') {
	    push @whos, $arg;
	}
	else {
	    croak "$HOOK: invalid argument '$arg'\n";
	}
    }

    @whos != 0
	or croak "$HOOK: you must specify at least the first argument\n";

    my $prop = shift @whos;
    push @Specs, [$prop => \@whos];

    PRE_REVPROP_CHANGE(\&pre_revprop_change);

    return 1;
}

sub pre_revprop_change {
    my ($svnlook, $rev, $author, $propname, $action) = @_;

    $propname =~ /^svn:(?:author|date|log)$/
	or croak "$HOOK: the revision property $propname cannot be changed.\n";

    $action eq 'M'
	or croak "$HOOK: revision properties can only be modified, not added or deleted.\n";

    foreach my $spec (@Specs) {
	my ($prop, $whos) = @$spec;
	if (! ref $prop) {
	    next if $propname ne $prop;
	}
	else {
	    next if $propname !~ $prop;
	}
	for my $who (@$whos) {
	    if (! ref $who) {
		return if $author eq $who;
	    }
	    else {
		return if $author =~ $who;
	    }
	}
    }

    croak "$HOOK: you are not allowed to change property $propname.\n";
}

1; # End of SVN::Hooks::AllowPropChange