зеркало из https://github.com/microsoft/git.git
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:
Родитель
157e43b4b0
Коммит
470b96d483
|
@ -749,6 +749,58 @@ sub git_get_references {
|
|||
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
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче