use IkiWiki;
use POSIX qw(setlocale LC_CTYPE);
+package IkiWiki::Rcs::svn;
+
+sub import { #{{{
+ if (exists $IkiWiki::config{svnpath}) {
+ # code depends on the path not having extraneous slashes
+ $IkiWiki::config{svnpath}=~tr#/#/#s;
+ $IkiWiki::config{svnpath}=~s/\/$//;
+ $IkiWiki::config{svnpath}=~s/^\///;
+ }
+} #}}}
+
+
package IkiWiki;
-
+
# 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());
if (defined $rev && defined $oldrev && $rev != $oldrev) {
# Merge their changes into the file that we've
# changed.
- chdir($config{srcdir}); # svn merge wants to be here
if (system("svn", "merge", "--quiet", "-r$oldrev:$rev",
- "$config{srcdir}/$file") != 0) {
+ "$config{srcdir}/$file", "$config{srcdir}/$file") != 0) {
warn("svn merge -r$oldrev:$rev failed\n");
}
}
if (system("svn", "commit", "--quiet",
"--encoding", "UTF-8", "-m",
possibly_foolish_untaint($message),
- "$config{srcdir}") != 0) {
+ $config{srcdir}) != 0) {
my $conflict=readfile("$config{srcdir}/$file");
if (system("svn", "revert", "--quiet", "$config{srcdir}/$file") != 0) {
warn("svn revert failed\n");
}
foreach (keys %{$logentry->{paths}}) {
- next unless /^\/\Q$config{svnpath}\E\/([^ ]+)(?:$|\s)/;
+ next unless ! length $config{svnpath} ||
+ /^\/\Q$config{svnpath}\E\/([^ ]+)(?:$|\s)/;
my $file=$1;
my $diffurl=$config{diffurl};
$diffurl=~s/\[\[file\]\]/$file/g;
my @changed_pages;
foreach my $change (`svnlook changed $config{svnrepo} -r $rev`) {
chomp $change;
- if ($change =~ /^[A-Z]+\s+\Q$config{svnpath}\E\/(.*)/) {
+ if (! length $config{svnpath} ||
+ $change =~ /^[A-Z]+\s+\Q$config{svnpath}\E\/(.*)/) {
push @changed_pages, $1;
}
}