summaryrefslogtreecommitdiff
path: root/IkiWiki/Setup
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki/Setup')
-rw-r--r--IkiWiki/Setup/Automator.pm53
-rw-r--r--IkiWiki/Setup/Standard.pm72
-rw-r--r--IkiWiki/Setup/Yaml.pm50
3 files changed, 98 insertions, 77 deletions
diff --git a/IkiWiki/Setup/Automator.pm b/IkiWiki/Setup/Automator.pm
index 742d67666..2dcb424e5 100644
--- a/IkiWiki/Setup/Automator.pm
+++ b/IkiWiki/Setup/Automator.pm
@@ -15,6 +15,7 @@ sub ask ($$) {
my ($question, $default)=@_;
my $r=Term::ReadLine->new("ikiwiki");
+ $r->ornaments("md,me");
$r->readline(encode_utf8($question)." ", $default);
}
@@ -24,27 +25,35 @@ sub prettydir ($) {
return $dir;
}
-sub import (@) {
- my $this=shift;
- IkiWiki::Setup::merge({@_});
+sub sanitize_wikiname ($) {
+ my $wikiname=shift;
# Sanitize this to avoid problimatic directory names.
- $config{wikiname}=~s/[^-A-Za-z0-9_]//g;
- if (! length $config{wikiname}) {
+ $wikiname=~s/[^-A-Za-z0-9_]//g;
+ if (! length $wikiname) {
error gettext("you must enter a wikiname (that contains alphanumerics)");
}
+ return $wikiname;
+}
- # Avoid overwriting any existing files.
- foreach my $key (qw{srcdir destdir repository dumpsetup}) {
- next unless exists $config{$key};
- my $add="";
- my $dir=IkiWiki::dirname($config{$key})."/";
- my $base=IkiWiki::basename($config{$key});
- while (-e $dir.$add.$base) {
- $add=1 if ! $add;
- $add++;
+sub import (@) {
+ my $this=shift;
+ $config{setuptype}='Standard';
+ IkiWiki::Setup::merge({@_});
+
+ if (! $config{force_overwrite}) {
+ # Avoid overwriting any existing files.
+ foreach my $key (qw{srcdir destdir repository dumpsetup}) {
+ next unless exists $config{$key};
+ my $add="";
+ my $dir=IkiWiki::dirname($config{$key})."/";
+ my $base=IkiWiki::basename($config{$key});
+ while (-e $dir.$add.$base) {
+ $add=1 if ! $add;
+ $add++;
+ }
+ $config{$key}=$dir.$add.$base;
}
- $config{$key}=$dir.$add.$base;
}
# Set up wrapper
@@ -63,9 +72,18 @@ sub import (@) {
}
elsif ($config{rcs} eq 'bzr') {
# TODO
+ print STDERR "warning: do not know how to set up the bzr_wrapper hook!\n";
}
elsif ($config{rcs} eq 'mercurial') {
# TODO
+ print STDERR "warning: do not know how to set up the mercurial_wrapper hook!\n";
+ }
+ elsif ($config{rcs} eq 'tla') {
+ # TODO
+ print STDERR "warning: do not know how to set up the tla_wrapper hook!\n";
+ }
+ elsif ($config{rcs} eq 'cvs') {
+ $config{cvs_wrapper}=$config{repository}."/CVSROOT/post-commit";
}
else {
error sprintf(gettext("unsupported revision control system %s"),
@@ -112,9 +130,10 @@ sub import (@) {
IkiWiki::run_hooks(checkconfig => sub { shift->() });
};
if ($@) {
+ my $err=$@;
print STDERR sprintf(gettext("** Disabling plugin %s, since it is failing with this message:"),
$plugin)."\n";
- print STDERR "$@\n";
+ print STDERR "$err\n";
push @{$bakconfig{disable_plugins}}, $plugin;
}
}
@@ -133,7 +152,7 @@ sub import (@) {
# Create admin user(s).
foreach my $admin (@{$config{adminuser}}) {
- next if $admin=~/^http\?:\/\//; # openid
+ next if defined IkiWiki::openiduser($admin);
# Prompt for password w/o echo.
my ($password, $password2);
diff --git a/IkiWiki/Setup/Standard.pm b/IkiWiki/Setup/Standard.pm
index 951bcfc56..c85069304 100644
--- a/IkiWiki/Setup/Standard.pm
+++ b/IkiWiki/Setup/Standard.pm
@@ -1,7 +1,4 @@
#!/usr/bin/perl
-# Standard ikiwiki setup module.
-# Parameters to import should be all the standard ikiwiki config stuff,
-# plus an array of wrappers to set up.
package IkiWiki::Setup::Standard;
@@ -9,10 +6,22 @@ use warnings;
use strict;
use IkiWiki;
+# Parameters to import should be all the standard ikiwiki config, in a hash.
sub import {
IkiWiki::Setup::merge($_[1]);
}
+sub gendump ($@) {
+ my $class=shift;
+
+ "#!/usr/bin/perl",
+ "#",
+ (map { "# $_" } @_),
+ "use IkiWiki::Setup::Standard {",
+ IkiWiki::Setup::commented_dump(\&dumpline, "\t"),
+ "}"
+}
+
sub dumpline ($$$$) {
my $key=shift;
my $value=shift;
@@ -57,61 +66,4 @@ sub dumpline ($$$$) {
return "\t$prefix$key => $dumpedvalue,";
}
-sub dumpvalues ($@) {
- my $setup=shift;
- my @ret;
- while (@_) {
- my $key=shift;
- my %info=%{shift()};
-
- next if $key eq "plugin" || $info{type} eq "internal";
-
- push @ret, "\t# ".$info{description} if exists $info{description};
-
- if (exists $setup->{$key} && defined $setup->{$key}) {
- push @ret, dumpline($key, $setup->{$key}, $info{type}, "");
- delete $setup->{$key};
- }
- elsif (exists $info{example}) {
- push @ret, dumpline($key, $info{example}, $info{type}, "#");
- }
- else {
- push @ret, dumpline($key, "", $info{type}, "#");
- }
- }
- return @ret;
-}
-
-sub gendump ($) {
- my $description=shift;
- my %setup=(%config);
- my @ret;
-
- # disable logging to syslog while dumping
- $config{syslog}=undef;
-
- push @ret, dumpvalues(\%setup, IkiWiki::getsetup());
- foreach my $pair (IkiWiki::Setup::getsetup()) {
- my $plugin=$pair->[0];
- my $setup=$pair->[1];
- my @values=dumpvalues(\%setup, @{$setup});
- if (@values) {
- push @ret, "", "\t# $plugin plugin", @values;
- }
- }
-
- unshift @ret,
- "#!/usr/bin/perl",
- "# $description",
- "#",
- "# Passing this to ikiwiki --setup will make ikiwiki generate",
- "# wrappers and build the wiki.",
- "#",
- "# Remember to re-run ikiwiki --setup any time you edit this file.",
- "use IkiWiki::Setup::Standard {";
- push @ret, "}";
-
- return @ret;
-}
-
1
diff --git a/IkiWiki/Setup/Yaml.pm b/IkiWiki/Setup/Yaml.pm
new file mode 100644
index 000000000..904784728
--- /dev/null
+++ b/IkiWiki/Setup/Yaml.pm
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+package IkiWiki::Setup::Yaml;
+
+use warnings;
+use strict;
+use IkiWiki;
+
+sub loaddump ($$) {
+ my $class=shift;
+ my $content=shift;
+
+ eval q{use YAML::Any};
+ eval q{use YAML} if $@;
+ die $@ if $@;
+ $YAML::Syck::ImplicitUnicode=1;
+ IkiWiki::Setup::merge(Load($content));
+}
+
+sub gendump ($@) {
+ my $class=shift;
+
+ "# IkiWiki::Setup::Yaml - YAML formatted setup file",
+ "#",
+ (map { "# $_" } @_),
+ "#",
+ IkiWiki::Setup::commented_dump(\&dumpline, "")
+}
+
+
+sub dumpline ($$$$) {
+ my $key=shift;
+ my $value=shift;
+ my $type=shift;
+ my $prefix=shift;
+
+ eval q{use YAML::Old};
+ eval q{use YAML} if $@;
+ die $@ if $@;
+ $YAML::UseHeader=0;
+
+ my $dump=Dump({$key => $value});
+ chomp $dump;
+ if (length $prefix) {
+ $dump=join("\n", map { $prefix.$_ } split(/\n/, $dump));
+ }
+ return $dump;
+}
+
+1