gitweb: Separate ref parsing in git_get_refs_list into parse_ref
Note that for each ref there are usually two calls to git subroutines: first to get the type of ref, second to parse ref if ref is of commit or tag type. Signed-off-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
847e01fb00
commit
a446d6bb53
@ -690,6 +690,49 @@ sub parse_commit {
|
|||||||
return %co;
|
return %co;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# parse ref from ref_file, given by ref_id, with given type
|
||||||
|
sub parse_ref {
|
||||||
|
my $ref_file = shift;
|
||||||
|
my $ref_id = shift;
|
||||||
|
my $type = shift || git_get_type($ref_id);
|
||||||
|
my %ref_item;
|
||||||
|
|
||||||
|
$ref_item{'type'} = $type;
|
||||||
|
$ref_item{'id'} = $ref_id;
|
||||||
|
$ref_item{'epoch'} = 0;
|
||||||
|
$ref_item{'age'} = "unknown";
|
||||||
|
if ($type eq "tag") {
|
||||||
|
my %tag = parse_tag($ref_id);
|
||||||
|
$ref_item{'comment'} = $tag{'comment'};
|
||||||
|
if ($tag{'type'} eq "commit") {
|
||||||
|
my %co = parse_commit($tag{'object'});
|
||||||
|
$ref_item{'epoch'} = $co{'committer_epoch'};
|
||||||
|
$ref_item{'age'} = $co{'age_string'};
|
||||||
|
} elsif (defined($tag{'epoch'})) {
|
||||||
|
my $age = time - $tag{'epoch'};
|
||||||
|
$ref_item{'epoch'} = $tag{'epoch'};
|
||||||
|
$ref_item{'age'} = age_string($age);
|
||||||
|
}
|
||||||
|
$ref_item{'reftype'} = $tag{'type'};
|
||||||
|
$ref_item{'name'} = $tag{'name'};
|
||||||
|
$ref_item{'refid'} = $tag{'object'};
|
||||||
|
} elsif ($type eq "commit"){
|
||||||
|
my %co = parse_commit($ref_id);
|
||||||
|
$ref_item{'reftype'} = "commit";
|
||||||
|
$ref_item{'name'} = $ref_file;
|
||||||
|
$ref_item{'title'} = $co{'title'};
|
||||||
|
$ref_item{'refid'} = $ref_id;
|
||||||
|
$ref_item{'epoch'} = $co{'committer_epoch'};
|
||||||
|
$ref_item{'age'} = $co{'age_string'};
|
||||||
|
} else {
|
||||||
|
$ref_item{'reftype'} = $type;
|
||||||
|
$ref_item{'name'} = $ref_file;
|
||||||
|
$ref_item{'refid'} = $ref_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
return %ref_item;
|
||||||
|
}
|
||||||
|
|
||||||
## ......................................................................
|
## ......................................................................
|
||||||
## parse to array of hashes functions
|
## parse to array of hashes functions
|
||||||
|
|
||||||
@ -709,44 +752,11 @@ sub git_get_refs_list {
|
|||||||
foreach my $ref_file (@refs) {
|
foreach my $ref_file (@refs) {
|
||||||
my $ref_id = git_get_hash_by_ref("$project/$ref_dir/$ref_file");
|
my $ref_id = git_get_hash_by_ref("$project/$ref_dir/$ref_file");
|
||||||
my $type = git_get_type($ref_id) || next;
|
my $type = git_get_type($ref_id) || next;
|
||||||
my %ref_item;
|
my %ref_item = parse_ref($ref_file, $ref_id, $type);
|
||||||
my %co;
|
|
||||||
$ref_item{'type'} = $type;
|
|
||||||
$ref_item{'id'} = $ref_id;
|
|
||||||
$ref_item{'epoch'} = 0;
|
|
||||||
$ref_item{'age'} = "unknown";
|
|
||||||
if ($type eq "tag") {
|
|
||||||
my %tag = parse_tag($ref_id);
|
|
||||||
$ref_item{'comment'} = $tag{'comment'};
|
|
||||||
if ($tag{'type'} eq "commit") {
|
|
||||||
%co = parse_commit($tag{'object'});
|
|
||||||
$ref_item{'epoch'} = $co{'committer_epoch'};
|
|
||||||
$ref_item{'age'} = $co{'age_string'};
|
|
||||||
} elsif (defined($tag{'epoch'})) {
|
|
||||||
my $age = time - $tag{'epoch'};
|
|
||||||
$ref_item{'epoch'} = $tag{'epoch'};
|
|
||||||
$ref_item{'age'} = age_string($age);
|
|
||||||
}
|
|
||||||
$ref_item{'reftype'} = $tag{'type'};
|
|
||||||
$ref_item{'name'} = $tag{'name'};
|
|
||||||
$ref_item{'refid'} = $tag{'object'};
|
|
||||||
} elsif ($type eq "commit"){
|
|
||||||
%co = parse_commit($ref_id);
|
|
||||||
$ref_item{'reftype'} = "commit";
|
|
||||||
$ref_item{'name'} = $ref_file;
|
|
||||||
$ref_item{'title'} = $co{'title'};
|
|
||||||
$ref_item{'refid'} = $ref_id;
|
|
||||||
$ref_item{'epoch'} = $co{'committer_epoch'};
|
|
||||||
$ref_item{'age'} = $co{'age_string'};
|
|
||||||
} else {
|
|
||||||
$ref_item{'reftype'} = $type;
|
|
||||||
$ref_item{'name'} = $ref_file;
|
|
||||||
$ref_item{'refid'} = $ref_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
push @reflist, \%ref_item;
|
push @reflist, \%ref_item;
|
||||||
}
|
}
|
||||||
# sort tags by age
|
# sort refs by age
|
||||||
@reflist = sort {$b->{'epoch'} <=> $a->{'epoch'}} @reflist;
|
@reflist = sort {$b->{'epoch'} <=> $a->{'epoch'}} @reflist;
|
||||||
return \@reflist;
|
return \@reflist;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user