aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Bieniek <Tobias.Bieniek@gmx.de>2012-10-13 14:10:30 +0000
committerJason A. Donenfeld <Jason@zx2c4.com>2012-10-17 14:30:29 +0000
commit792f813d342013124ce40142fef4afee3ff00df3 (patch)
tree9d42fff81b16cba44c8c765f2866cc79ddb507cd
parent7a4e7c8ffbacfad5ac83ad20426d7911c2eacdeb (diff)
downloadcgit-792f813d342013124ce40142fef4afee3ff00df3.tar
cgit-792f813d342013124ce40142fef4afee3ff00df3.tar.gz
cgit-792f813d342013124ce40142fef4afee3ff00df3.zip
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>
-rw-r--r--cgit.c14
-rw-r--r--cgit.h2
-rw-r--r--cgitrc.5.txt12
-rw-r--r--cmd.c3
-rw-r--r--shared.c1
-rw-r--r--ui-log.c10
-rw-r--r--ui-log.h2
-rw-r--r--ui-summary.c2
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("<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);