@@ -5528,23 +5528,30 @@ sub fill_project_list_info {
5528
5528
5529
5529
sub sort_projects_list {
5530
5530
my ($projlist , $order ) = @_ ;
5531
- my @projects ;
5532
5531
5533
- my %order_info = (
5534
- project => { key => ' path' , type => ' str' },
5535
- descr => { key => ' descr_long' , type => ' str' },
5536
- owner => { key => ' owner' , type => ' str' },
5537
- age => { key => ' age' , type => ' num' }
5538
- );
5539
- my $oi = $order_info {$order };
5540
- return @$projlist unless defined $oi ;
5541
- if ($oi -> {' type' } eq ' str' ) {
5542
- @projects = sort {$a -> {$oi -> {' key' }} cmp $b -> {$oi -> {' key' }}} @$projlist ;
5543
- } else {
5544
- @projects = sort {$a -> {$oi -> {' key' }} <=> $b -> {$oi -> {' key' }}} @$projlist ;
5532
+ sub order_str {
5533
+ my $key = shift ;
5534
+ return sub { $a -> {$key } cmp $b -> {$key } };
5545
5535
}
5546
5536
5547
- return @projects ;
5537
+ sub order_num_then_undef {
5538
+ my $key = shift ;
5539
+ return sub {
5540
+ defined $a -> {$key } ?
5541
+ (defined $b -> {$key } ? $a -> {$key } <=> $b -> {$key } : -1) :
5542
+ (defined $b -> {$key } ? 1 : 0)
5543
+ };
5544
+ }
5545
+
5546
+ my %orderings = (
5547
+ project => order_str(' path' ),
5548
+ descr => order_str(' descr_long' ),
5549
+ owner => order_str(' owner' ),
5550
+ age => order_num_then_undef(' age' ),
5551
+ );
5552
+
5553
+ my $ordering = $orderings {$order };
5554
+ return defined $ordering ? sort $ordering @$projlist : @$projlist ;
5548
5555
}
5549
5556
5550
5557
# returns a hash of categories, containing the list of project
0 commit comments