diff options
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.patch | 78 |
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 + |