diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2007-03-25 17:18:53 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2007-03-25 17:18:53 +0000 |
commit | 9338c26ea4be7aea98ce300fb55350a77d10a6e0 (patch) | |
tree | a1103d913e7719c9a0409515b56956b4ea9eafd7 /doc | |
parent | a0727f491513889a77050793cf828bba7a4e8aaf (diff) |
web commit by tuomov: Another partial darcs suppot plugin
Diffstat (limited to 'doc')
-rw-r--r-- | doc/patchqueue/darcs.mdwn | 135 |
1 files changed, 134 insertions, 1 deletions
diff --git a/doc/patchqueue/darcs.mdwn b/doc/patchqueue/darcs.mdwn index 41d209fbd..b35648451 100644 --- a/doc/patchqueue/darcs.mdwn +++ b/doc/patchqueue/darcs.mdwn @@ -328,4 +328,137 @@ This is my ([bma](bma@bmalee.eu)) darcs.pm - it's messy (my Perl isn't up to muc -"""]]
\ No newline at end of file +"""]] + +--- + +Well, here's my version too. It only does getctime -- using a real XML parser, instead of regexp ugliness -- and maybe recentchanges, but that may be bitrotted, or maybe I never finished it, as I only need the getctime. As for actual commits, I have previously voiced my opinion, that this should be done by the plugin generating a patch bundle, and forwarding it to darcs in some way (`darcs apply` or even email to another host, possibly moderated), instead of the hacky direct modification of a working copy. + +[[toggle text="show" id="tuomov"]] +[[toggleable id="tuomov" text=""" +<pre> +#!/usr/bin/perl +# Stubs for no revision control. + +use warnings; +use strict; +use IkiWiki; + +package IkiWiki; + +sub rcs_update () { +} + +sub rcs_prepedit ($) { + return "" +} + +sub rcs_commit ($$$) { + return undef # success +} + +sub rcs_add ($) { +} + +sub rcs_recentchanges ($) { + my $num=shift; + my @ret; + + eval q{use Date::Parse}; + eval q{use XML::Simple}; + + my $repodir=$config{srcdir}; + + if (-d "$config{srcdir}/_darcs") { + my $child = open(LOG, "-|"); + if (! $child) { + exec("darcs", "changes", "--xml", + "--repodir", "$repodir", + "--last", "$num") + || error("darcs changes failed to run"); + } + my $data=<LOG>; + close LOG; + + my $log = XMLin($data, ForceArray => 1); + + foreach my $patch ($log->{patch}) { + my $date=$patch->{local_date}; + my $hash=$patch->{hash}; + my $when=concise(ago(time - str2time($date))); + my @pages; + + my $child = open(SUMMARY, "-|"); + if (! $child) { + exec("darcs", "annotate", "-s", "--xml", + "--match", "hash: $hash", + "--repodir", "$repodir") + || error("darcs annotate failed to run"); + } + my $data=<SUMMARY>; + close SUMMARY; + + my $summary = XMLin("<lame>$data</lame>", ForceArray => 1); + + # TODO: find @pages + + push @ret, { + #rev => $rev, + user => $patch->{author}, + #committype => $committype, + when => $when, + #message => [@message], + pages => [@pages], + }; # if @pages; + return @ret if @ret >= $num; + } + } + + return @ret; +} + +sub rcs_notify () { +} + +sub rcs_getctime ($) { + my $file=shift; + + eval q{use Date::Parse}; + eval q{use XML::Simple}; + local $/=undef; + + # Sigh... doing things the hard way again + my $repodir=$config{srcdir}; + + my $filer=substr($file, length($repodir)); + $filer =~ s:^[/]+::; + + my $child = open(LOG, "-|"); + if (! $child) { + exec("darcs", "changes", "--xml", "--reverse", + "--repodir", "$repodir", "$filer") + || error("darcs changes $filer failed to run"); + } + + my $data=<LOG>; + close LOG; + + my $log = XMLin($data, ForceArray => 1); + + my $datestr=$log->{patch}[0]->{local_date}; + + if (! defined $datestr) { + warn "failed to get ctime for $filer"; + return 0; + } + + my $date=str2time($datestr); + + debug("found ctime ".localtime($date)." for $file"); + + return $date; +} + +1 +</pre> +"""]] |