Only worktrees need to use `git rev-parse --git-path', so avoid
the spawn overhead of a new process. With the SolverGit.pm
limit on coderepo scans disabled and scanning over 800 git repos
for git@vger matches, this reduces up xt/solver.t times by
roughly 25%.
sub git_path ($$) {
my ($self, $path) = @_;
$self->{-git_path}->{$path} //= do {
- local $/ = "\n";
- chomp(my $str = $self->qx(qw(rev-parse --git-path), $path));
-
- # git prior to 2.5.0 did not understand --git-path
- if ($str eq "--git-path\n$path") {
- $str = "$self->{git_dir}/$path";
+ my $d = "$self->{git_dir}/$path";
+ if (-e $d) {
+ $d;
+ } else {
+ local $/ = "\n";
+ my $s = $self->qx(qw(rev-parse --git-path), $path);
+ chomp $s;
+
+ # git prior to 2.5.0 did not understand --git-path
+ $s eq "--git-path\n$path" ? $d : $s;
}
- $str;
};
}