summaryrefslogtreecommitdiffstats
path: root/development/cgit/sort-summary-branches.patch
diff options
context:
space:
mode:
Diffstat (limited to 'development/cgit/sort-summary-branches.patch')
-rw-r--r--development/cgit/sort-summary-branches.patch82
1 files changed, 82 insertions, 0 deletions
diff --git a/development/cgit/sort-summary-branches.patch b/development/cgit/sort-summary-branches.patch
new file mode 100644
index 0000000000..2b1d96c693
--- /dev/null
+++ b/development/cgit/sort-summary-branches.patch
@@ -0,0 +1,82 @@
+When there are more than `summary-branches` in a repo, the summary page
+trimmed the list by age and then sorted them by name. Make sorting by
+name optional, though keep it as the default.
+
+Signed-off-by: Todd Zullinger <tmz at pobox.com>
+---
+This was requested by a friend for whom I setup cgit. I don't know if
+it's a worthwhile option or not. It's handy for me to avoid having to
+patch that install. Beware, my C is weak. If there are egregious
+errors in style or content, I won't be shocked or offended to hear
+about them.
+
+ cgit.c | 3 +++
+ cgit.h | 1 +
+ cgitrc.5.txt | 5 +++++
+ ui-refs.c | 4 +++-
+ 4 files changed, 12 insertions(+), 1 deletions(-)
+
+diff --git a/cgit.c b/cgit.c
+index e302a7c..ebbcad1 100644
+--- a/cgit.c
++++ b/cgit.c
+@@ -233,6 +233,8 @@ void config_cb(const char *name, const char *value)
+ ctx.cfg.local_time = atoi(value);
+ else if (!prefixcmp(name, "mimetype."))
+ add_mimetype(name + 9, value);
++ else if (!strcmp(name, "summary-branches-sort"))
++ ctx.cfg.summary_branches_sort = xstrdup(value);
+ else if (!strcmp(name, "include"))
+ parse_configfile(expand_macros(value), config_cb);
+ }
+@@ -331,6 +333,7 @@ static void prepare_context(struct cgit_context *ctx)
+ ctx->cfg.script_name = CGIT_SCRIPT_NAME;
+ ctx->cfg.section = "";
+ ctx->cfg.summary_branches = 10;
++ ctx->cfg.summary_branches_sort = "name";
+ ctx->cfg.summary_log = 10;
+ ctx->cfg.summary_tags = 10;
+ ctx->cfg.max_atom_items = 10;
+diff --git a/cgit.h b/cgit.h
+index b5f00fc..2f847a1 100644
+--- a/cgit.h
++++ b/cgit.h
+@@ -216,6 +216,7 @@ struct cgit_config {
+ int section_from_path;
+ int snapshots;
+ int summary_branches;
++ char *summary_branches_sort;
+ int summary_log;
+ int summary_tags;
+ int ssdiff;
+diff --git a/cgitrc.5.txt b/cgitrc.5.txt
+index 65b210f..1c8574b 100644
+--- a/cgitrc.5.txt
++++ b/cgitrc.5.txt
+@@ -324,6 +324,11 @@ summary-branches::
+ Specifies the number of branches to display in the repository "summary"
+ view. Default value: "10".
+
++summary-branches-sort::
++ Specifies the sort order to use for branches on the summary page, when
++ there are more than `summary-count` branches. Valid options are "name"
++ and "age". Default value: "name".
++
+ summary-log::
+ Specifies the number of log entries to display in the repository
+ "summary" view. Default value: "10".
+diff --git a/ui-refs.c b/ui-refs.c
+index caddfbc..188e63d 100644
+--- a/ui-refs.c
++++ b/ui-refs.c
+@@ -197,7 +197,9 @@ void cgit_print_branches(int maxcount)
+
+ 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);
++ if (ctx.cfg.summary_branches_sort &&
++ !strcmp(ctx.cfg.summary_branches_sort, "name"))
++ qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name);
+ }
+
+ for(i=0; i<maxcount; i++)