return $3;
}
-# converts symbolic name to hash
-sub git_to_hash {
- my @params = @_;
- return undef unless @params;
-
- open my $fd, "-|", $GIT, "rev-parse", @params
- or return undef;
- my @hashes = map { chomp; $_ } <$fd>;
- close $fd;
-
- if (wantarray) {
- return @hashes;
- } elsif (scalar(@hashes) == 1) {
- # single hash
- return $hashes[0];
- } else {
- return \@hashes;
- }
-}
-
## ......................................................................
## git utility functions, directly accessing git repository
return \%refs;
}
-sub git_get_following_references {
- my $hash = shift || return undef;
- my $type = shift;
- my $base = shift || $hash_base || "HEAD";
-
- my $refs = git_get_references($type);
- open my $fd, "-|", $GIT, "rev-list", $base
- or return undef;
- my @commits = map { chomp; $_ } <$fd>;
- close $fd
- or return undef;
-
- my @reflist;
- my $lastref;
-
- foreach my $commit (@commits) {
- foreach my $ref (@{$refs->{$commit}}) {
- $lastref = $ref;
- push @reflist, $lastref;
- }
- if ($commit eq $hash) {
- last;
- }
- }
-
- return wantarray ? @reflist : $lastref;
-}
-
-sub git_get_preceding_references {
- my $hash = shift || return undef;
- my $type = shift;
-
- my $refs = git_get_references($type);
- open my $fd, "-|", $GIT, "rev-list", $hash
- or return undef;
- my @commits = map { chomp; $_ } <$fd>;
- close $fd
- or return undef;
-
- my @reflist;
-
- foreach my $commit (@commits) {
- foreach my $ref (@{$refs->{$commit}}) {
- return $ref unless wantarray;
- push @reflist, $ref;
- }
- }
-
- return @reflist;
-}
-
sub git_get_rev_name_tags {
my $hash = shift || return undef;
print "<div class=\"patchset\">\n";
LINE:
- while (my $patch_line @$fd>) {
+ while (my $patch_line = <$fd>) {
chomp $patch_line;
if ($patch_line =~ m/^diff /) { # "git diff" header
if ($hash !~ /[0-9a-fA-F]{40}/) {
$hash = git_to_hash($hash);
}
+ } elsif (defined $hash &&
+ $hash =~ /[0-9a-fA-F]{40}/) {
+ # try to find filename from $hash
# read filtered raw output
open $fd, "-|", $GIT, "diff-tree", '-r', '-M', '-C', $hash_parent_base, $hash_base