X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/04a9dbfe7daa9c352ae4e9af17df8134248f3806..4f56c5ae7c5b6f79d88c3a102b2b9363d24ef4d4:/IkiWiki/Rcs/mercurial.pm diff --git a/IkiWiki/Rcs/mercurial.pm b/IkiWiki/Rcs/mercurial.pm index 66ff0996a..b7b15632a 100644 --- a/IkiWiki/Rcs/mercurial.pm +++ b/IkiWiki/Rcs/mercurial.pm @@ -65,19 +65,23 @@ 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 $ipaddr"; + } + else { + $user = "Anonymous"; } $message = possibly_foolish_untaint($message); - my @cmdline = ("hg", "-R", "$config{srcdir}", "commit", "-m", "$message"); + my @cmdline = ("hg", "-R", "$config{srcdir}", "commit", + "-m", "$message", "-u", "$user"); if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; } @@ -103,6 +107,9 @@ sub rcs_recentchanges ($) { #{{{ my @cmdline = ("hg", "-R", $config{srcdir}, "log", "-v", "-l", $num); open (my $out, "@cmdline |"); + eval q{use Date::Parse}; + error($@) if $@; + my @ret; foreach my $info (mercurial_log($out)) { my @pages = (); @@ -131,7 +138,7 @@ sub rcs_recentchanges ($) { #{{{ rev => $info->{"changeset"}, user => $user, committype => "mercurial", - when => $info->{"date"}, + when => time - str2time($info->{"date"}), message => [@message], pages => [@pages], }; @@ -145,7 +152,24 @@ sub rcs_notify () { #{{{ } #}}} 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', $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