git: Put web committer name/openid/address in the git author field
The committer's email address is not used (because leaking email addresses is not liked by many users). Closes: #451023 A "Web-commit" trailer is added, to allow telling the difference between web commits and direct commits.master
parent
584f3e3061
commit
ac62a47ea4
|
@ -180,14 +180,14 @@ sub _parse_diff_tree ($@) { #{{{
|
||||||
$ci{ "${who}_epoch" } = $epoch;
|
$ci{ "${who}_epoch" } = $epoch;
|
||||||
$ci{ "${who}_tz" } = $tz;
|
$ci{ "${who}_tz" } = $tz;
|
||||||
|
|
||||||
if ($name =~ m/^([^<]+) <([^@>]+)/) {
|
if ($name =~ m/^[^<]+\s+<([^@>]+)/) {
|
||||||
my ($fullname, $username) = ($1, $2);
|
$ci{"${who}_username"} = $1;
|
||||||
$ci{"${who}_fullname"} = $fullname;
|
}
|
||||||
$ci{"${who}_username"} = $username;
|
elsif ($name =~ m/^([^<]+)\s+<>$/) {
|
||||||
|
$ci{"${who}_username"} = $1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$ci{"${who}_fullname"} =
|
$ci{"${who}_username"} = $name;
|
||||||
$ci{"${who}_username"} = $name;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($line =~ m/^$/) {
|
elsif ($line =~ m/^$/) {
|
||||||
|
@ -311,15 +311,6 @@ sub rcs_commit ($$$;$$) { #{{{
|
||||||
|
|
||||||
my ($file, $message, $rcstoken, $user, $ipaddr) = @_;
|
my ($file, $message, $rcstoken, $user, $ipaddr) = @_;
|
||||||
|
|
||||||
if (defined $user) {
|
|
||||||
$message = "web commit by $user" .
|
|
||||||
(length $message ? ": $message" : "");
|
|
||||||
}
|
|
||||||
elsif (defined $ipaddr) {
|
|
||||||
$message = "web commit from $ipaddr" .
|
|
||||||
(length $message ? ": $message" : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check to see if the page has been changed by someone else since
|
# Check to see if the page has been changed by someone else since
|
||||||
# rcs_prepedit was called.
|
# rcs_prepedit was called.
|
||||||
my $cur = git_sha1($file);
|
my $cur = git_sha1($file);
|
||||||
|
@ -329,6 +320,14 @@ sub rcs_commit ($$$;$$) { #{{{
|
||||||
my $conflict = _merge_past($prev, $file, $dummy_commit_msg);
|
my $conflict = _merge_past($prev, $file, $dummy_commit_msg);
|
||||||
return $conflict if defined $conflict;
|
return $conflict if defined $conflict;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Set the commit author to the web committer.
|
||||||
|
my %env=%ENV;
|
||||||
|
if (defined $user || defined $ipaddr) {
|
||||||
|
$ENV{GIT_AUTHOR_NAME}=defined $user ? $user : $ipaddr;
|
||||||
|
$ENV{GIT_AUTHOR_EMAIL}="";
|
||||||
|
$message.="\n\nWeb-commit: true\n";
|
||||||
|
}
|
||||||
|
|
||||||
# git commit returns non-zero if file has not been really changed.
|
# git commit returns non-zero if file has not been really changed.
|
||||||
# so we should ignore its exit status (hence run_or_non).
|
# so we should ignore its exit status (hence run_or_non).
|
||||||
|
@ -338,7 +337,8 @@ sub rcs_commit ($$$;$$) { #{{{
|
||||||
run_or_cry('git', 'push', $config{gitorigin_branch});
|
run_or_cry('git', 'push', $config{gitorigin_branch});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%ENV=%env;
|
||||||
return undef; # success
|
return undef; # success
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ sub rcs_recentchanges ($) { #{{{
|
||||||
$ci->{'author_epoch'}
|
$ci->{'author_epoch'}
|
||||||
);
|
);
|
||||||
|
|
||||||
my (@pages, @messages);
|
my @pages;
|
||||||
foreach my $detail (@{ $ci->{'details'} }) {
|
foreach my $detail (@{ $ci->{'details'} }) {
|
||||||
my $file = $detail->{'file'};
|
my $file = $detail->{'file'};
|
||||||
|
|
||||||
|
@ -384,26 +384,34 @@ sub rcs_recentchanges ($) { #{{{
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
push @messages, { line => $_ } foreach grep {
|
my $web_commit=0;
|
||||||
! m/^ *(signed[ \-]off[ \-]by[ :]|acked[ \-]by[ :]|cc[ :])/i
|
my @messages;
|
||||||
} @{$ci->{'comment'}};
|
my $pastblank=0;
|
||||||
|
foreach my $line (@{$ci->{'comment'}}) {
|
||||||
|
$pastblank=1 if $line eq '';
|
||||||
|
next if $pastblank && $line=~m/^ *(signed[ \-]off[ \-]by[ :]|acked[ \-]by[ :]|cc[ :])/i;
|
||||||
|
if ($pastblank && $line=~m/^ *web-commit: true$/i) {
|
||||||
|
$web_commit=1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
push @messages, { line => $line };
|
||||||
|
}
|
||||||
|
|
||||||
my ($user, $type) = (q{}, "web");
|
my $user;
|
||||||
|
# compatability code for old web commit messages
|
||||||
if (defined $messages[0] &&
|
if (! $web_commit && defined $messages[0] &&
|
||||||
$messages[0]->{line} =~ m/$config{web_commit_regexp}/) {
|
$messages[0]->{line} =~ m/$config{web_commit_regexp}/) {
|
||||||
$user = defined $2 ? "$2" : "$3";
|
$user = defined $2 ? "$2" : "$3";
|
||||||
$messages[0]->{line} = $4;
|
$messages[0]->{line} = $4;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$type ="git";
|
|
||||||
$user = $ci->{'author_username'};
|
$user = $ci->{'author_username'};
|
||||||
}
|
}
|
||||||
|
|
||||||
push @rets, {
|
push @rets, {
|
||||||
rev => $sha1,
|
rev => $sha1,
|
||||||
user => $user,
|
user => $user,
|
||||||
committype => $type,
|
committype => $web_commit ? "web" : "git",
|
||||||
when => $when,
|
when => $when,
|
||||||
message => [@messages],
|
message => [@messages],
|
||||||
pages => [@pages],
|
pages => [@pages],
|
||||||
|
|
|
@ -28,6 +28,9 @@ ikiwiki (2.54) UNRELEASED; urgency=low
|
||||||
work. Markdown removes one level of escaping.
|
work. Markdown removes one level of escaping.
|
||||||
* Add a postscan hook.
|
* Add a postscan hook.
|
||||||
* search: Use postscan hook, avoid updating index when previewing.
|
* search: Use postscan hook, avoid updating index when previewing.
|
||||||
|
* git: Put web committer name/openid/address in the git author field.
|
||||||
|
The committer's email address is not used (because leaking email addresses
|
||||||
|
is not liked by many users). Closes: #451023
|
||||||
|
|
||||||
[ Simon McVittie ]
|
[ Simon McVittie ]
|
||||||
* meta, inline: Support guid options, to allow forcing a particular url or
|
* meta, inline: Support guid options, to allow forcing a particular url or
|
||||||
|
|
|
@ -5,3 +5,5 @@ the user or by the script?), it could also set `GIT_COMMITTER_NAME` and
|
||||||
`GIT_COMMITTER_EMAIL` to the same values. --[[JoshTriplett]]
|
`GIT_COMMITTER_EMAIL` to the same values. --[[JoshTriplett]]
|
||||||
|
|
||||||
> See [[debbug 451023]] for a [[patch]] --[[Joey]]
|
> See [[debbug 451023]] for a [[patch]] --[[Joey]]
|
||||||
|
|
||||||
|
[[done]]
|
||||||
|
|
Loading…
Reference in New Issue