mirror of
https://git.zx2c4.com/cgit
synced 2024-11-09 10:08:42 +00:00
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>
This commit is contained in:
parent
be39d22328
commit
87c47488d0
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user