fix display of page name in recentchanges after a revert
When the wiki is in a subdir of the git repo, a web revert would show in recentchanges as eg, doc/index, instead of just index. This happened because decode_git_file caches a $prefix that is dependant on the $git_dir setting, and the revert code runs with a different $git_dir, which polluted the $prefix for later. Fix this by adding a with_git_dir that juggles the variables properly.master
parent
c29a088dd8
commit
1b6c189578
|
@ -9,7 +9,6 @@ use open qw{:utf8 :std};
|
|||
|
||||
my $sha1_pattern = qr/[0-9a-fA-F]{40}/; # pattern to validate Git sha1sums
|
||||
my $dummy_commit_msg = 'dummy commit'; # message to skip in recent changes
|
||||
my $git_dir=undef;
|
||||
|
||||
sub import {
|
||||
hook(type => "checkconfig", id => "git", call => \&checkconfig);
|
||||
|
@ -151,6 +150,17 @@ sub genwrapper {
|
|||
}
|
||||
}
|
||||
|
||||
my $git_dir=undef;
|
||||
my $prefix=undef;
|
||||
|
||||
sub in_git_dir ($$) {
|
||||
$git_dir=shift;
|
||||
my @ret=shift->();
|
||||
$git_dir=undef;
|
||||
$prefix=undef;
|
||||
return @ret;
|
||||
}
|
||||
|
||||
sub safe_git (&@) {
|
||||
# Start a child process safely without resorting to /bin/sh.
|
||||
# Returns command output (in list content) or success state
|
||||
|
@ -302,8 +312,6 @@ sub merge_past ($$$) {
|
|||
return $conflict;
|
||||
}
|
||||
|
||||
{
|
||||
my $prefix;
|
||||
sub decode_git_file ($) {
|
||||
my $file=shift;
|
||||
|
||||
|
@ -325,7 +333,6 @@ sub decode_git_file ($) {
|
|||
|
||||
return decode("utf8", $file);
|
||||
}
|
||||
}
|
||||
|
||||
sub parse_diff_tree ($) {
|
||||
# Parse the raw diff tree chunk and return the info hash.
|
||||
|
@ -845,9 +852,9 @@ sub rcs_receive () {
|
|||
# (Also, if a subdir is involved, we don't want to chdir to
|
||||
# it and only see changes in it.)
|
||||
# The pre-receive hook already puts us in the right place.
|
||||
$git_dir=".";
|
||||
push @rets, git_parse_changes(0, git_commit_info($oldrev."..".$newrev));
|
||||
$git_dir=undef;
|
||||
in_git_dir(".", sub {
|
||||
push @rets, git_parse_changes(0, git_commit_info($oldrev."..".$newrev));
|
||||
});
|
||||
}
|
||||
|
||||
return reverse @rets;
|
||||
|
@ -860,23 +867,21 @@ sub rcs_preprevert ($) {
|
|||
# Examine changes from root of git repo, not from any subdir,
|
||||
# in order to see all changes.
|
||||
my ($subdir, $rootdir) = git_find_root();
|
||||
$git_dir=$rootdir;
|
||||
in_git_dir($rootdir, sub {
|
||||
my @commits=git_commit_info($sha1, 1);
|
||||
|
||||
if (! @commits) {
|
||||
error "unknown commit"; # just in case
|
||||
}
|
||||
|
||||
my @commits=git_commit_info($sha1, 1);
|
||||
if (! @commits) {
|
||||
error "unknown commit"; # just in case
|
||||
}
|
||||
# git revert will fail on merge commits. Add a nice message.
|
||||
if (exists $commits[0]->{parents} &&
|
||||
@{$commits[0]->{parents}} > 1) {
|
||||
error gettext("you are not allowed to revert a merge");
|
||||
}
|
||||
|
||||
# git revert will fail on merge commits. Add a nice message.
|
||||
if (exists $commits[0]->{parents} &&
|
||||
@{$commits[0]->{parents}} > 1) {
|
||||
error gettext("you are not allowed to revert a merge");
|
||||
}
|
||||
|
||||
my @ret=git_parse_changes(1, @commits);
|
||||
|
||||
$git_dir=undef;
|
||||
return @ret;
|
||||
git_parse_changes(1, @commits);
|
||||
});
|
||||
}
|
||||
|
||||
sub rcs_revert ($) {
|
||||
|
|
Loading…
Reference in New Issue