allow simple macros in conf file
This commit is contained in:
parent
5f9789ed8e
commit
a26532d635
74
src/syntactic-sugar/macros
Normal file
74
src/syntactic-sugar/macros
Normal file
|
@ -0,0 +1,74 @@
|
|||
# vim: syn=perl:
|
||||
|
||||
# "sugar script" (syntactic sugar helper) for gitolite3
|
||||
|
||||
# simple line-wise macro processor
|
||||
# ----------------------------------------------------------------------
|
||||
# see documentation at the end of this script
|
||||
|
||||
my %macro;
|
||||
sub sugar_script {
|
||||
my $lines = shift;
|
||||
my @out = ();
|
||||
|
||||
my $l = join("\n", @$lines);
|
||||
while ($l =~ s/^macro (\w+) (.*?)\nend//ms) {
|
||||
$macro{$1} = $2;
|
||||
}
|
||||
|
||||
$l =~ s/^((\w+) .*)/$macro{$2} ? expand($1) : $1/gem;
|
||||
|
||||
$lines = [split "\n", $l];
|
||||
return $lines;
|
||||
}
|
||||
|
||||
sub expand {
|
||||
my $l = shift;
|
||||
my ($word, @arg) = split ' ', $l;
|
||||
my $v = $macro{$word};
|
||||
$v =~ s/%(\d+)/$arg[$1-1] or die "macro '$word' needs $1 arguments at '$l'\n"/gem;
|
||||
return $v;
|
||||
}
|
||||
|
||||
__END__
|
||||
|
||||
Documentation is mostly by example.
|
||||
|
||||
Setup:
|
||||
|
||||
* the line
|
||||
'macros',
|
||||
should be added to the SYNTACTIC_SUGAR list in ~/.gitolite.rc
|
||||
|
||||
Notes on macro definition:
|
||||
|
||||
* the keywords 'macro' and 'end' should start on a new line
|
||||
* the first word after 'macro' is the name of the macro, and the rest, until
|
||||
the 'end', is the body
|
||||
|
||||
Notes on macro use:
|
||||
|
||||
* the macro name should be the first word on a line
|
||||
* the rest of the line is used as arguments to the macro
|
||||
|
||||
Example:
|
||||
|
||||
if your conf contains:
|
||||
|
||||
macro foo repo aa-%1
|
||||
RW = u1 %2
|
||||
R = u2
|
||||
end
|
||||
|
||||
foo 1 alice
|
||||
foo 2 bob
|
||||
|
||||
this will effectively turn into
|
||||
|
||||
repo aa-1
|
||||
RW = u1 alice
|
||||
R = u2
|
||||
|
||||
repo aa-2
|
||||
RW = u1 bob
|
||||
R = u2
|
Loading…
Reference in a new issue