mirror of
https://git.zx2c4.com/cgit
synced 2024-11-22 16:38: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;
|
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)
|
static int sort_name(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
const struct cgit_repo *r1 = a;
|
const struct cgit_repo *r1 = a;
|
||||||
@ -241,6 +220,23 @@ static int sort_idle(const void *a, const void *b)
|
|||||||
return t2 - t1;
|
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 {
|
struct sortcolumn {
|
||||||
const char *name;
|
const char *name;
|
||||||
int (*fn)(const void *a, const void *b);
|
int (*fn)(const void *a, const void *b);
|
||||||
|
Loading…
Reference in New Issue
Block a user