diff options
| -rw-r--r-- | packages/cgit.nix | 6 | ||||
| -rw-r--r-- | packages/cgit/0001-ui-repolist-allow-sorting-by-custom-section-list.patch | 88 |
2 files changed, 93 insertions, 1 deletions
diff --git a/packages/cgit.nix b/packages/cgit.nix index 0617b7c..80584cf 100644 --- a/packages/cgit.nix +++ b/packages/cgit.nix @@ -41,6 +41,10 @@ stdenv.mkDerivation rec { }; separateDebugInfo = true; + patches = [ + ./cgit/0001-ui-repolist-allow-sorting-by-custom-section-list.patch + ] + nativeBuildInputs = [ pkg-config asciidoc @@ -60,7 +64,7 @@ stdenv.mkDerivation rec { pygments markdown ]; - + postPatch = '' sed -e 's|"gzip"|"${gzip}/bin/gzip"|' \ -e 's|"bzip2"|"${bzip2.bin}/bin/bzip2"|' \ diff --git a/packages/cgit/0001-ui-repolist-allow-sorting-by-custom-section-list.patch b/packages/cgit/0001-ui-repolist-allow-sorting-by-custom-section-list.patch new file mode 100644 index 0000000..2566101 --- /dev/null +++ b/packages/cgit/0001-ui-repolist-allow-sorting-by-custom-section-list.patch @@ -0,0 +1,88 @@ +From 70cf62c7ff130f8b7386e330d23ac5e7ea6bfa1c Mon Sep 17 00:00:00 2001 +From: Raghuram Subramani <raghus2247@gmail.com> +Date: Fri, 24 Oct 2025 16:27:56 -0400 +Subject: [PATCH] ui-repolist: allow sorting by custom section list + +Add an option to specify a custom section ordering, with the rest of the +sections being sorted as usual at the end. + +Signed-off-by: Raghuram Subramani <raghus2247@gmail.com> +--- + cgit.c | 7 +++++++ + cgit.h | 1 + + ui-repolist.c | 22 ++++++++++++++++++++++ + 3 files changed, 30 insertions(+) + +diff --git a/cgit.c b/cgit.c +index 2efa962..aabbc70 100644 +--- a/cgit.c ++++ b/cgit.c +@@ -171,6 +171,12 @@ static void config_cb(const char *name, const char *value) + ctx.cfg.noheader = atoi(value); + else if (!strcmp(name, "snapshots")) + ctx.cfg.snapshots = cgit_parse_snapshots_mask(value); ++ else if (!strcmp(name, "sections")) { ++ ctx.cfg.sections = strbuf_split_str(value, ' ', 0); ++ ++ for (size_t i = 0; ctx.cfg.sections[i]; i++) ++ strbuf_rtrim(ctx.cfg.sections[i]); ++ } + else if (!strcmp(name, "enable-filter-overrides")) + ctx.cfg.enable_filter_overrides = atoi(value); + else if (!strcmp(name, "enable-follow-links")) +@@ -405,6 +411,7 @@ static void prepare_context(void) + ctx.cfg.scan_hidden_path = 0; + ctx.cfg.script_name = CGIT_SCRIPT_NAME; + ctx.cfg.section = ""; ++ ctx.cfg.sections = NULL; + ctx.cfg.repository_sort = "name"; + ctx.cfg.section_sort = 1; + ctx.cfg.summary_branches = 10; +diff --git a/cgit.h b/cgit.h +index e0d286d..26a4811 100644 +--- a/cgit.h ++++ b/cgit.h +@@ -217,6 +217,7 @@ struct cgit_config { + char *root_readme; + char *script_name; + char *section; ++ struct strbuf **sections; + char *repository_sort; + char *virtual_root; /* Always ends with '/'. */ + char *strict_export; +diff --git a/ui-repolist.c b/ui-repolist.c +index d12e3dd..aa29969 100644 +--- a/ui-repolist.c ++++ b/ui-repolist.c +@@ -227,6 +227,28 @@ static int sort_section(const void *a, const void *b) + int result; + + result = cmp(r1->section, r2->section); ++ ++ int r1pos = 0; ++ int r2pos = 0; ++ ++ ++ if (ctx.cfg.sections != NULL) { ++ for (size_t i = 0; ctx.cfg.sections[i]; i++) { ++ if (ctx.cfg.sections[i]->len == 0) ++ continue; ++ ++ if (!strcmp(r1->section, ctx.cfg.sections[i]->buf)) ++ r1pos = i; ++ if (!strcmp(r2->section, ctx.cfg.sections[i]->buf)) ++ r2pos = i; ++ } ++ } ++ ++ if (r1pos > r2pos) ++ return r1pos; ++ else if (r1pos < r2pos) ++ return -r2pos; ++ + if (!result) { + if (!strcmp(ctx.cfg.repository_sort, "age")) + result = sort_idle(r1, r2); +-- +2.51.0 + |
