summaryrefslogtreecommitdiff
path: root/ikiwiki
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-03-23 07:37:16 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-03-23 07:37:16 +0000
commitb645dc5a4118feabd37d95fabbc6aaa803e3c45f (patch)
tree305ffea8613c8dce53e752d74ea3c07237cb6da2 /ikiwiki
parent6c8cf5dd571662f981227489f7c4652a1a1f10cd (diff)
Getopt::Long is a huge, heavy perl module. So why use it?
This {gross,amazing} hack makes all wrapped uses of ikiwiki forgo any option parsing at all. Options come in preparses via an env var from the wrapper. As a bonus, Wrapper.pm no longer needs to be updated when command line options are added to the program. Load time is sped up by around 10%. ikiwikiwrap --params is no longer supported by this change. You will need to rebuild your wrappers to take advantage of it.
Diffstat (limited to 'ikiwiki')
-rwxr-xr-xikiwiki61
1 files changed, 35 insertions, 26 deletions
diff --git a/ikiwiki b/ikiwiki
index cdc5c8ca4..b59aa8c8f 100755
--- a/ikiwiki
+++ b/ikiwiki
@@ -10,7 +10,6 @@ use strict;
use Memoize;
use File::Spec;
use HTML::Template;
-use Getopt::Long;
use vars qw{%config %links %oldlinks %oldpagemtime %renderedfiles %pagesources};
@@ -39,31 +38,41 @@ our %config=( #{{{
adminuser => undef,
); #}}}
-GetOptions( #{{{
- "setup|s=s" => \$config{setup},
- "wikiname=s" => \$config{wikiname},
- "verbose|v!" => \$config{verbose},
- "rebuild!" => \$config{rebuild},
- "wrapper:s" => sub { $config{wrapper}=$_[1] ? $_[1] : "ikiwiki-wrap" },
- "wrappermode=i" => \$config{wrappermode},
- "svn!" => \$config{svn},
- "anonok!" => \$config{anonok},
- "cgi!" => \$config{cgi},
- "url=s" => \$config{url},
- "cgiurl=s" => \$config{cgiurl},
- "historyurl=s" => \$config{historyurl},
- "diffurl=s" => \$config{diffurl},
- "exclude=s@" => sub {
- $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/;
- },
- "adminuser=s@" => sub { push @{$config{adminuser}}, $_[1] },
- "templatedir=s" => sub { $config{templatedir}=possibly_foolish_untaint($_[1]) },
-) || usage();
-
-if (! $config{setup}) {
- usage() unless @ARGV == 2;
- $config{srcdir} = possibly_foolish_untaint(shift);
- $config{destdir} = possibly_foolish_untaint(shift);
+# option parsing #{{{
+if (! exists $ENV{WRAPPED_OPTIONS}) {
+ eval q{use Getopt::Long};
+ GetOptions(
+ "setup|s=s" => \$config{setup},
+ "wikiname=s" => \$config{wikiname},
+ "verbose|v!" => \$config{verbose},
+ "rebuild!" => \$config{rebuild},
+ "wrapper:s" => sub { $config{wrapper}=$_[1] ? $_[1] : "ikiwiki-wrap" },
+ "wrappermode=i" => \$config{wrappermode},
+ "svn!" => \$config{svn},
+ "anonok!" => \$config{anonok},
+ "cgi!" => \$config{cgi},
+ "url=s" => \$config{url},
+ "cgiurl=s" => \$config{cgiurl},
+ "historyurl=s" => \$config{historyurl},
+ "diffurl=s" => \$config{diffurl},
+ "exclude=s@" => sub {
+ $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/;
+ },
+ "adminuser=s@" => sub { push @{$config{adminuser}}, $_[1] },
+ "templatedir=s" => sub { $config{templatedir}=possibly_foolish_untaint($_[1]) },
+ ) || usage();
+
+ if (! $config{setup}) {
+ usage() unless @ARGV == 2;
+ $config{srcdir} = possibly_foolish_untaint(shift);
+ $config{destdir} = possibly_foolish_untaint(shift);
+ checkoptions();
+ }
+}
+else {
+ # wrapper passes a full config structure in the environment
+ # variable
+ eval possibly_foolish_untaint($ENV{WRAPPED_OPTIONS});
checkoptions();
}
#}}}