gitweb: simplify git_get_hash_by_path
Simplify git_get_hash_by_path by using git-ls-tree to do path limiting, instead of finding correct ttree and parsing unconstrained git-ls-tree output. Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
b9182987a8
commit
dda754f7d4
@ -1525,29 +1525,15 @@ sub git_get_hash_by_path {
|
|||||||
my $path = shift || return undef;
|
my $path = shift || return undef;
|
||||||
|
|
||||||
my $tree = $base;
|
my $tree = $base;
|
||||||
my @parts = split '/', $path;
|
|
||||||
while (my $part = shift @parts) {
|
open my $fd, "-|", $GIT, "ls-tree", $base, "--", $path
|
||||||
open my $fd, "-|", $GIT, "ls-tree", $tree or die_error(undef, "Open git-ls-tree failed.");
|
or die_error(undef, "Open git-ls-tree failed.");
|
||||||
my (@entries) = map { chomp; $_ } <$fd>;
|
my $line = <$fd>;
|
||||||
close $fd or return undef;
|
close $fd or return undef;
|
||||||
foreach my $line (@entries) {
|
|
||||||
#'100644 blob 0fa3f3a66fb6a137f6ec2c19351ed4d807070ffa panic.c'
|
#'100644 blob 0fa3f3a66fb6a137f6ec2c19351ed4d807070ffa panic.c'
|
||||||
$line =~ m/^([0-9]+) (.+) ([0-9a-fA-F]{40})\t(.+)$/;
|
$line =~ m/^([0-9]+) (.+) ([0-9a-fA-F]{40})\t(.+)$/;
|
||||||
my $t_mode = $1;
|
return $3;
|
||||||
my $t_type = $2;
|
|
||||||
my $t_hash = $3;
|
|
||||||
my $t_name = validate_input(unquote($4));
|
|
||||||
if ($t_name eq $part) {
|
|
||||||
if (!(@parts)) {
|
|
||||||
return $t_hash;
|
|
||||||
}
|
|
||||||
if ($t_type eq "tree") {
|
|
||||||
$tree = $t_hash;
|
|
||||||
}
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub mimetype_guess_file {
|
sub mimetype_guess_file {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user