75 lines
1.5 KiB
Plaintext
75 lines
1.5 KiB
Plaintext
# 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+)\b(.*?)\nend//ms) {
|
|
$macro{$1} = $2;
|
|
}
|
|
|
|
$l =~ s/^((\w+)\b.*)/$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
|