ui-log: Add "commit-sort" option for controlling commit ordering
This makes it possible to use strict commit date ordering or strict topological ordering by passing the corresponding flags to "git log". Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
7a4e7c8ffb
commit
792f813d34
14
cgit.c
14
cgit.c
@ -84,7 +84,12 @@ void repo_config(struct cgit_repo *repo, const char *name, const char *value)
|
|||||||
repo->enable_remote_branches = atoi(value);
|
repo->enable_remote_branches = atoi(value);
|
||||||
else if (!strcmp(name, "enable-subject-links"))
|
else if (!strcmp(name, "enable-subject-links"))
|
||||||
repo->enable_subject_links = atoi(value);
|
repo->enable_subject_links = atoi(value);
|
||||||
else if (!strcmp(name, "max-stats"))
|
else if (!strcmp(name, "commit-sort")) {
|
||||||
|
if (!strcmp(value, "date"))
|
||||||
|
repo->commit_sort = 1;
|
||||||
|
if (!strcmp(value, "topo"))
|
||||||
|
repo->commit_sort = 2;
|
||||||
|
} else if (!strcmp(name, "max-stats"))
|
||||||
repo->max_stats = cgit_find_stats_period(value, NULL);
|
repo->max_stats = cgit_find_stats_period(value, NULL);
|
||||||
else if (!strcmp(name, "module-link"))
|
else if (!strcmp(name, "module-link"))
|
||||||
repo->module_link= xstrdup(value);
|
repo->module_link= xstrdup(value);
|
||||||
@ -261,7 +266,12 @@ void config_cb(const char *name, const char *value)
|
|||||||
ctx.cfg.clone_url = xstrdup(value);
|
ctx.cfg.clone_url = xstrdup(value);
|
||||||
else if (!strcmp(name, "local-time"))
|
else if (!strcmp(name, "local-time"))
|
||||||
ctx.cfg.local_time = atoi(value);
|
ctx.cfg.local_time = atoi(value);
|
||||||
else if (!prefixcmp(name, "mimetype."))
|
else if (!strcmp(name, "commit-sort")) {
|
||||||
|
if (!strcmp(value, "date"))
|
||||||
|
ctx.cfg.commit_sort = 1;
|
||||||
|
if (!strcmp(value, "topo"))
|
||||||
|
ctx.cfg.commit_sort = 2;
|
||||||
|
} else if (!prefixcmp(name, "mimetype."))
|
||||||
add_mimetype(name + 9, value);
|
add_mimetype(name + 9, value);
|
||||||
else if (!strcmp(name, "include"))
|
else if (!strcmp(name, "include"))
|
||||||
parse_configfile(expand_macros(value), config_cb);
|
parse_configfile(expand_macros(value), config_cb);
|
||||||
|
2
cgit.h
2
cgit.h
@ -84,6 +84,7 @@ struct cgit_repo {
|
|||||||
int enable_remote_branches;
|
int enable_remote_branches;
|
||||||
int enable_subject_links;
|
int enable_subject_links;
|
||||||
int max_stats;
|
int max_stats;
|
||||||
|
int commit_sort;
|
||||||
time_t mtime;
|
time_t mtime;
|
||||||
struct cgit_filter *about_filter;
|
struct cgit_filter *about_filter;
|
||||||
struct cgit_filter *commit_filter;
|
struct cgit_filter *commit_filter;
|
||||||
@ -231,6 +232,7 @@ struct cgit_config {
|
|||||||
int summary_log;
|
int summary_log;
|
||||||
int summary_tags;
|
int summary_tags;
|
||||||
int ssdiff;
|
int ssdiff;
|
||||||
|
int commit_sort;
|
||||||
struct string_list mimetypes;
|
struct string_list mimetypes;
|
||||||
struct cgit_filter *about_filter;
|
struct cgit_filter *about_filter;
|
||||||
struct cgit_filter *commit_filter;
|
struct cgit_filter *commit_filter;
|
||||||
|
12
cgitrc.5.txt
12
cgitrc.5.txt
@ -192,6 +192,12 @@ local-time::
|
|||||||
Flag which, if set to "1", makes cgit print commit and tag times in the
|
Flag which, if set to "1", makes cgit print commit and tag times in the
|
||||||
servers timezone. Default value: "0".
|
servers timezone. Default value: "0".
|
||||||
|
|
||||||
|
commit-sort::
|
||||||
|
Flag which, when set to "date", enables strict date ordering in the
|
||||||
|
commit log, and when set to "topo" enables strict topological
|
||||||
|
ordering. If unset, the default ordering of "git log" is used. Default
|
||||||
|
value: unset.
|
||||||
|
|
||||||
logo::
|
logo::
|
||||||
Url which specifies the source of an image which will be used as a logo
|
Url which specifies the source of an image which will be used as a logo
|
||||||
on all cgit pages. Default value: "/cgit.png".
|
on all cgit pages. Default value: "/cgit.png".
|
||||||
@ -435,6 +441,12 @@ repo.enable-subject-links::
|
|||||||
A flag which can be used to override the global setting
|
A flag which can be used to override the global setting
|
||||||
`enable-subject-links'. Default value: none.
|
`enable-subject-links'. Default value: none.
|
||||||
|
|
||||||
|
repo.commit-sort::
|
||||||
|
Flag which, when set to "date", enables strict date ordering in the
|
||||||
|
commit log, and when set to "topo" enables strict topological
|
||||||
|
ordering. If unset, the default ordering of "git log" is used. Default
|
||||||
|
value: unset.
|
||||||
|
|
||||||
repo.logo::
|
repo.logo::
|
||||||
Url which specifies the source of an image which will be used as a logo
|
Url which specifies the source of an image which will be used as a logo
|
||||||
on this repo's pages. Default value: global logo.
|
on this repo's pages. Default value: global logo.
|
||||||
|
3
cmd.c
3
cmd.c
@ -68,7 +68,8 @@ static void log_fn(struct cgit_context *ctx)
|
|||||||
{
|
{
|
||||||
cgit_print_log(ctx->qry.sha1, ctx->qry.ofs, ctx->cfg.max_commit_count,
|
cgit_print_log(ctx->qry.sha1, ctx->qry.ofs, ctx->cfg.max_commit_count,
|
||||||
ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1,
|
ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1,
|
||||||
ctx->repo->enable_commit_graph);
|
ctx->repo->enable_commit_graph,
|
||||||
|
ctx->repo->commit_sort);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ls_cache_fn(struct cgit_context *ctx)
|
static void ls_cache_fn(struct cgit_context *ctx)
|
||||||
|
1
shared.c
1
shared.c
@ -63,6 +63,7 @@ struct cgit_repo *cgit_add_repo(const char *url)
|
|||||||
ret->enable_remote_branches = ctx.cfg.enable_remote_branches;
|
ret->enable_remote_branches = ctx.cfg.enable_remote_branches;
|
||||||
ret->enable_subject_links = ctx.cfg.enable_subject_links;
|
ret->enable_subject_links = ctx.cfg.enable_subject_links;
|
||||||
ret->max_stats = ctx.cfg.max_stats;
|
ret->max_stats = ctx.cfg.max_stats;
|
||||||
|
ret->commit_sort = ctx.cfg.commit_sort;
|
||||||
ret->module_link = ctx.cfg.module_link;
|
ret->module_link = ctx.cfg.module_link;
|
||||||
ret->readme = ctx.cfg.readme;
|
ret->readme = ctx.cfg.readme;
|
||||||
ret->mtime = -1;
|
ret->mtime = -1;
|
||||||
|
10
ui-log.c
10
ui-log.c
@ -278,7 +278,7 @@ static char *next_token(char **src)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern,
|
void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern,
|
||||||
char *path, int pager, int commit_graph)
|
char *path, int pager, int commit_graph, int commit_sort)
|
||||||
{
|
{
|
||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
@ -327,6 +327,14 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
|
|||||||
COLUMN_COLORS_HTML_MAX);
|
COLUMN_COLORS_HTML_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (commit_sort == 1) {
|
||||||
|
static const char *date_order_arg = "--date-order";
|
||||||
|
vector_push(&vec, &date_order_arg, 0);
|
||||||
|
} else if (commit_sort == 2) {
|
||||||
|
static const char *topo_order_arg = "--topo-order";
|
||||||
|
vector_push(&vec, &topo_order_arg, 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (path) {
|
if (path) {
|
||||||
arg = "--";
|
arg = "--";
|
||||||
vector_push(&vec, &arg, 0);
|
vector_push(&vec, &arg, 0);
|
||||||
|
2
ui-log.h
2
ui-log.h
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep,
|
extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep,
|
||||||
char *pattern, char *path, int pager,
|
char *pattern, char *path, int pager,
|
||||||
int commit_graph);
|
int commit_graph, int commit_sort);
|
||||||
extern void show_commit_decorations(struct commit *commit);
|
extern void show_commit_decorations(struct commit *commit);
|
||||||
|
|
||||||
#endif /* UI_LOG_H */
|
#endif /* UI_LOG_H */
|
||||||
|
@ -59,7 +59,7 @@ void cgit_print_summary()
|
|||||||
if (ctx.cfg.summary_log > 0) {
|
if (ctx.cfg.summary_log > 0) {
|
||||||
html("<tr class='nohover'><td colspan='4'> </td></tr>");
|
html("<tr class='nohover'><td colspan='4'> </td></tr>");
|
||||||
cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL,
|
cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL,
|
||||||
NULL, NULL, 0, 0);
|
NULL, NULL, 0, 0, 0);
|
||||||
}
|
}
|
||||||
if (ctx.repo->clone_url)
|
if (ctx.repo->clone_url)
|
||||||
print_urls(expand_macros(ctx.repo->clone_url), NULL);
|
print_urls(expand_macros(ctx.repo->clone_url), NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user