Matthew Daley <mattjd@xxxxxxxxx> writes: > I thought about both of those variants as well. What about this: > > -- >8 -- > Subject: [PATCH] gitweb: Sort projects with undefined ages last > > Sorting gitweb's project list by age ('Last Change') currently shows > projects with undefined ages at the head of the list. This gives a less > useful result when there are a number of projects that are missing or > otherwise faulty and one is trying to see what projects have been > updated recently. > > Fix by sorting these projects with undefined ages at the bottom of the > list when sorting by age. > > Signed-off-by: Matthew Daley <mattjd@xxxxxxxxx> > --- Looks sensible to me. Thanks; will queue. > gitweb/gitweb.perl | 35 +++++++++++++++++++++-------------- > 1 file changed, 21 insertions(+), 14 deletions(-) > > diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl > index 0f207f2..656b324 100755 > --- a/gitweb/gitweb.perl > +++ b/gitweb/gitweb.perl > @@ -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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html