summaryrefslogtreecommitdiff
path: root/IkiWiki/Setup/Automator.pm
blob: af98c9847234f45fa9caf641914a8e65713117df (plain)
  1. #!/usr/bin/perl
  2. # Ikiwiki setup automator.
  3. package IkiWiki::Setup::Automator;
  4. use warnings;
  5. use strict;
  6. use IkiWiki;
  7. use Term::ReadLine;
  8. use File::Path;
  9. sub ask ($$) { #{{{
  10. my ($question, $default)=@_;
  11. my $r=Term::ReadLine->new("ikiwiki");
  12. $r->readline($question." ", $default);
  13. } #}}}
  14. sub prettydir ($) { #{{{
  15. my $dir=shift;
  16. $dir=~s/^\Q$ENV{HOME}\E\//~\//;
  17. return $dir;
  18. } #}}}
  19. sub import (@) { #{{{
  20. my $this=shift;
  21. IkiWiki::Setup::merge({@_});
  22. # Sanitize this to avoid problimatic directory names.
  23. $config{wikiname}=~s/[^-A-Za-z0-9_] //g;
  24. if (! length $config{wikiname}) {
  25. die "you must enter a wikiname\n";
  26. }
  27. # Avoid overwriting any existing files.
  28. foreach my $key (qw{srcdir destdir repository dumpsetup}) {
  29. next unless exists $config{$key};
  30. my $add="";
  31. while (-e $config{$key}.$add) {
  32. $add=1 if ! $add;
  33. $add++;
  34. }
  35. $config{$key}.=$add;
  36. }
  37. IkiWiki::checkconfig();
  38. print "\n\nSetting up $config{wikiname} ...\n";
  39. # Set up the repository.
  40. mkpath($config{srcdir}) || die "mkdir $config{srcdir}: $!";
  41. delete $config{repository} if ! $config{rcs} || $config{rcs}=~/bzr|mercurial/;
  42. if ($config{rcs}) {
  43. my @params=($config{rcs}, $config{srcdir});
  44. push @params, $config{repository} if exists $config{repository};
  45. if (system("ikiwiki-makerepo", @params) != 0) {
  46. die "failed: ikiwiki-makerepo @params";
  47. }
  48. }
  49. # Generate setup file.
  50. require IkiWiki::Setup;
  51. if ($config{rcs}) {
  52. if ($config{rcs} eq 'git') {
  53. $config{git_wrapper}=$config{repository}."/hooks/post-update";
  54. }
  55. elsif ($config{rcs} eq 'svn') {
  56. $config{svn_wrapper}=$config{repository}."/hooks/post-commit";
  57. }
  58. elsif ($config{rcs} eq 'bzr') {
  59. # TODO
  60. }
  61. elsif ($config{rcs} eq 'mercurial') {
  62. # TODO
  63. }
  64. }
  65. IkiWiki::Setup::dump($config{dumpsetup});
  66. # Build the wiki.
  67. mkpath($config{destdir}) || die "mkdir $config{destdir}: $!";
  68. if (system("ikiwiki", "--setup", $config{dumpsetup}) != 0) {
  69. die "ikiwiki --setup $config{dumpsetup} failed";
  70. }
  71. # Done!
  72. print "\n\nSuccessfully set up $config{wikiname}:\n";
  73. foreach my $key (qw{url srcdir destdir repository}) {
  74. next unless exists $config{$key};
  75. print "\t$key: ".(" " x (10 - length($key)))." ".
  76. prettydir($config{$key})."\n";
  77. }
  78. print "To modify settings, edit ".prettydir($config{dumpsetup})." and then run:\n";
  79. print " ikiwiki -setup ".prettydir($config{dumpsetup})."\n";
  80. exit 0;
  81. } #}}}
  82. 1