+hook(type => "checkconfig", id => "svn", call => sub { #{{{
+ if (! defined $config{svnpath}) {
+ $config{svnpath}="trunk";
+ }
+ if (exists $config{svnpath}) {
+ # code depends on the path not having extraneous slashes
+ $config{svnpath}=~tr#/#/#s;
+ $config{svnpath}=~s/\/$//;
+ $config{svnpath}=~s/^\///;
+ }
+}); #}}}
+
+hook(type => "getsetup", id => "svn", call => sub { #{{{
+ return
+ svnrepo => {
+ type => "string",
+ default => "",
+ example => "/svn/wiki",
+ description => "subversion repository location",
+ safe => 0, # path
+ rebuild => 0,
+ },
+ svnpath => {
+ type => "string",
+ default => "trunk",
+ description => "path inside repository where the wiki is located",
+ safe => 0, # paranoia
+ rebuild => 0,
+ },
+ historyurl => {
+ type => "string",
+ default => "",
+ example => "http://svn.example.org/trunk/[[file]]",
+ description => "viewvc url to show file history ([[file]] substituted)",
+ safe => 1,
+ rebuild => 1,
+ },
+ diffurl => {
+ type => "string",
+ default => "",
+ example => "http://svn.example.org/trunk/[[file]]?root=wiki&r1=[[r1]]&r2=[[r2]]",
+ description => "viewvc url to show a diff ([[file]], [[r1]], and [[r2]] substituted)",
+ safe => 1,
+ rebuild => 1,
+ },
+}); #}}}
+
+# svn needs LC_CTYPE set to a UTF-8 locale, so try to find one. Any will do.
+sub find_lc_ctype() {
+ my $current = setlocale(LC_CTYPE());
+ return $current if $current =~ m/UTF-?8$/i;
+
+ # Make some obvious attempts to avoid calling `locale -a`
+ foreach my $locale ("$current.UTF-8", "en_US.UTF-8", "en_GB.UTF-8") {
+ return $locale if setlocale(LC_CTYPE(), $locale);
+ }
+
+ # Try to get all available locales and pick the first UTF-8 one found.
+ if (my @locale = grep(/UTF-?8$/i, `locale -a`)) {
+ chomp @locale;
+ return $locale[0] if setlocale(LC_CTYPE(), $locale[0]);
+ }
+
+ # fallback to the current locale
+ return $current;
+} # }}}
+$ENV{LC_CTYPE} = $ENV{LC_CTYPE} || find_lc_ctype();