From a26532d6358cc8a617b36149600a2bf8d8717e8d Mon Sep 17 00:00:00 2001 From: Sitaram Chamarty Date: Mon, 19 Nov 2012 07:48:21 +0530 Subject: [PATCH] allow simple macros in conf file --- src/syntactic-sugar/macros | 74 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/syntactic-sugar/macros diff --git a/src/syntactic-sugar/macros b/src/syntactic-sugar/macros new file mode 100644 index 0000000..1202dae --- /dev/null +++ b/src/syntactic-sugar/macros @@ -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