* monotone changes by Brian May:

- On commits, replace "mtn sync" bidirectional with "mtn push" single
    direction. No need to pull changes when doing a commit. mtn sync
    is still called in rcs_update.
  - Support for viewing differences via patches using viewmtn.
master
Joey Hess 2008-02-03 18:14:39 -05:00
parent 855f28e105
commit 749c1e36d9
5 changed files with 96 additions and 88 deletions

View File

@ -342,10 +342,10 @@ sub rcs_commit ($$$;$$) { #{{{
return $conflict; return $conflict;
} }
if (defined($config{mtnsync}) && $config{mtnsync}) { if (defined($config{mtnsync}) && $config{mtnsync}) {
if (system("mtn", "--root=$config{mtnrootdir}", "sync", if (system("mtn", "--root=$config{mtnrootdir}", "push",
"--quiet", "--ticker=none", "--key", "--quiet", "--ticker=none", "--key",
$config{mtnkey}) != 0) { $config{mtnkey}) != 0) {
debug("monotone sync failed"); debug("monotone push failed");
} }
} }
@ -431,10 +431,28 @@ sub rcs_recentchanges ($) { #{{{
my @changed_files = get_changed_files($automator, $rev); my @changed_files = get_changed_files($automator, $rev);
my $file; my $file;
my ($out, $err) = $automator->call("parents", $rev);
my @parents = ($out =~ m/^($sha1_pattern)$/);
my $parent = $parents[0];
foreach $file (@changed_files) { foreach $file (@changed_files) {
push @pages, { next unless length $file;
page => pagename($file),
} if length $file; if (defined $config{diffurl} and (@parents == 1)) {
my $diffurl=$config{diffurl};
$diffurl=~s/\[\[r1\]\]/$parent/g;
$diffurl=~s/\[\[r2\]\]/$rev/g;
$diffurl=~s/\[\[file\]\]/$file/g;
push @pages, {
page => pagename($file),
diffurl => $diffurl,
};
}
else {
push @pages, {
page => pagename($file),
}
}
} }
push @ret, { push @ret, {

5
debian/changelog vendored
View File

@ -22,6 +22,11 @@ ikiwiki (2.31) UNRELEASED; urgency=low
* aggregate: Lots of changes; aggregation can now run without locking the * aggregate: Lots of changes; aggregation can now run without locking the
wiki, and there is a separate aggregatelock to prevent multiple concurrent wiki, and there is a separate aggregatelock to prevent multiple concurrent
aggregation runs. aggregation runs.
* monotone changes by Brian May:
- On commits, replace "mtn sync" bidirectional with "mtn push" single
direction. No need to pull changes when doing a commit. mtn sync
is still called in rcs_update.
- Support for viewing differences via patches using viewmtn.
-- Joey Hess <joeyh@debian.org> Sat, 02 Feb 2008 23:36:31 -0500 -- Joey Hess <joeyh@debian.org> Sat, 02 Feb 2008 23:36:31 -0500

View File

@ -1,78 +1,56 @@
#Ikiwiki plugin for the Monotone revision control system. The Monotone module still lacks support for setting up a post-commit hook,
so commits made via monotone will not automatically update the wiki.
I've just made a patch to the ikiwiki code that allows it to use the [[rcs/Monotone]] revision control system. It is available at: Here for future reference is the most recent version of support for
that I've been sent. It's not yet working; there are path issues. --[[Joey]]
<http://www.cse.unsw.edu.au/~willu/monotone-ikiwiki.diff> <pre>
diff --git a/IkiWiki/Rcs/monotone.pm b/IkiWiki/Rcs/monotone.pm
At the moment it is basically complete. At present rcs_notify() is implemeted but untested, the rest is implemented and tested. index cde6029..34f8f96 100644
--- a/IkiWiki/Rcs/monotone.pm
The current version of the patch handles conflicts through the web interface. It is still not perfect as it will break if there is a rename that conflicts with a web change (but so will the other Rcs plugins I think). It also commits a revision with conflict markers if there is a conflict requiring such markers... ick. +++ b/IkiWiki/Rcs/monotone.pm
@@ -186,8 +186,9 @@ sub rcs_update () { #{{{
Note: This patch requires a rather recent Monotone perl module (18 August 2007 or later). It is available from the monotone repository here: <http://viewmtn.angrygoats.net/branch/changes/net.venge.monotone>. check_config();
> The setup instructions to add 40 lines of code to monotonerc is pretty frightning stuff. if (defined($config{mtnsync}) && $config{mtnsync}) {
> Is there some way this can be automated? --[[Joey]] + check_mergerc();
if (system("mtn", "--root=$config{mtnrootdir}", "sync",
>> I've committed a bunch of this to monotone so that in future it could be removed. - "--quiet", "--ticker=none",
>> I've also just fixed this so it is in a separate, automagically generated, rc file. + "--quiet", "--ticker=none", "--rcfile", $config{mtnmergerc},
"--key", $config{mtnkey}) != 0) {
>>> Fair enough. Didn't realize you were a monotone committer. :-) debug("monotone sync failed before update");
}
>>>> I am, but still a little newish. Feedback is good. In particular, this is my first major bit of PERL. @@ -604,4 +605,9 @@ __DATA__
return true
> Having rcs_commit return a warning message when there's an unresolved conflict end
> isn't right; that message will populate the page edit box. You might want }
> to use the error() function here? + function note_netsync_revision_received(new_id, revision, certs, session_id)
+ if (program_exists_in_path("ikiwiki-netsync-hook")) then
>> It should never reach that case, so I have changed that to error. + execute("ikiwiki-netsync-hook", new_id)
+ end
> There'an incomplete comment ending with "note, this relies on the fact that" + end
EOF
>> erg... sorry, fixed. diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm
index 2103ea5..cff718c 100644
[[tag patch]] diff --git a/doc/ikiwiki.setup b/doc/ikiwiki.setup
index 1377315..0cbe27e 100644
>> I've [[accepted|done]] this patch, thank you! --- a/doc/ikiwiki.setup
+++ b/doc/ikiwiki.setup
>>> Thanks for committing it. I hate keeping my own diffs. :) @@ -88,6 +88,16 @@ use IkiWiki::Setup::Standard {
# # Enable mail notifications of commits.
>> I did make a few changes. Please review, and make sure it still works # notify => 1,
>> (a test case like we have for some of the other RCSes would be nice..) #},
+ #{
>>> Tested. It still works at least as well as it did. I'll try to get to a test case soon. + # # The monotone netsync revision received wrapper.
>>> In checking the source I noticed a few bogus comments I left in when editing, + # # Note that you also need to install a lua
>>> and a bug in page adding. + # # hook into monotone to make this work
>>> Here is a small patch for them: + # # see: http://ikiwiki.info/rcs/monotone/
+ # wrapper => "/usr/local/bin/ikiwiki-netsync-hook",
>>>> applied + # wrappermode => "04755",
+ # # Enable mail notifications of commits.
Here is another patch. It fixes a FIXME you added. I was using $file within backticks because + # notify => 1,
I was getting an error trying to do it right. I've figured out the error, and now do it right. This + #},
should also speed things up (very slightly) ],
> applied # Generate rss feeds for blogs?
</pre>
>> BTW, will all the monotone output parsing work if LANG != C?
>>> It should (he says crossing fingers).
>>> In the places where I do any complex parsing I'm using a special
>>> version of the mtn commands designed for scripting. They have a
>>> stable, easy to parse, output that doesn't get translated (I think).
>> Do monotone post-commit hooks actually use REV?
>>> Monotone post-commit hooks are written in Lua and can do
>>> what they please. Setting the REV environment var before
>>> calling Ikiwiki seems reasonable, but I've not written the
>>> Lua hook.
>>>> So the rcs_notify support is not just untested, but can't work
>>>> at all w/o further development.
I've just done this further development... The following patch adds support for diffurls.
I've also partially tested the commit message support. I was unable to get Ikiwiki to send
change emails at all (cgi or otherwise), so I tested by adding warn() calls. There were a
few things that needed to be fixed. Support is much closer now (including a simple default
monotone lua hook).
> We handled this patchset by mail, I applied the still-relevant parts. --[[Joey]]

View File

@ -50,6 +50,8 @@ use IkiWiki::Setup::Standard {
# Monotone stuff # Monotone stuff
#rcs => "monotone", #rcs => "monotone",
#mtnkey => "web\@machine.company.com", #mtnkey => "web\@machine.company.com",
#historyurl => "http://viewmtn.example.com/",
#diffurl => "http://viewmtn.example.com/revision/diff/[[r1]]/with/[[r2]]/[[file]]",
# Set if you want the wiki to sync on update and commit. # Set if you want the wiki to sync on update and commit.
#mtnsync => 0, #mtnsync => 0,
# The path to your workspace (defaults to the srcdir itself) # The path to your workspace (defaults to the srcdir itself)

View File

@ -1,15 +1,20 @@
[monotone](http://monotone.ca/) is a distributed revision control system. [Monotone](http://monotone.ca/) is a distributed revision control system.
Ikiwiki supports storing a wiki in Monotone and editing it using the [[cgi]] interface. Ikiwiki supports storing a wiki in a Monotone repository and editing it
It will use the Monotone logs to generate the [[RecentChanges]] page. using the [[cgi]] interface. It will use the Monotone logs to generate the
[[RecentChanges]] page.
The monotone support requires the Monotone perl module (from the contrib/ directory The monotone support in ikiwiki requires the Monotone perl module to be
in the monotone source) to be installed. In particular, it needs version 0.03 or higher of that module. installed. (It's available from the contrib/ directory in the monotone
source.) In particular, it needs version 0.03 or higher of that module.
The module is available from the monotone source repository at: The module is available from the monotone source repository at:
<http://viewmtn.angrygoats.net/branch/changes/net.venge.monotone> <http://viewmtn.angrygoats.net/branch/changes/net.venge.monotone>
Monotone support works, but there are still a few minor missing bits (listed here so they are not forgotten): Monotone support works, but there are still a few minor missing bits (listed here so they are not forgotten):
* At the moment there are no links to display diffs between revisions. It shouldn't be hard to add links to a [ViewMTN](http://grahame.angrygoats.net/moinmoin/ViewMTN) instance, but it hasn't been done yet. * The [[post-commit]] hook support is not yet completly implemented.
* Documentation (this page) could be improved. * Documentation (this page) could be improved.
There is also a mismatch between the way Ikiwiki handles conflicts and the way Monotone handles conflicts. At present, if there is a conflict, then Ikiwiki will commit a revision with conflict markers before presenting it to the user. This is ugly, but there is no clean way to fix it at present. There is also a mismatch between the way Ikiwiki handles conflicts and the
way Monotone handles conflicts. At present, if there is a conflict, then
Ikiwiki will commit a revision with conflict markers before presenting it
to the user. This is ugly, but there is no clean way to fix it at present.