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:
Tobias Bieniek 2012-10-13 16:10:30 +02:00 committato da Jason A. Donenfeld
parent 7a4e7c8ffb
commit 792f813d34
8 ha cambiato i file con 40 aggiunte e 6 eliminazioni

14
cgit.c
Vedi File

@ -84,7 +84,12 @@ void repo_config(struct cgit_repo *repo, const char *name, const char *value)
repo->enable_remote_branches = atoi(value);
else if (!strcmp(name, "enable-subject-links"))
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);
else if (!strcmp(name, "module-link"))
repo->module_link= xstrdup(value);
@ -261,7 +266,12 @@ void config_cb(const char *name, const char *value)
ctx.cfg.clone_url = xstrdup(value);
else if (!strcmp(name, "local-time"))
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);
else if (!strcmp(name, "include"))
parse_configfile(expand_macros(value), config_cb);

2
cgit.h
Vedi File

@ -84,6 +84,7 @@ struct cgit_repo {
int enable_remote_branches;
int enable_subject_links;
int max_stats;
int commit_sort;
time_t mtime;
struct cgit_filter *about_filter;
struct cgit_filter *commit_filter;
@ -231,6 +232,7 @@ struct cgit_config {
int summary_log;
int summary_tags;
int ssdiff;
int commit_sort;
struct string_list mimetypes;
struct cgit_filter *about_filter;
struct cgit_filter *commit_filter;

Vedi File

@ -192,6 +192,12 @@ local-time::
Flag which, if set to "1", makes cgit print commit and tag times in the
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::
Url which specifies the source of an image which will be used as a logo
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
`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::
Url which specifies the source of an image which will be used as a logo
on this repo's pages. Default value: global logo.

3
cmd.c
Vedi File

@ -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,
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)

Vedi File

@ -63,6 +63,7 @@ struct cgit_repo *cgit_add_repo(const char *url)
ret->enable_remote_branches = ctx.cfg.enable_remote_branches;
ret->enable_subject_links = ctx.cfg.enable_subject_links;
ret->max_stats = ctx.cfg.max_stats;
ret->commit_sort = ctx.cfg.commit_sort;
ret->module_link = ctx.cfg.module_link;
ret->readme = ctx.cfg.readme;
ret->mtime = -1;

Vedi File

@ -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,
char *path, int pager, int commit_graph)
char *path, int pager, int commit_graph, int commit_sort)
{
struct rev_info rev;
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);
}
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) {
arg = "--";
vector_push(&vec, &arg, 0);

Vedi File

@ -3,7 +3,7 @@
extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep,
char *pattern, char *path, int pager,
int commit_graph);
int commit_graph, int commit_sort);
extern void show_commit_decorations(struct commit *commit);
#endif /* UI_LOG_H */

Vedi File

@ -59,7 +59,7 @@ void cgit_print_summary()
if (ctx.cfg.summary_log > 0) {
html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
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)
print_urls(expand_macros(ctx.repo->clone_url), NULL);