gitweb: Add git_get_{following,preceding}_references functions
Adds git_get_following_references function, based on code which was used in git_commitdiff_plain to generate X-Git-Tag: header, and companion git_get_preceding_references function. Both functions return array of all references of given type (as returned by git_get_references) following/preceding given commit in array (list) context, and last following/first preceding ref in scalar context. Stripping ref (list of refs) of "$type/" (e.g. "tags/") is left to caller. Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
157e43b4b0
commit
470b96d483
@ -749,6 +749,58 @@ sub git_get_references {
|
|||||||
return \%refs;
|
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;
|
||||||
|
my $firstref;
|
||||||
|
|
||||||
|
foreach my $commit (@commits) {
|
||||||
|
foreach my $ref (@{$refs->{$commit}}) {
|
||||||
|
$firstref = $ref unless $firstref;
|
||||||
|
push @reflist, $ref;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wantarray ? @reflist : $firstref;
|
||||||
|
}
|
||||||
|
|
||||||
## ----------------------------------------------------------------------
|
## ----------------------------------------------------------------------
|
||||||
## parse to hash functions
|
## parse to hash functions
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user