summaryrefslogtreecommitdiff
path: root/ui-summary.c
diff options
context:
space:
mode:
authorLars Hjemli <hjemli@gmail.com>2007-10-27 08:13:42 +0000
committerLars Hjemli <hjemli@gmail.com>2007-10-27 08:53:27 +0000
commit763a6a09deec7290365a0072d25630daa7b417e2 (patch)
treed882b72c05ef2b798883e637cba3f53ece12d78c /ui-summary.c
parentf6310fec783d2721ef61815a0eec525d6a904452 (diff)
downloadcgit-763a6a09deec7290365a0072d25630daa7b417e2.tar
cgit-763a6a09deec7290365a0072d25630daa7b417e2.tar.gz
cgit-763a6a09deec7290365a0072d25630daa7b417e2.zip
Add support for config param summary-branches
This parameter can be used to specify max number of branches to show on the summary page (if not all branches will be displayed, the "most idle" branches are the ones to be pruned). The default value for this parameter is 0, which disables the pruning. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'ui-summary.c')
-rw-r--r--ui-summary.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/ui-summary.c b/ui-summary.c
index 05170cc..df79d01 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -24,6 +24,22 @@ static int cmp_age(int age1, int age2)
return -1;
}
+static int cmp_ref_name(const void *a, const void *b)
+{
+ struct refinfo *r1 = *(struct refinfo **)a;
+ struct refinfo *r2 = *(struct refinfo **)b;
+
+ return strcmp(r1->refname, r2->refname);
+}
+
+static int cmp_branch_age(const void *a, const void *b)
+{
+ struct refinfo *r1 = *(struct refinfo **)a;
+ struct refinfo *r2 = *(struct refinfo **)b;
+
+ return cmp_age(r1->commit->committer_date, r2->commit->committer_date);
+}
+
static int cmp_tag_age(const void *a, const void *b)
{
struct refinfo *r1 = *(struct refinfo **)a;
@@ -150,7 +166,7 @@ static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1,
return 0;
}
-static void cgit_print_branches()
+static void cgit_print_branches(int maxcount)
{
struct reflist list;
int i;
@@ -163,7 +179,16 @@ static void cgit_print_branches()
list.refs = NULL;
list.alloc = list.count = 0;
for_each_branch_ref(cgit_refs_cb, &list);
- for(i=0; i<list.count; i++)
+
+ if (maxcount == 0 || maxcount > list.count)
+ maxcount = list.count;
+
+ if (maxcount < list.count) {
+ qsort(list.refs, list.count, sizeof(*list.refs), cmp_branch_age);
+ qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name);
+ }
+
+ for(i=0; i<maxcount; i++)
cgit_print_branch(list.refs[i]);
}
@@ -213,7 +238,7 @@ void cgit_print_summary()
html("<table class='list nowrap'>");
if (cgit_summary_log > 0)
html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
- cgit_print_branches();
+ cgit_print_branches(cgit_summary_branches);
html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
cgit_print_tags(cgit_summary_tags);
html("</table>");