summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-03-19 20:34:59 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-03-19 20:34:59 +0000
commit6b6fd778c7b35961736e9087f56e3872f6d9bdc9 (patch)
treeb1102d61b413a81b0705418e35b9c3ecf8c37540
parent4d50e71d3117b515bf53cc4af8da6dbf75dcaca8 (diff)
conflict detection, merging, etc should be done now, I think
-rwxr-xr-xikiwiki25
-rw-r--r--templates/editpage.tmpl3
2 files changed, 19 insertions, 9 deletions
diff --git a/ikiwiki b/ikiwiki
index 78c706c31..14c50a9af 100755
--- a/ikiwiki
+++ b/ikiwiki
@@ -487,11 +487,12 @@ sub rcs_commit ($$$) { #{{{
if (-d "$config{srcdir}/.svn") {
# Check to see if the page has been changed by someone
# else since rcs_prepedit was called.
- my $oldrev=int($rcstoken);
+ my ($oldrev)=$rcstoken=~/^([0-9]+)$/; # untaint
my $rev=svn_info("Revision", "$config{srcdir}/$file");
if ($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) {
warn("svn merge -r$oldrev:$rev failed\n");
@@ -501,7 +502,6 @@ sub rcs_commit ($$$) { #{{{
if (system("svn", "commit", "--quiet", "-m",
possibly_foolish_untaint($message),
"$config{srcdir}/$file") != 0) {
- warn("svn commit failed\n");
my $conflict=readfile("$config{srcdir}/$file");
if (system("svn", "revert", "--quiet", "$config{srcdir}/$file") != 0) {
warn("svn revert failed\n");
@@ -530,8 +530,8 @@ sub rcs_add ($) { #{{{
} #}}}
sub svn_info ($$) { #{{{
- my $file=shift;
my $field=shift;
+ my $file=shift;
my $info=`LANG=C svn info $file`;
my ($ret)=$info=~/^$field: (.*)$/m;
@@ -1082,13 +1082,16 @@ sub cgi_editpage ($$) { #{{{
$form->field(name => "do", type => 'hidden');
$form->field(name => "from", type => 'hidden');
+ $form->field(name => "rcsinfo", type => 'hidden');
$form->field(name => "page", value => "$page", force => 1);
$form->field(name => "comments", type => "text", size => 80);
$form->field(name => "content", type => "textarea", rows => 20,
cols => 80);
+ $form->tmpl_param("can_commit", $config{svn});
+ $form->tmpl_param("indexlink", indexlink());
if (! $form->submitted) {
- $form->field(name => "rcsinfo", type => 'hidden',
- value => rcs_prepedit($file), force => 1);
+ $form->field(name => "rcsinfo", value => rcs_prepedit($file),
+ force => 1);
}
if ($form->submitted eq "Cancel") {
@@ -1144,7 +1147,8 @@ sub cgi_editpage ($$) { #{{{
$form->title("creating $page");
}
elsif ($form->field("do") eq "edit") {
- if (! length $form->field('content')) {
+ if (! defined $form->field('content') ||
+ ! length $form->field('content')) {
my $content="";
if (exists $pagesources{lc($page)}) {
$content=readfile("$config{srcdir}/$pagesources{lc($page)}");
@@ -1158,8 +1162,6 @@ sub cgi_editpage ($$) { #{{{
$form->title("editing $page");
}
- $form->tmpl_param("can_commit", $config{svn});
- $form->tmpl_param("indexlink", indexlink());
print $form->render(submit => \@buttons);
}
else {
@@ -1193,9 +1195,14 @@ sub cgi_editpage ($$) { #{{{
$form->field("rcsinfo"));
if (defined $conflict) {
+ $form->field(name => "rcsinfo", value => rcs_prepedit($file),
+ force => 1);
$form->tmpl_param("page_conflict", 1);
- $form->field("content", $conflict);
+ $form->field("content", value => $conflict, force => 1);
$form->field("do", "edit)");
+ $form->tmpl_param("page_select", 0);
+ $form->field(name => "page", type => 'hidden');
+ $form->title("editing $page");
print $form->render(submit => \@buttons);
return;
}
diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl
index 6aa9ecd1c..6ab988261 100644
--- a/templates/editpage.tmpl
+++ b/templates/editpage.tmpl
@@ -4,6 +4,8 @@
<TMPL_IF NAME="PAGE_CONFLICT">
<p>
<b>Your changes confict with other changes made to the page.</b>
+</p>
+<p>
Conflict markers have been inserted into the page content. Reconcile the
confict and commit again to save your changes.
</p>
@@ -12,6 +14,7 @@ confict and commit again to save your changes.
<h1><TMPL_VAR INDEXLINK>/ <TMPL_VAR FORM-TITLE></h1>
<TMPL_VAR FIELD-DO>
<TMPL_VAR FIELD-FROM>
+<TMPL_VAR FIELD-RCSINFO>
<TMPL_IF NAME="PAGE_SELECT">
Page location: <TMPL_VAR FIELD-PAGE><br>
<TMPL_ELSE>