Merge branch 'md/gitweb-sort-by-age' into maint

* md/gitweb-sort-by-age:
  gitweb: Sort projects with undefined ages last
This commit is contained in:
Junio C Hamano 2013-01-10 14:04:21 -08:00
Родитель c12a978a35 28dae1812b
Коммит 2601298f43
1 изменённых файлов: 21 добавлений и 14 удалений

Просмотреть файл

@ -5528,23 +5528,30 @@ sub fill_project_list_info {
sub sort_projects_list {
my ($projlist, $order) = @_;
my @projects;
my %order_info = (
project => { key => 'path', type => 'str' },
descr => { key => 'descr_long', type => 'str' },
owner => { key => 'owner', type => 'str' },
age => { key => 'age', type => 'num' }
);
my $oi = $order_info{$order};
return @$projlist unless defined $oi;
if ($oi->{'type'} eq 'str') {
@projects = sort {$a->{$oi->{'key'}} cmp $b->{$oi->{'key'}}} @$projlist;
} else {
@projects = sort {$a->{$oi->{'key'}} <=> $b->{$oi->{'key'}}} @$projlist;
sub order_str {
my $key = shift;
return sub { $a->{$key} cmp $b->{$key} };
}
return @projects;
sub order_num_then_undef {
my $key = shift;
return sub {
defined $a->{$key} ?
(defined $b->{$key} ? $a->{$key} <=> $b->{$key} : -1) :
(defined $b->{$key} ? 1 : 0)
};
}
my %orderings = (
project => order_str('path'),
descr => order_str('descr_long'),
owner => order_str('owner'),
age => order_num_then_undef('age'),
);
my $ordering = $orderings{$order};
return defined $ordering ? sort $ordering @$projlist : @$projlist;
}
# returns a hash of categories, containing the list of project