From 792f813d342013124ce40142fef4afee3ff00df3 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Sat, 13 Oct 2012 16:10:30 +0200 Subject: 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 --- cgit.c | 14 ++++++++++++-- cgit.h | 2 ++ cgitrc.5.txt | 12 ++++++++++++ cmd.c | 3 ++- shared.c | 1 + ui-log.c | 10 +++++++++- ui-log.h | 2 +- ui-summary.c | 2 +- 8 files changed, 40 insertions(+), 6 deletions(-) diff --git a/cgit.c b/cgit.c index 35f0da1..a97ed69 100644 --- a/cgit.c +++ b/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); diff --git a/cgit.h b/cgit.h index becf776..7a99135 100644 --- a/cgit.h +++ b/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; diff --git a/cgitrc.5.txt b/cgitrc.5.txt index 78bb9fc..7d01fcd 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -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. diff --git a/cmd.c b/cmd.c index 5a3d157..899e913 100644 --- a/cmd.c +++ b/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) diff --git a/shared.c b/shared.c index 3e20937..8e5ae48 100644 --- a/shared.c +++ b/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_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; diff --git a/ui-log.c b/ui-log.c index 6b12ca2..2f41602 100644 --- a/ui-log.c +++ b/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, - 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); diff --git a/ui-log.h b/ui-log.h index d0cb779..d324c92 100644 --- a/ui-log.h +++ b/ui-log.h @@ -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 */ diff --git a/ui-summary.c b/ui-summary.c index 227ed27..b4fdd57 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -59,7 +59,7 @@ void cgit_print_summary() if (ctx.cfg.summary_log > 0) { html(" "); 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); -- cgit v1.2.1