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 committed by Jason A. Donenfeld
부모 7a4e7c8ffb
커밋 792f813d34
8개의 변경된 파일40개의 추가작업 그리고 6개의 파일을 삭제

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);
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
파일 보기

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

파일 보기

@ -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
파일 보기

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

파일 보기

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

파일 보기

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

파일 보기

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

파일 보기

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