aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Jason A. Donenfeld <Jason@zx2c4.com>2013-04-08 23:57:12 (JST)
committerGravatar Jason A. Donenfeld <Jason@zx2c4.com>2013-04-10 21:48:26 (JST)
commit389cc17357e2040c9542d3e085f64a8d2f085e9a (patch)
tree0696cd47fead7576cf03f06eec067b3e5b2c365a
parent880223dc845e8b502e753425b889cbb70b73478e (diff)
downloadcgit-389cc17357e2040c9542d3e085f64a8d2f085e9a.zip
cgit-389cc17357e2040c9542d3e085f64a8d2f085e9a.tar.gz
Add branch-sort and repo.branch-sort options.
When set to "name", branches are sorted by name, which is the current default. When set to "age", branches are sorted by the age of the repository. This feature was requested by Konstantin Ryabitsev for use on kernel.org. Proposed-by: Konstantin Ryabitsev <mricon@kernel.org>
-rw-r--r--cgit.c14
-rw-r--r--cgit.h2
-rw-r--r--cgitrc.5.txt46
-rw-r--r--shared.c1
-rw-r--r--ui-refs.c5
5 files changed, 46 insertions, 22 deletions
diff --git a/cgit.c b/cgit.c
index 4dadd97..6f44ef2 100644
--- a/cgit.c
+++ b/cgit.c
@@ -84,7 +84,12 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va
84 repo->enable_remote_branches = atoi(value); 84 repo->enable_remote_branches = atoi(value);
85 else if (!strcmp(name, "enable-subject-links")) 85 else if (!strcmp(name, "enable-subject-links"))
86 repo->enable_subject_links = atoi(value); 86 repo->enable_subject_links = atoi(value);
87 else if (!strcmp(name, "commit-sort")) { 87 else if (!strcmp(name, "branch-sort")) {
88 if (!strcmp(value, "age"))
89 repo->branch_sort = 1;
90 if (!strcmp(value, "name"))
91 repo->branch_sort = 0;
92 } else if (!strcmp(name, "commit-sort")) {
88 if (!strcmp(value, "date")) 93 if (!strcmp(value, "date"))
89 repo->commit_sort = 1; 94 repo->commit_sort = 1;
90 if (!strcmp(value, "topo")) 95 if (!strcmp(value, "topo"))
@@ -271,6 +276,11 @@ static void config_cb(const char *name, const char *value)
271 ctx.cfg.commit_sort = 1; 276 ctx.cfg.commit_sort = 1;
272 if (!strcmp(value, "topo")) 277 if (!strcmp(value, "topo"))
273 ctx.cfg.commit_sort = 2; 278 ctx.cfg.commit_sort = 2;
279 } else if (!strcmp(name, "branch-sort")) {
280 if (!strcmp(value, "age"))
281 ctx.cfg.branch_sort = 1;
282 if (!strcmp(value, "name"))
283 ctx.cfg.branch_sort = 0;
274 } else if (!prefixcmp(name, "mimetype.")) 284 } else if (!prefixcmp(name, "mimetype."))
275 add_mimetype(name + 9, value); 285 add_mimetype(name + 9, value);
276 else if (!strcmp(name, "include")) 286 else if (!strcmp(name, "include"))
@@ -345,6 +355,8 @@ static void prepare_context(struct cgit_context *ctx)
345 ctx->cfg.cache_scanrc_ttl = 15; 355 ctx->cfg.cache_scanrc_ttl = 15;
346 ctx->cfg.cache_static_ttl = -1; 356 ctx->cfg.cache_static_ttl = -1;
347 ctx->cfg.case_sensitive_sort = 1; 357 ctx->cfg.case_sensitive_sort = 1;
358 ctx->cfg.branch_sort = 0;
359 ctx->cfg.commit_sort = 0;
348 ctx->cfg.css = "/cgit.css"; 360 ctx->cfg.css = "/cgit.css";
349 ctx->cfg.logo = "/cgit.png"; 361 ctx->cfg.logo = "/cgit.png";
350 ctx->cfg.local_time = 0; 362 ctx->cfg.local_time = 0;
diff --git a/cgit.h b/cgit.h
index 3e9d55b..850b792 100644
--- a/cgit.h
+++ b/cgit.h
@@ -85,6 +85,7 @@ struct cgit_repo {
85 int enable_remote_branches; 85 int enable_remote_branches;
86 int enable_subject_links; 86 int enable_subject_links;
87 int max_stats; 87 int max_stats;
88 int branch_sort;
88 int commit_sort; 89 int commit_sort;
89 time_t mtime; 90 time_t mtime;
90 struct cgit_filter *about_filter; 91 struct cgit_filter *about_filter;
@@ -234,6 +235,7 @@ struct cgit_config {
234 int summary_log; 235 int summary_log;
235 int summary_tags; 236 int summary_tags;
236 int ssdiff; 237 int ssdiff;
238 int branch_sort;
237 int commit_sort; 239 int commit_sort;
238 struct string_list mimetypes; 240 struct string_list mimetypes;
239 struct cgit_filter *about_filter; 241 struct cgit_filter *about_filter;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 4d27d9f..39b031e 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -40,6 +40,11 @@ agefile::
40 function in libgit. Recommended timestamp-format is "yyyy-mm-dd 40 function in libgit. Recommended timestamp-format is "yyyy-mm-dd
41 hh:mm:ss". Default value: "info/web/last-modified". 41 hh:mm:ss". Default value: "info/web/last-modified".
42 42
43branch-sort::
44 Flag which, when set to "age", enables date ordering in the branch ref
45 list, and when set to "name" enables ordering by branch name. Default
46 value: "name".
47
43cache-root:: 48cache-root::
44 Path used to store the cgit cache entries. Default value: 49 Path used to store the cgit cache entries. Default value:
45 "/var/cache/cgit". See also: "MACRO EXPANSION". 50 "/var/cache/cgit". See also: "MACRO EXPANSION".
@@ -92,6 +97,12 @@ commit-filter::
92 be used to implement bugtracker integration. Default value: none. 97 be used to implement bugtracker integration. Default value: none.
93 See also: "FILTER API". 98 See also: "FILTER API".
94 99
100commit-sort::
101 Flag which, when set to "date", enables strict date ordering in the
102 commit log, and when set to "topo" enables strict topological
103 ordering. If unset, the default ordering of "git log" is used. Default
104 value: unset.
105
95css:: 106css::
96 Url which specifies the css document to include in all cgit pages. 107 Url which specifies the css document to include in all cgit pages.
97 Default value: "/cgit.css". 108 Default value: "/cgit.css".
@@ -196,12 +207,6 @@ local-time::
196 Flag which, if set to "1", makes cgit print commit and tag times in the 207 Flag which, if set to "1", makes cgit print commit and tag times in the
197 servers timezone. Default value: "0". 208 servers timezone. Default value: "0".
198 209
199commit-sort::
200 Flag which, when set to "date", enables strict date ordering in the
201 commit log, and when set to "topo" enables strict topological
202 ordering. If unset, the default ordering of "git log" is used. Default
203 value: unset.
204
205logo:: 210logo::
206 Url which specifies the source of an image which will be used as a logo 211 Url which specifies the source of an image which will be used as a logo
207 on all cgit pages. Default value: "/cgit.png". 212 on all cgit pages. Default value: "/cgit.png".
@@ -299,6 +304,12 @@ repo.group::
299 Legacy alias for "section". This option is deprecated and will not be 304 Legacy alias for "section". This option is deprecated and will not be
300 supported in cgit-1.0. 305 supported in cgit-1.0.
301 306
307repository-sort::
308 The way in which repositories in each section are sorted. Valid values
309 are "name" for sorting by the repo name or "age" for sorting by the
310 most recently updated repository. Default value: "name". See also:
311 section, case-sensitive-sort, section-sort.
312
302robots:: 313robots::
303 Text used as content for the "robots" meta-tag. Default value: 314 Text used as content for the "robots" meta-tag. Default value:
304 "index, nofollow". 315 "index, nofollow".
@@ -339,12 +350,6 @@ section::
339 after this option will inherit the current section name. Default value: 350 after this option will inherit the current section name. Default value:
340 none. 351 none.
341 352
342repository-sort::
343 The way in which repositories in each section are sorted. Valid values
344 are "name" for sorting by the repo name or "age" for sorting by the
345 most recently updated repository. Default value: "name". See also:
346 section, case-sensitive-sort, section-sort.
347
348section-sort:: 353section-sort::
349 Flag which, when set to "1", will sort the sections on the repository 354 Flag which, when set to "1", will sort the sections on the repository
350 listing by name. Set this flag to "0" if the order in the cgitrc file should 355 listing by name. Set this flag to "0" if the order in the cgitrc file should
@@ -409,6 +414,11 @@ repo.about-filter::
409 Override the default about-filter. Default value: none. See also: 414 Override the default about-filter. Default value: none. See also:
410 "enable-filter-overrides". See also: "FILTER API". 415 "enable-filter-overrides". See also: "FILTER API".
411 416
417repo.branch-sort::
418 Flag which, when set to "age", enables date ordering in the branch ref
419 list, and when set to "name" enables ordering by branch name. Default
420 value: "name".
421
412repo.clone-url:: 422repo.clone-url::
413 A list of space-separated urls which can be used to clone this repo. 423 A list of space-separated urls which can be used to clone this repo.
414 Default value: none. See also: "MACRO EXPANSION". 424 Default value: none. See also: "MACRO EXPANSION".
@@ -417,6 +427,12 @@ repo.commit-filter::
417 Override the default commit-filter. Default value: none. See also: 427 Override the default commit-filter. Default value: none. See also:
418 "enable-filter-overrides". See also: "FILTER API". 428 "enable-filter-overrides". See also: "FILTER API".
419 429
430repo.commit-sort::
431 Flag which, when set to "date", enables strict date ordering in the
432 commit log, and when set to "topo" enables strict topological
433 ordering. If unset, the default ordering of "git log" is used. Default
434 value: unset.
435
420repo.defbranch:: 436repo.defbranch::
421 The name of the default branch for this repository. If no such branch 437 The name of the default branch for this repository. If no such branch
422 exists in the repository, the first branch name (when sorted) is used 438 exists in the repository, the first branch name (when sorted) is used
@@ -446,12 +462,6 @@ repo.enable-subject-links::
446 A flag which can be used to override the global setting 462 A flag which can be used to override the global setting
447 `enable-subject-links'. Default value: none. 463 `enable-subject-links'. Default value: none.
448 464
449repo.commit-sort::
450 Flag which, when set to "date", enables strict date ordering in the
451 commit log, and when set to "topo" enables strict topological
452 ordering. If unset, the default ordering of "git log" is used. Default
453 value: unset.
454
455repo.logo:: 465repo.logo::
456 Url which specifies the source of an image which will be used as a logo 466 Url which specifies the source of an image which will be used as a logo
457 on this repo's pages. Default value: global logo. 467 on this repo's pages. Default value: global logo.
diff --git a/shared.c b/shared.c
index 10be355..4369378 100644
--- a/shared.c
+++ b/shared.c
@@ -63,6 +63,7 @@ struct cgit_repo *cgit_add_repo(const char *url)
63 ret->enable_remote_branches = ctx.cfg.enable_remote_branches; 63 ret->enable_remote_branches = ctx.cfg.enable_remote_branches;
64 ret->enable_subject_links = ctx.cfg.enable_subject_links; 64 ret->enable_subject_links = ctx.cfg.enable_subject_links;
65 ret->max_stats = ctx.cfg.max_stats; 65 ret->max_stats = ctx.cfg.max_stats;
66 ret->branch_sort = ctx.cfg.branch_sort;
66 ret->commit_sort = ctx.cfg.commit_sort; 67 ret->commit_sort = ctx.cfg.commit_sort;
67 ret->module_link = ctx.cfg.module_link; 68 ret->module_link = ctx.cfg.module_link;
68 ret->readme = ctx.cfg.readme; 69 ret->readme = ctx.cfg.readme;
diff --git a/ui-refs.c b/ui-refs.c
index 3fbaad0..0ae0612 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -197,10 +197,9 @@ void cgit_print_branches(int maxcount)
197 if (maxcount == 0 || maxcount > list.count) 197 if (maxcount == 0 || maxcount > list.count)
198 maxcount = list.count; 198 maxcount = list.count;
199 199
200 if (maxcount < list.count) { 200 qsort(list.refs, list.count, sizeof(*list.refs), cmp_branch_age);
201 qsort(list.refs, list.count, sizeof(*list.refs), cmp_branch_age); 201 if (ctx.repo->branch_sort == 0)
202 qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name); 202 qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name);
203 }
204 203
205 for (i = 0; i < maxcount; i++) 204 for (i = 0; i < maxcount; i++)
206 print_branch(list.refs[i]); 205 print_branch(list.refs[i]);