misc fixes from Recai

master
joey 2006-06-03 18:03:41 +00:00
parent ff8ab2b61a
commit 00d761ab53
2 changed files with 28 additions and 27 deletions

View File

@ -11,10 +11,9 @@ use IkiWiki;
package IkiWiki;
my $origin_branch = 'origin'; # Git ref for main repository
my $master_branch = 'master'; # Working branch
my $master_branch = 'master'; # working branch
my $sha1_pattern = qr/[0-9a-fA-F]{40}/; # pattern to validate Git sha1sums
my $dummy_commit_msg = 'dummy commit'; # will be used in all dummy commits
# and skipped in recent changes list
my $dummy_commit_msg = 'dummy commit'; # message to skip in recent changes
my $web_commit_msg = qr/^web commit by (\w+):?(.*)/; # pattern for web commits
sub _safe_git (&@) { #{{{
@ -105,7 +104,7 @@ sub _merge_past ($$$) { #{{{
push @undo, sub {
return if ! -e "$hidden"; # already renamed
rename($hidden, $target)
or debug("rename '$hidden' to '$target' failed: $!");
or warn "rename '$hidden' to '$target' failed: $!";
};
my $branch = "throw_away_${sha1}"; # supposed to be unique
@ -160,10 +159,9 @@ sub _parse_diff_tree (@) { #{{{
return if !defined @{ $dt_ref } || !length @{ $dt_ref }[0];
my %ci;
# Header line.
HEADER: while (my $line = shift @{ $dt_ref }) {
return if $line !~ m/^diff-tree (\S+)/;
return if $line !~ m/^diff-tree ($sha1_pattern)/;
my $sha1 = $1;
$ci{'sha1'} = $sha1;
@ -217,11 +215,11 @@ sub _parse_diff_tree (@) { #{{{
# Modified files.
FILE: while (my $line = shift @{ $dt_ref }) {
if ($line =~ m{^
:([0-7]{6})[ ] # from mode
if ($line =~ m{^:
([0-7]{6})[ ] # from mode
([0-7]{6})[ ] # to mode
([0-9a-fA-F]{40})[ ] # from sha1
([0-9a-fA-F]{40})[ ] # to sha1
($sha1_pattern)[ ] # from sha1
($sha1_pattern)[ ] # to sha1
(.) # status
([0-9]{0,3})\t # similarity
(.*) # file
@ -244,7 +242,7 @@ sub _parse_diff_tree (@) { #{{{
last FILE;
}
error("No detail in diff-tree output") if !defined $ci{'details'};
warn "No detail in diff-tree output" if !defined $ci{'details'};
return \%ci;
} #}}}
@ -259,7 +257,7 @@ sub git_commit_info (;$$) { #{{{
my @raw_lines =
run_or_die(qq{git-rev-list --max-count=$num $sha1 |
git-diff-tree --stdin --pretty=raw -c -M -r});
git-diff-tree --stdin --pretty=raw -M -r});
my @ci;
while (my $parsed = _parse_diff_tree(\@raw_lines)) {
@ -274,10 +272,12 @@ sub git_sha1 (;$) { #{{{
my $file = shift || q{--};
my ($sha1) = run_or_die('git-rev-list', '--max-count=1', 'HEAD', $file);
($sha1) = $sha1 =~ m/($sha1_pattern)/; # sha1sum is untainted now
debug("Empty sha1sum for '$file'.") if !length $sha1;
return $sha1;
# Ignore error since a non-existing file might be given.
my ($sha1) = run_or_non('git-rev-list', '--max-count=1', 'HEAD', $file);
if ($sha1) {
($sha1) = $sha1 =~ m/($sha1_pattern)/; # sha1 is untainted now
} else { debug("Empty sha1sum for '$file'.") }
return defined $sha1 ? $sha1 : q{};
} #}}}
sub rcs_update () { #{{{
@ -292,8 +292,7 @@ sub rcs_prepedit ($) { #{{{
my ($file) = @_;
my $sha1 = git_sha1($file);
return defined $sha1 ? $sha1 : q{};
return git_sha1($file);
} #}}}
sub rcs_commit ($$$) { #{{{
@ -313,7 +312,7 @@ sub rcs_commit ($$$) { #{{{
# Check to see if the page has been changed by someone else since
# rcs_prepedit was called.
my $cur = git_sha1($file);
my ($prev) = $rcstoken =~ m/^$sha1_pattern$/; # untaint
my ($prev) = $rcstoken =~ /^($sha1_pattern)$/; # untaint
if (defined $cur && defined $prev && $cur ne $prev) {
my $conflict = _merge_past($prev, $file, $dummy_commit_msg);
@ -322,6 +321,7 @@ sub rcs_commit ($$$) { #{{{
# git-commit(1) returns non-zero if file has not been really changed.
# so we should ignore its exit status (hence run_or_non).
$message = possibly_foolish_untaint($message);
if (run_or_non('git-commit', '-m', $message, '-i', $file)) {
unlockwiki();
run_or_cry('git-push', $origin_branch);

View File

@ -16,18 +16,19 @@ use IkiWiki::Setup::Standard {
url => "http://myhost/wiki",
cgiurl => "http://myhost/ikiwiki.cgi",
#diffurl => "http://svn.someurl/trunk/[[file]]?root=wiki&r1=[[r1]]&r2=[[r2]]",
#templatedir => "/usr/share/ikiwiki/templates",
# Subversion stuff.
rcs => "svn",
#historyurl => "http://svn.myhost/trunk/[[file]]",
#diffurl => "http://svn.someurl/trunk/[[file]]?root=wiki&r1=[[r1]]&r2=[[r2]]",
svnrepo => "/svn/wiki",
svnpath => "trunk",
# Git stuff.
#rcs => "git",
#historyurl => "http://git.host/gitweb.cgi?p=wiki.git;a=history;f=[[file]]",
#diffurl => "http://git.host/gitweb.cgi?p=wiki.git;a=blobdiff;h=[[sha1_to]];hp=[[sha1_from]];hb=[[sha1_parent]];f=[[file]]",
wrappers => [
#{
@ -38,7 +39,7 @@ use IkiWiki::Setup::Standard {
#},
{
# The svn post-commit wrapper.
# Note that this will overwrite any exsting
# Note that this will overwrite any existing
# post-commit hook script, which may not be
# what you want.
wrapper => "/svn/wikirepo/hooks/post-commit",
@ -48,8 +49,8 @@ use IkiWiki::Setup::Standard {
},
#{
# # The git post-update wrapper.
# # Note that this will overwrite any exsting
# # post-commit hook script, which may not be
# # Note that this will overwrite any existing
# # post-update hook script, which may not be
# # what you want.
# wrapper => "/git/wikirepo/hooks/post-update",
# wrappermode => "04755",