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 <[email protected]>
---
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++)
-- 
1.7.4.1

-- 
Todd        OpenPGP -> KeyID: 0xBEAF0CE3 | URL: www.pobox.com/~tmz/pgp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If at first you don't succeed, try, try again. Then quit. There's no
point in being a damn fool about it.
    -- W.C. Fields


_______________________________________________
cgit mailing list
[email protected]
http://hjemli.net/mailman/listinfo/cgit

Reply via email to