first cut at svn merge and conflict
parent
c7e9c36926
commit
3c239b14bc
33
ikiwiki
33
ikiwiki
|
@ -461,19 +461,34 @@ sub rcs_update () { #{{{
|
||||||
}
|
}
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
sub rcs_commit ($) { #{{{
|
sub rcs_commit ($$) { #{{{
|
||||||
|
# Tries to commit the page; returns undef on _success_ and
|
||||||
|
# a version of the page with the rcs's conflict markers on failure.
|
||||||
|
# The file is relative to the srcdir.
|
||||||
my $message=shift;
|
my $message=shift;
|
||||||
|
my $file=shift;
|
||||||
|
|
||||||
if (-d "$config{srcdir}/.svn") {
|
if (-d "$config{srcdir}/.svn") {
|
||||||
|
# svn up to let svn merge in other changes
|
||||||
|
if (system("svn", "update", "$config{srcdir}/$file") != 0) {
|
||||||
|
warn("svn update failed\n");
|
||||||
|
}
|
||||||
if (system("svn", "commit", "--quiet", "-m",
|
if (system("svn", "commit", "--quiet", "-m",
|
||||||
possibly_foolish_untaint($message),
|
possibly_foolish_untaint($message),
|
||||||
$config{srcdir}) != 0) {
|
"$config{srcdir}/$file") != 0) {
|
||||||
warn("svn commit failed\n");
|
warn("svn commit failed\n");
|
||||||
|
my $conflict=readfile("$config{srcdir}/$file");
|
||||||
|
if (system("svn", "revert", "$config{srcdir}/$file") != 0) {
|
||||||
|
warn("svn revert failed\n");
|
||||||
|
}
|
||||||
|
return $conflict;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return undef # success
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
sub rcs_add ($) { #{{{
|
sub rcs_add ($) { #{{{
|
||||||
|
# filename is relative to the root of the srcdir
|
||||||
my $file=shift;
|
my $file=shift;
|
||||||
|
|
||||||
if (-d "$config{srcdir}/.svn") {
|
if (-d "$config{srcdir}/.svn") {
|
||||||
|
@ -1016,6 +1031,7 @@ sub cgi_editpage ($$) { #{{{
|
||||||
table => 0,
|
table => 0,
|
||||||
template => "$config{templatedir}/editpage.tmpl"
|
template => "$config{templatedir}/editpage.tmpl"
|
||||||
);
|
);
|
||||||
|
my @buttons=("Save Page", "Preview", "Cancel");
|
||||||
|
|
||||||
my ($page)=$form->param('page')=~/$config{wiki_file_regexp}/;
|
my ($page)=$form->param('page')=~/$config{wiki_file_regexp}/;
|
||||||
if (! defined $page || ! length $page || $page ne $q->param('page') ||
|
if (! defined $page || ! length $page || $page ne $q->param('page') ||
|
||||||
|
@ -1043,6 +1059,7 @@ sub cgi_editpage ($$) { #{{{
|
||||||
else {
|
else {
|
||||||
$form->tmpl_param("page_preview", "");
|
$form->tmpl_param("page_preview", "");
|
||||||
}
|
}
|
||||||
|
$form->tmpl_param("page_conflict", "");
|
||||||
|
|
||||||
if (! $form->submitted || $form->submitted eq "Preview" ||
|
if (! $form->submitted || $form->submitted eq "Preview" ||
|
||||||
! $form->validate) {
|
! $form->validate) {
|
||||||
|
@ -1099,7 +1116,7 @@ sub cgi_editpage ($$) { #{{{
|
||||||
|
|
||||||
$form->tmpl_param("can_commit", $config{svn});
|
$form->tmpl_param("can_commit", $config{svn});
|
||||||
$form->tmpl_param("indexlink", indexlink());
|
$form->tmpl_param("indexlink", indexlink());
|
||||||
print $form->render(submit => ["Save Page", "Preview", "Cancel"]);
|
print $form->render(submit => \@buttons);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
# save page
|
# save page
|
||||||
|
@ -1135,7 +1152,15 @@ sub cgi_editpage ($$) { #{{{
|
||||||
unlockwiki();
|
unlockwiki();
|
||||||
# presumably the commit will trigger an update
|
# presumably the commit will trigger an update
|
||||||
# of the wiki
|
# of the wiki
|
||||||
rcs_commit($message);
|
my $conflict=rcs_commit($file, $message);
|
||||||
|
|
||||||
|
if (defined $conflict) {
|
||||||
|
$form->tmpl_param("page_conflict", 1);
|
||||||
|
$form->field("content", $conflict);
|
||||||
|
$form->field("do", "edit)");
|
||||||
|
print $form->render(submit => \@buttons);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
loadindex();
|
loadindex();
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
<html>
|
<html>
|
||||||
<head><title><TMPL_VAR FORM-TITLE></title></head>
|
<head><title><TMPL_VAR FORM-TITLE></title></head>
|
||||||
<body>
|
<body>
|
||||||
|
<TMPL_IF NAME="PAGE_CONFLICT">
|
||||||
|
<p>
|
||||||
|
<b>Your changes confict with other changes made to the page.</b>
|
||||||
|
Conflict markers have been inserted into the page content. Reconcile the
|
||||||
|
confict and commit again to save your changes.
|
||||||
|
</p>
|
||||||
|
</TMPL_IF>
|
||||||
<TMPL_VAR FORM-START>
|
<TMPL_VAR FORM-START>
|
||||||
<h1><TMPL_VAR INDEXLINK>/ <TMPL_VAR FORM-TITLE></h1>
|
<h1><TMPL_VAR INDEXLINK>/ <TMPL_VAR FORM-TITLE></h1>
|
||||||
<TMPL_VAR FIELD-DO>
|
<TMPL_VAR FIELD-DO>
|
||||||
|
|
Loading…
Reference in New Issue