From 74c80bebcf71c512cd3ab06e72a4ec9fbf1c51e5 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 17 May 2011 22:37:46 -0400 Subject: [PATCH] sort repos before subdirectories --- index.cgi | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/index.cgi b/index.cgi index a2c662e..b64979f 100755 --- a/index.cgi +++ b/index.cgi @@ -4404,13 +4404,29 @@ sub git_project_list_body { $to = $#projects if (!defined $to || $#projects < $to); my %order_info = ( - project => { key => 'path', type => 'str' }, + project => { key => 'path', type => 'file' }, descr => { key => 'descr_long', type => 'str' }, owner => { key => 'owner', type => 'str' }, age => { key => 'age', type => 'num' } ); my $oi = $order_info{$order}; - if ($oi->{'type'} eq 'str') { + if ($oi->{'type'} eq 'file') { + sub cmp_pnames + { + my @a_p = split(/\//, $a->{$oi->{'key'}}); + my @b_p = split(/\//, $b->{$oi->{'key'}}); + for (my $i = 0; ; $i++) + { + return 0 if ($i > $#a_p && $i > $#b_p); + my $c = lc($a_p[$i]) cmp lc($b_p[$i]); + return $c if ($i == $#a_p && $i == $#b_p); + return -1 if ($i >= $#a_p); + return 1 if ($i >= $#b_p); + return $c if ($c != 0); + } + } + @projects = sort cmp_pnames @projects; + } elsif ($oi->{'type'} eq 'str') { @projects = sort {lc($a->{$oi->{'key'}}) cmp lc($b->{$oi->{'key'}})} @projects; } else { @projects = sort {$a->{$oi->{'key'}} <=> $b->{$oi->{'key'}}} @projects;