From 0d05bca502f4a5347fa629045aca97ba9b404acc Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Tue, 19 Jun 2007 00:56:40 +0200 Subject: Add setting to enable/disable extra links on index page The summary/log/tree links displayed for each repository on the index page lost some of their purpose when the header menu was added, so this commit introduces the parameter 'enable-index-links' which must be set to 1 to enable these links. Suggested-by: Kristian Høgsberg Signed-off-by: Lars Hjemli --- cgit.h | 1 + 1 file changed, 1 insertion(+) (limited to 'cgit.h') diff --git a/cgit.h b/cgit.h index bd2dd0d..81c819d 100644 --- a/cgit.h +++ b/cgit.h @@ -118,6 +118,7 @@ extern char *cgit_repo_group; extern int cgit_nocache; extern int cgit_snapshots; +extern int cgit_enable_index_links; extern int cgit_enable_log_filecount; extern int cgit_enable_log_linecount; extern int cgit_max_lock_attempts; -- cgit v1.2.3-70-g09d2 From 382805ee83b6e6f165159312a9fe20e3971897b6 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Tue, 26 Jun 2007 18:04:31 +0200 Subject: Add trim_end() and use it to remove trailing slashes from repo paths The new function removes all trailing instances of an arbitrary character from a copy of the supplied char array. This is then used to remove any trailing slashes from cgit_query_path. Signed-off-by: Lars Hjemli --- cgit.h | 1 + parsing.c | 2 +- shared.c | 24 +++++++++++++++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) (limited to 'cgit.h') diff --git a/cgit.h b/cgit.h index 81c819d..ddb2fff 100644 --- a/cgit.h +++ b/cgit.h @@ -159,6 +159,7 @@ extern int chk_zero(int result, char *msg); extern int chk_positive(int result, char *msg); extern int hextoint(char c); +extern char *trim_end(const char *str, char c); extern void *cgit_free_commitinfo(struct commitinfo *info); diff --git a/parsing.c b/parsing.c index 74a2484..2c05c09 100644 --- a/parsing.c +++ b/parsing.c @@ -168,7 +168,7 @@ void cgit_parse_url(const char *url) if (p) { p[0] = '\0'; if (p[1]) - cgit_query_path = xstrdup(p + 1); + cgit_query_path = trim_end(p + 1, '/'); } cgit_cmd = cgit_get_cmd_index(cmd + 1); cgit_query_page = xstrdup(cmd + 1); diff --git a/shared.c b/shared.c index ab00bc9..45db735 100644 --- a/shared.c +++ b/shared.c @@ -228,7 +228,7 @@ void cgit_querystring_cb(const char *name, const char *value) } else if (!strcmp(name, "ofs")) { cgit_query_ofs = atoi(value); } else if (!strcmp(name, "path")) { - cgit_query_path = xstrdup(value); + cgit_query_path = trim_end(value, '/'); } else if (!strcmp(name, "name")) { cgit_query_name = xstrdup(value); } @@ -257,6 +257,28 @@ int hextoint(char c) return -1; } +char *trim_end(const char *str, char c) +{ + int len; + char *s, *t; + + if (str == NULL) + return NULL; + t = (char *)str; + len = strlen(t); + while(len > 0 && t[len - 1] == c) + len--; + + if (len == 0) + return NULL; + + c = t[len]; + t[len] = '\0'; + s = xstrdup(t); + t[len] = c; + return s; +} + void cgit_diff_tree_cb(struct diff_queue_struct *q, struct diff_options *options, void *data) { -- cgit v1.2.3-70-g09d2 From 103940fe6b0914dc42b8b033d1d328f38135ca5f Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Fri, 29 Jun 2007 20:27:41 +0200 Subject: Add ofs argument to cgit_log_link and use it in ui-log.c This fixes a bug in the prev/next links on the log page: when on the default branch the links to prev/next page would contain h=(null). Signed-off-by: Lars Hjemli --- cgit.h | 2 +- ui-log.c | 16 +++++++--------- ui-repolist.c | 2 +- ui-shared.c | 22 +++++++++++++++++++--- ui-summary.c | 2 +- ui-tree.c | 2 +- 6 files changed, 30 insertions(+), 16 deletions(-) (limited to 'cgit.h') diff --git a/cgit.h b/cgit.h index ddb2fff..a59a370 100644 --- a/cgit.h +++ b/cgit.h @@ -206,7 +206,7 @@ extern char *cgit_pageurl(const char *reponame, const char *pagename, extern void cgit_tree_link(char *name, char *title, char *class, char *head, char *rev, char *path); extern void cgit_log_link(char *name, char *title, char *class, char *head, - char *rev, char *path); + char *rev, char *path, int ofs); extern void cgit_commit_link(char *name, char *title, char *class, char *head, char *rev); extern void cgit_diff_link(char *name, char *title, char *class, char *head, diff --git a/ui-log.c b/ui-log.c index 95cb453..d38e40a 100644 --- a/ui-log.c +++ b/ui-log.c @@ -113,17 +113,15 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *path, i if (pager) { html("
"); if (ofs > 0) { - html(" [prev] "); + cgit_log_link("[prev]", NULL, NULL, cgit_query_head, + cgit_query_sha1, cgit_query_path, + ofs - cnt); + html(" "); } - if ((commit = get_revision(&rev)) != NULL) { - html(" [next] "); + cgit_log_link("[next]", NULL, NULL, cgit_query_head, + cgit_query_sha1, cgit_query_path, + ofs + cnt); } html("
"); } diff --git a/ui-repolist.c b/ui-repolist.c index c735368..4c86543 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -98,7 +98,7 @@ void cgit_print_repolist(struct cacheitem *item) html_link_open(cgit_repourl(cgit_repo->url), NULL, "button"); html("summary"); - cgit_log_link("log", NULL, "button", NULL, NULL, NULL); + cgit_log_link("log", NULL, "button", NULL, NULL, NULL, 0); cgit_tree_link("tree", NULL, "button", NULL, NULL, NULL); html(""); } diff --git a/ui-shared.c b/ui-shared.c index 64c237f..bfcc2ac 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -163,9 +163,25 @@ void cgit_tree_link(char *name, char *title, char *class, char *head, } void cgit_log_link(char *name, char *title, char *class, char *head, - char *rev, char *path) + char *rev, char *path, int ofs) { - reporevlink("log", name, title, class, head, rev, path); + char *delim; + + delim = repolink(title, class, "log", head, path); + if (rev && strcmp(rev, cgit_query_head)) { + html(delim); + html("id="); + html_attr(rev); + delim = "&"; + } + if (ofs > 0) { + html(delim); + html("ofs="); + htmlf("%d", ofs); + } + html("'>"); + html_txt(name); + html(""); } void cgit_commit_link(char *name, char *title, char *class, char *head, @@ -302,7 +318,7 @@ void cgit_print_pageheader(char *title, int show_search) NULL, NULL); html(" "); cgit_log_link("log", NULL, NULL, cgit_query_head, - cgit_query_sha1, cgit_query_path); + cgit_query_sha1, cgit_query_path, 0); html(" "); cgit_tree_link("tree", NULL, NULL, cgit_query_head, cgit_query_sha1, NULL); diff --git a/ui-summary.c b/ui-summary.c index 03dd078..b4bc6d8 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -27,7 +27,7 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, if (commit && !parse_commit(commit)){ info = cgit_parse_commit(commit); html(""); - cgit_log_link(ref, NULL, NULL, ref, NULL, NULL); + cgit_log_link(ref, NULL, NULL, ref, NULL, NULL, 0); html(""); cgit_print_age(commit->date, -1, NULL); html(""); diff --git a/ui-tree.c b/ui-tree.c index b6cb813..c5d64ff 100644 --- a/ui-tree.c +++ b/ui-tree.c @@ -93,7 +93,7 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, html(""); cgit_log_link("log", NULL, "button", cgit_query_head, curr_rev, - fullpath); + fullpath, 0); html("\n"); free(name); return 0; -- cgit v1.2.3-70-g09d2