summaryrefslogtreecommitdiff
path: root/usr/src/libpiny
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/libpiny')
-rw-r--r--usr/src/libpiny/Build.PL2
-rw-r--r--usr/src/libpiny/debian/changelog6
-rw-r--r--usr/src/libpiny/lib/IkiWiki/FakeSetup.pm89
3 files changed, 96 insertions, 1 deletions
diff --git a/usr/src/libpiny/Build.PL b/usr/src/libpiny/Build.PL
index 8639991..09cf3fb 100644
--- a/usr/src/libpiny/Build.PL
+++ b/usr/src/libpiny/Build.PL
@@ -2,7 +2,7 @@ use Module::Build;
Module::Build->new
( module_name => 'Piny'
, license => 'BSD-3'
- , dist_version => '0.5'
+ , dist_version => '0.6'
, requires =>
{ 'Moose' => 0
, 'Email::Valid::Loose' => 0
diff --git a/usr/src/libpiny/debian/changelog b/usr/src/libpiny/debian/changelog
index 79952b6..df872b4 100644
--- a/usr/src/libpiny/debian/changelog
+++ b/usr/src/libpiny/debian/changelog
@@ -1,3 +1,9 @@
+libpiny-perl (0.6) unstable; urgency=low
+
+ * Added IkiWiki::FakeSetup for manipulating IkiWiki setup scripts.
+
+ -- Julian Blake Kongslie <jblake@omgwallhack.org> Wed, 07 Jul 2010 12:12:37 -0700
+
libpiny-perl (0.5) unstable; urgency=low
* Allow listing repos and querying access rights.
diff --git a/usr/src/libpiny/lib/IkiWiki/FakeSetup.pm b/usr/src/libpiny/lib/IkiWiki/FakeSetup.pm
new file mode 100644
index 0000000..8a8b2d2
--- /dev/null
+++ b/usr/src/libpiny/lib/IkiWiki/FakeSetup.pm
@@ -0,0 +1,89 @@
+package IkiWiki::FakeSetup;
+
+use strict;
+use warnings;
+
+use Data::Dumper qw( );
+use Exporter qw( import );
+
+our @EXPORT_OK = qw( readSetup writeSetup );
+
+sub readSetup {
+ my ( $setupfile ) = @_;
+
+ # Sorry about the use of globals but it's hard to share lexicals with dynamically generated source.
+ $IkiWiki::FakeSetup::package = undef;
+ @IkiWiki::FakeSetup::args = ();
+
+ sub inc {
+ my ( $self, $file ) = @_;
+
+ my $package = $file;
+ $package =~ s/\//::/g;
+ $package =~ s/\.pm//;
+
+ my @src =
+ ( "package $package;\n"
+ , "sub import {\n"
+ , " my ( \$class, \@args ) = \@_;\n"
+ , " print 'in import\\n';"
+ , " \$IkiWiki::FakeSetup::package = \$class;\n"
+ , " \@IkiWiki::FakeSetup::args = \@args;\n"
+ , "}\n"
+ , "1;\n"
+ );
+
+ return sub { if ( scalar @src ) { $_ = shift @src; return 1; } else { return 0; } };
+
+ };
+
+ eval {
+ my @oldINC = @INC;
+ @INC = ( ".", \&inc );
+
+ my %oldINC = %INC;
+ %INC = ( );
+
+ do $setupfile;
+
+ @INC = @oldINC;
+ %INC = %oldINC;
+ };
+
+ return ( $IkiWiki::FakeSetup::package, @IkiWiki::FakeSetup::args );
+
+}
+
+sub writeSetup {
+ my ( $package, @args ) = @_;
+
+ my $d = Data::Dumper->new( \@args );
+ $d->Terse( 1 );
+
+ return "#!/usr/bin/perl\n\nuse $package " . $d->Dump( ) . ";\n";
+}
+
+1;
+
+__END__
+
+Because it may not be completely obvious, here's how you would use this:
+
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use IkiWiki::FakeSetup qw( readSetup writeSetup );
+
+# This reads the setup file, returning the package it uses and any configuration it passed to that package.
+my ( $package, $config ) = readSetup( "almighty_ikiwiki_template.setup" );
+
+# Make changes to the configuration.
+$config->{"srcdir"} = "/some/dir";
+$config->{"adminemail"} = "somejerk\@jerkville.com";
+
+# Open a new file, and write the changed configuration to it.
+open( SETUP, ">", "almighty_ikiwiki_template_changed.setup" );
+print SETUP writeSetup( $package, $config );
+close( SETUP );