summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.h1
-rw-r--r--shared.c3
-rw-r--r--ui-summary.c31
3 files changed, 32 insertions, 3 deletions
diff --git a/cgit.h b/cgit.h
index 53e1336..bb0e64c 100644
--- a/cgit.h
+++ b/cgit.h
@@ -139,16 +139,17 @@ extern int cgit_enable_log_linecount;
139extern int cgit_max_lock_attempts; 139extern int cgit_max_lock_attempts;
140extern int cgit_cache_root_ttl; 140extern int cgit_cache_root_ttl;
141extern int cgit_cache_repo_ttl; 141extern int cgit_cache_repo_ttl;
142extern int cgit_cache_dynamic_ttl; 142extern int cgit_cache_dynamic_ttl;
143extern int cgit_cache_static_ttl; 143extern int cgit_cache_static_ttl;
144extern int cgit_cache_max_create_time; 144extern int cgit_cache_max_create_time;
145extern int cgit_summary_log; 145extern int cgit_summary_log;
146extern int cgit_summary_tags; 146extern int cgit_summary_tags;
147extern int cgit_summary_branches;
147 148
148extern int cgit_max_msg_len; 149extern int cgit_max_msg_len;
149extern int cgit_max_repodesc_len; 150extern int cgit_max_repodesc_len;
150extern int cgit_max_commit_count; 151extern int cgit_max_commit_count;
151 152
152extern int cgit_query_has_symref; 153extern int cgit_query_has_symref;
153extern int cgit_query_has_sha1; 154extern int cgit_query_has_sha1;
154 155
diff --git a/shared.c b/shared.c
index 7e5eaba..ff600db 100644
--- a/shared.c
+++ b/shared.c
@@ -34,16 +34,17 @@ int cgit_enable_log_linecount = 0;
34int cgit_max_lock_attempts = 5; 34int cgit_max_lock_attempts = 5;
35int cgit_cache_root_ttl = 5; 35int cgit_cache_root_ttl = 5;
36int cgit_cache_repo_ttl = 5; 36int cgit_cache_repo_ttl = 5;
37int cgit_cache_dynamic_ttl = 5; 37int cgit_cache_dynamic_ttl = 5;
38int cgit_cache_static_ttl = -1; 38int cgit_cache_static_ttl = -1;
39int cgit_cache_max_create_time = 5; 39int cgit_cache_max_create_time = 5;
40int cgit_summary_log = 0; 40int cgit_summary_log = 0;
41int cgit_summary_tags = 0; 41int cgit_summary_tags = 0;
42int cgit_summary_branches = 0;
42int cgit_renamelimit = -1; 43int cgit_renamelimit = -1;
43 44
44int cgit_max_msg_len = 60; 45int cgit_max_msg_len = 60;
45int cgit_max_repodesc_len = 60; 46int cgit_max_repodesc_len = 60;
46int cgit_max_commit_count = 50; 47int cgit_max_commit_count = 50;
47 48
48int cgit_query_has_symref = 0; 49int cgit_query_has_symref = 0;
49int cgit_query_has_sha1 = 0; 50int cgit_query_has_sha1 = 0;
@@ -177,16 +178,18 @@ void cgit_global_config_cb(const char *name, const char *value)
177 else if (!strcmp(name, "max-message-length")) 178 else if (!strcmp(name, "max-message-length"))
178 cgit_max_msg_len = atoi(value); 179 cgit_max_msg_len = atoi(value);
179 else if (!strcmp(name, "max-repodesc-length")) 180 else if (!strcmp(name, "max-repodesc-length"))
180 cgit_max_repodesc_len = atoi(value); 181 cgit_max_repodesc_len = atoi(value);
181 else if (!strcmp(name, "max-commit-count")) 182 else if (!strcmp(name, "max-commit-count"))
182 cgit_max_commit_count = atoi(value); 183 cgit_max_commit_count = atoi(value);
183 else if (!strcmp(name, "summary-log")) 184 else if (!strcmp(name, "summary-log"))
184 cgit_summary_log = atoi(value); 185 cgit_summary_log = atoi(value);
186 else if (!strcmp(name, "summary-branches"))
187 cgit_summary_branches = atoi(value);
185 else if (!strcmp(name, "summary-tags")) 188 else if (!strcmp(name, "summary-tags"))
186 cgit_summary_tags = atoi(value); 189 cgit_summary_tags = atoi(value);
187 else if (!strcmp(name, "agefile")) 190 else if (!strcmp(name, "agefile"))
188 cgit_agefile = xstrdup(value); 191 cgit_agefile = xstrdup(value);
189 else if (!strcmp(name, "renamelimit")) 192 else if (!strcmp(name, "renamelimit"))
190 cgit_renamelimit = atoi(value); 193 cgit_renamelimit = atoi(value);
191 else if (!strcmp(name, "repo.group")) 194 else if (!strcmp(name, "repo.group"))
192 cgit_repo_group = xstrdup(value); 195 cgit_repo_group = xstrdup(value);
diff --git a/ui-summary.c b/ui-summary.c
index 05170cc..df79d01 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -19,16 +19,32 @@ static int cmp_age(int age1, int age2)
19 return 0; 19 return 0;
20 20
21 if (age1 == 0) 21 if (age1 == 0)
22 return +1; 22 return +1;
23 23
24 return -1; 24 return -1;
25} 25}
26 26
27static int cmp_ref_name(const void *a, const void *b)
28{
29 struct refinfo *r1 = *(struct refinfo **)a;
30 struct refinfo *r2 = *(struct refinfo **)b;
31
32 return strcmp(r1->refname, r2->refname);
33}
34
35static int cmp_branch_age(const void *a, const void *b)
36{
37 struct refinfo *r1 = *(struct refinfo **)a;
38 struct refinfo *r2 = *(struct refinfo **)b;
39
40 return cmp_age(r1->commit->committer_date, r2->commit->committer_date);
41}
42
27static int cmp_tag_age(const void *a, const void *b) 43static int cmp_tag_age(const void *a, const void *b)
28{ 44{
29 struct refinfo *r1 = *(struct refinfo **)a; 45 struct refinfo *r1 = *(struct refinfo **)a;
30 struct refinfo *r2 = *(struct refinfo **)b; 46 struct refinfo *r2 = *(struct refinfo **)b;
31 47
32 return cmp_age(r1->tag->tagger_date, r2->tag->tagger_date); 48 return cmp_age(r1->tag->tagger_date, r2->tag->tagger_date);
33} 49}
34 50
@@ -145,30 +161,39 @@ static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1,
145 buf)); 161 buf));
146 html_link_open(url, NULL, NULL); 162 html_link_open(url, NULL, NULL);
147 html_txt(buf); 163 html_txt(buf);
148 html_link_close(); 164 html_link_close();
149 html("</td></tr>"); 165 html("</td></tr>");
150 return 0; 166 return 0;
151} 167}
152 168
153static void cgit_print_branches() 169static void cgit_print_branches(int maxcount)
154{ 170{
155 struct reflist list; 171 struct reflist list;
156 int i; 172 int i;
157 173
158 html("<tr class='nohover'><th class='left'>Branch</th>" 174 html("<tr class='nohover'><th class='left'>Branch</th>"
159 "<th class='left'>Idle</th>" 175 "<th class='left'>Idle</th>"
160 "<th class='left'>Author</th>" 176 "<th class='left'>Author</th>"
161 "<th class='left'>Head commit</th></tr>\n"); 177 "<th class='left'>Head commit</th></tr>\n");
162 178
163 list.refs = NULL; 179 list.refs = NULL;
164 list.alloc = list.count = 0; 180 list.alloc = list.count = 0;
165 for_each_branch_ref(cgit_refs_cb, &list); 181 for_each_branch_ref(cgit_refs_cb, &list);
166 for(i=0; i<list.count; i++) 182
183 if (maxcount == 0 || maxcount > list.count)
184 maxcount = list.count;
185
186 if (maxcount < list.count) {
187 qsort(list.refs, list.count, sizeof(*list.refs), cmp_branch_age);
188 qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name);
189 }
190
191 for(i=0; i<maxcount; i++)
167 cgit_print_branch(list.refs[i]); 192 cgit_print_branch(list.refs[i]);
168} 193}
169 194
170static void cgit_print_tags(int maxcount) 195static void cgit_print_tags(int maxcount)
171{ 196{
172 struct reflist list; 197 struct reflist list;
173 int i; 198 int i;
174 199
@@ -208,13 +233,13 @@ void cgit_print_summary()
208 if (cgit_repo->readme) 233 if (cgit_repo->readme)
209 html_include(cgit_repo->readme); 234 html_include(cgit_repo->readme);
210 html("</div>"); 235 html("</div>");
211 if (cgit_summary_log > 0) 236 if (cgit_summary_log > 0)
212 cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, NULL, 0); 237 cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, NULL, 0);
213 html("<table class='list nowrap'>"); 238 html("<table class='list nowrap'>");
214 if (cgit_summary_log > 0) 239 if (cgit_summary_log > 0)
215 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>"); 240 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
216 cgit_print_branches(); 241 cgit_print_branches(cgit_summary_branches);
217 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>"); 242 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
218 cgit_print_tags(cgit_summary_tags); 243 cgit_print_tags(cgit_summary_tags);
219 html("</table>"); 244 html("</table>");
220} 245}