summaryrefslogtreecommitdiffstats
path: root/development/cgit/patches/0006-ui-repolist-properly-sort-by-age.patch
diff options
context:
space:
mode:
Diffstat (limited to 'development/cgit/patches/0006-ui-repolist-properly-sort-by-age.patch')
-rw-r--r--development/cgit/patches/0006-ui-repolist-properly-sort-by-age.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/development/cgit/patches/0006-ui-repolist-properly-sort-by-age.patch b/development/cgit/patches/0006-ui-repolist-properly-sort-by-age.patch
new file mode 100644
index 0000000000..e48d97f2db
--- /dev/null
+++ b/development/cgit/patches/0006-ui-repolist-properly-sort-by-age.patch
@@ -0,0 +1,78 @@
+From 87c47488d02fcace4da0d468cd9ddd1651b7949e Mon Sep 17 00:00:00 2001
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Thu, 30 Mar 2017 13:19:50 +0200
+Subject: [PATCH 06/15] ui-repolist: properly sort by age
+
+When empty repos exist, comparing them against an existing repo with a
+good mtime might, with particular qsort implementations, not sort
+correctly, because of this brokenness:
+
+ if (get_repo_modtime(r1, &t) && get_repo_modtime(r2, &t))
+
+However, sorting by the age column works as expected, so anyway, to tidy
+things up, we simply reuse that function.
+
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+---
+ ui-repolist.c | 38 +++++++++++++++++---------------------
+ 1 file changed, 17 insertions(+), 21 deletions(-)
+
+diff --git a/ui-repolist.c b/ui-repolist.c
+index b57ea60..20a4f56 100644
+--- a/ui-repolist.c
++++ b/ui-repolist.c
+@@ -184,27 +184,6 @@ static int cmp(const char *s1, const char *s2)
+ return 0;
+ }
+
+-static int sort_section(const void *a, const void *b)
+-{
+- const struct cgit_repo *r1 = a;
+- const struct cgit_repo *r2 = b;
+- int result;
+- time_t t;
+-
+- result = cmp(r1->section, r2->section);
+- if (!result) {
+- if (!strcmp(ctx.cfg.repository_sort, "age")) {
+- // get_repo_modtime caches the value in r->mtime, so we don't
+- // have to worry about inefficiencies here.
+- if (get_repo_modtime(r1, &t) && get_repo_modtime(r2, &t))
+- result = r2->mtime - r1->mtime;
+- }
+- if (!result)
+- result = cmp(r1->name, r2->name);
+- }
+- return result;
+-}
+-
+ static int sort_name(const void *a, const void *b)
+ {
+ const struct cgit_repo *r1 = a;
+@@ -241,6 +220,23 @@ static int sort_idle(const void *a, const void *b)
+ return t2 - t1;
+ }
+
++static int sort_section(const void *a, const void *b)
++{
++ const struct cgit_repo *r1 = a;
++ const struct cgit_repo *r2 = b;
++ int result;
++ time_t t;
++
++ result = cmp(r1->section, r2->section);
++ if (!result) {
++ if (!strcmp(ctx.cfg.repository_sort, "age"))
++ result = sort_idle(r1, r2);
++ if (!result)
++ result = cmp(r1->name, r2->name);
++ }
++ return result;
++}
++
+ struct sortcolumn {
+ const char *name;
+ int (*fn)(const void *a, const void *b);
+--
+2.14.1
+