X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/8682daad58023fd6297945d602d2044f3e8f063f..6cae23dbbe073a29400e89236b27ab7718fe2d54:/IkiWiki/Setup/Automator.pm?ds=inline diff --git a/IkiWiki/Setup/Automator.pm b/IkiWiki/Setup/Automator.pm index b63c8e245..9da594e99 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,34 @@ 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; + 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 @@ -58,12 +66,18 @@ sub import (@) { elsif ($config{rcs} eq 'monotone') { $config{mtn_wrapper}=$config{srcdir}."_MTN/ikiwiki-netsync-hook"; } + elsif ($config{rcs} eq 'darcs') { + $config{darcs_wrapper}=$config{repository}."/_darcs/ikiwiki-wrapper"; + } elsif ($config{rcs} eq 'bzr') { # TODO } elsif ($config{rcs} eq 'mercurial') { # TODO } + elsif ($config{rcs} eq 'cvs') { + $config{cvs_wrapper}=$config{repository}."/CVSROOT/post-commit"; + } else { error sprintf(gettext("unsupported revision control system %s"), $config{rcs}); @@ -95,6 +109,29 @@ sub import (@) { } } + # Make sure that all the listed plugins can load + # and checkconfig is ok. If a plugin fails to work, + # remove it from the configuration and keep on truckin'. + my %bakconfig=%config; # checkconfig can modify %config so back up + if (! eval { IkiWiki::loadplugins(); IkiWiki::checkconfig() }) { + foreach my $plugin (@{$config{default_plugins}}, @{$bakconfig{add_plugins}}) { + eval { + # delete all hooks so that only this plugins's + # checkconfig will be run + %IkiWiki::hooks=(); + IkiWiki::loadplugin($plugin); + IkiWiki::run_hooks(checkconfig => sub { shift->() }); + }; + if ($@) { + print STDERR sprintf(gettext("** Disabling plugin %s, since it is failing with this message:"), + $plugin)."\n"; + print STDERR "$@\n"; + push @{$bakconfig{disable_plugins}}, $plugin; + } + } + } + %config=%bakconfig; + # Generate setup file. require IkiWiki::Setup; IkiWiki::Setup::dump($config{dumpsetup}); @@ -107,7 +144,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); @@ -117,10 +154,11 @@ sub import (@) { for (;;) { print "Choose a password: "; chomp($password=); + print "\n"; print "Confirm password: "; chomp($password2=); - last if $password2 ne $password; + last if $password2 eq $password; print "Password mismatch.\n\n"; }