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>
Esse commit está contido em:
Tobias Bieniek 2012-10-13 16:10:30 +02:00 commit de Jason A. Donenfeld
commit 792f813d34
8 arquivos alterados com 40 adições e 6 exclusões

14
cgit.c
Ver arquivo

@ -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
Ver arquivo

@ -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;

Ver arquivo

@ -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
Ver arquivo

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

Ver arquivo

@ -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;

Ver arquivo

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

Ver arquivo

@ -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 */

Ver arquivo

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