diff options
author | Jakub Narebski <jnareb@gmail.com> | 2006-07-29 22:55:01 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-07-30 18:30:10 -0700 |
commit | dda754f7d4fa1bccd9f3349d73304856144a7cd2 (patch) | |
tree | def2868e263738555c7c8061bf0ecb72d3c1e79b /gitweb/gitweb.cgi | |
parent | gitweb: Use list for of open for running git commands, thorougly. (diff) | |
download | tgif-dda754f7d4fa1bccd9f3349d73304856144a7cd2.tar.xz |
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>
Diffstat (limited to 'gitweb/gitweb.cgi')
-rwxr-xr-x | gitweb/gitweb.cgi | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/gitweb/gitweb.cgi b/gitweb/gitweb.cgi index 8f7341f458..9c214f534b 100755 --- a/gitweb/gitweb.cgi +++ b/gitweb/gitweb.cgi @@ -1525,29 +1525,15 @@ sub git_get_hash_by_path { my $path = shift || return undef; my $tree = $base; - my @parts = split '/', $path; - while (my $part = shift @parts) { - open my $fd, "-|", $GIT, "ls-tree", $tree or die_error(undef, "Open git-ls-tree failed."); - my (@entries) = map { chomp; $_ } <$fd>; - close $fd or return undef; - foreach my $line (@entries) { - #'100644 blob 0fa3f3a66fb6a137f6ec2c19351ed4d807070ffa panic.c' - $line =~ m/^([0-9]+) (.+) ([0-9a-fA-F]{40})\t(.+)$/; - my $t_mode = $1; - 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; - } - } - } + + open my $fd, "-|", $GIT, "ls-tree", $base, "--", $path + or die_error(undef, "Open git-ls-tree failed."); + my $line = <$fd>; + close $fd or return undef; + + #'100644 blob 0fa3f3a66fb6a137f6ec2c19351ed4d807070ffa panic.c' + $line =~ m/^([0-9]+) (.+) ([0-9a-fA-F]{40})\t(.+)$/; + return $3; } sub mimetype_guess_file { |