diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2013-04-08 23:57:12 (JST) |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2013-04-10 21:48:26 (JST) |
commit | 389cc17357e2040c9542d3e085f64a8d2f085e9a (patch) | |
tree | 0696cd47fead7576cf03f06eec067b3e5b2c365a | |
parent | 880223dc845e8b502e753425b889cbb70b73478e (diff) | |
download | cgit-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.c | 14 | ||||
-rw-r--r-- | cgit.h | 2 | ||||
-rw-r--r-- | cgitrc.5.txt | 46 | ||||
-rw-r--r-- | shared.c | 1 | ||||
-rw-r--r-- | ui-refs.c | 5 |
5 files changed, 46 insertions, 22 deletions
@@ -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; |
@@ -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 | ||
43 | branch-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 | |||
43 | cache-root:: | 48 | cache-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 | ||
100 | commit-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 | |||
95 | css:: | 106 | css:: |
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 | ||
199 | commit-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 | |||
205 | logo:: | 210 | logo:: |
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 | ||
307 | repository-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 | |||
302 | robots:: | 313 | robots:: |
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 | ||
342 | repository-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 | |||
348 | section-sort:: | 353 | section-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 | ||
417 | repo.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 | |||
412 | repo.clone-url:: | 422 | repo.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 | ||
430 | repo.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 | |||
420 | repo.defbranch:: | 436 | repo.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 | ||
449 | repo.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 | |||
455 | repo.logo:: | 465 | repo.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. |
@@ -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; |
@@ -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]); |