X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/04a9dbfe7daa9c352ae4e9af17df8134248f3806..bbfbad2da783c9b79cde861ebcd208b70dc61579:/IkiWiki/Rcs/svn.pm

diff --git a/IkiWiki/Rcs/svn.pm b/IkiWiki/Rcs/svn.pm
index 597295d44..761a40a27 100644
--- a/IkiWiki/Rcs/svn.pm
+++ b/IkiWiki/Rcs/svn.pm
@@ -5,8 +5,20 @@ use strict;
 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());
@@ -85,9 +97,8 @@ sub rcs_commit ($$$;$$) { #{{{
 		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");
 			}
 		}
@@ -95,7 +106,7 @@ sub rcs_commit ($$$;$$) { #{{{
 		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");
@@ -131,7 +142,6 @@ sub rcs_recentchanges ($) { #{{{
 
 	eval q{
 		use Date::Parse;
-		use Time::Duration;
 		use XML::SAX;
 		use XML::Simple;
 	};
@@ -178,7 +188,8 @@ sub rcs_recentchanges ($) { #{{{
 		}
 
 		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;
@@ -204,7 +215,7 @@ sub rcs_recentchanges ($) { #{{{
 
 sub rcs_notify () { #{{{
 	if (! exists $ENV{REV}) {
-		error("REV is not set, not running from svn post-commit hook, cannot send notifications");
+		error(gettext("REV is not set, not running from svn post-commit hook, cannot send notifications"));
 	}
 	my $rev=int(possibly_foolish_untaint($ENV{REV}));
 	
@@ -220,7 +231,8 @@ sub rcs_notify () { #{{{
 	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;
 		}
 	}