X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/04a9dbfe7daa9c352ae4e9af17df8134248f3806..30b3b00f4f9a7e1ce3b460697cb347df9cc6b6ff:/IkiWiki/Rcs/mercurial.pm

diff --git a/IkiWiki/Rcs/mercurial.pm b/IkiWiki/Rcs/mercurial.pm
index 66ff0996a..bfe6ba49c 100644
--- a/IkiWiki/Rcs/mercurial.pm
+++ b/IkiWiki/Rcs/mercurial.pm
@@ -1,13 +1,13 @@
 #!/usr/bin/perl
 
+package IkiWiki;
+
 use warnings;
 use strict;
 use IkiWiki;
 use Encode;
 use open qw{:utf8 :std};
 
-package IkiWiki;
-
 sub mercurial_log($) {
 	my $out = shift;
 	my @infos;
@@ -55,7 +55,7 @@ sub mercurial_log($) {
 }
 
 sub rcs_update () { #{{{
-	my @cmdline = ("hg", "-R", "$config{srcdir}", "update");
+	my @cmdline = ("hg", "-q", "-R", "$config{srcdir}", "update");
 	if (system(@cmdline) != 0) {
 		warn "'@cmdline' failed: $!";
 	}
@@ -65,19 +65,26 @@ sub rcs_prepedit ($) { #{{{
 	return "";
 } #}}}
 
-sub rcs_commit ($$$) { #{{{
+sub rcs_commit ($$$;$$) { #{{{
 	my ($file, $message, $rcstoken, $user, $ipaddr) = @_;
 
 	if (defined $user) {
-		$message="web commit by $user".(length $message ? ": $message" : "");
+		$user = possibly_foolish_untaint($user);
 	}
 	elsif (defined $ipaddr) {
-		$message="web commit from $ipaddr".(length $message ? ": $message" : "");
+		$user = "Anonymous from ".possibly_foolish_untaint($ipaddr);
+	}
+	else {
+		$user = "Anonymous";
 	}
 
 	$message = possibly_foolish_untaint($message);
+	if (! length $message) {
+		$message = "no message given";
+	}
 
-	my @cmdline = ("hg", "-R", "$config{srcdir}", "commit", "-m", "$message");
+	my @cmdline = ("hg", "-q", "-R", $config{srcdir}, "commit", 
+	               "-m", $message, "-u", $user);
 	if (system(@cmdline) != 0) {
 		warn "'@cmdline' failed: $!";
 	}
@@ -88,7 +95,7 @@ sub rcs_commit ($$$) { #{{{
 sub rcs_add ($) { # {{{
 	my ($file) = @_;
 
-	my @cmdline = ("hg", "-R", "$config{srcdir}", "add", "$file");
+	my @cmdline = ("hg", "-q", "-R", "$config{srcdir}", "add", "$config{srcdir}/$file");
 	if (system(@cmdline) != 0) {
 		warn "'@cmdline' failed: $!";
 	}
@@ -97,12 +104,13 @@ sub rcs_add ($) { # {{{
 sub rcs_recentchanges ($) { #{{{
 	my ($num) = @_;
 
-	eval q{use CGI 'escapeHTML'};
-	error($@) if $@;
-
-	my @cmdline = ("hg", "-R", $config{srcdir}, "log", "-v", "-l", $num);
+	my @cmdline = ("hg", "-R", $config{srcdir}, "log", "-v", "-l", $num,
+		"--style", "default");
 	open (my $out, "@cmdline |");
 
+	eval q{use Date::Parse};
+	error($@) if $@;
+
 	my @ret;
 	foreach my $info (mercurial_log($out)) {
 		my @pages = ();
@@ -131,7 +139,7 @@ sub rcs_recentchanges ($) { #{{{
 			rev        => $info->{"changeset"},
 			user       => $user,
 			committype => "mercurial",
-			when       => $info->{"date"},
+			when       => str2time($info->{"date"}),
 			message    => [@message],
 			pages      => [@pages],
 		};
@@ -140,12 +148,30 @@ sub rcs_recentchanges ($) { #{{{
 	return @ret;
 } #}}}
 
-sub rcs_notify () { #{{{
+sub rcs_diff ($) { #{{{
 	# TODO
 } #}}}
 
 sub rcs_getctime ($) { #{{{
-	error "getctime not implemented";
+	my ($file) = @_;
+
+	# XXX filename passes through the shell here, should try to avoid
+	# that just in case
+	my @cmdline = ("hg", "-R", $config{srcdir}, "log", "-v", "-l", '1', 
+		"--style", "default", "$config{srcdir}/$file");
+	open (my $out, "@cmdline |");
+
+	my @log = mercurial_log($out);
+
+	if (length @log < 1) {
+		return 0;
+	}
+
+	eval q{use Date::Parse};
+	error($@) if $@;
+	
+	my $ctime = str2time($log[0]->{"date"});
+	return $ctime;
 } #}}}
 
 1