summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2007-06-29 18:32:08 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2007-06-29 18:32:08 (UTC)
commit16a3d2779ccd56bf7954d98da547247d8796544b (patch) (side-by-side diff)
tree86d2ed41adc3de842c7518d614ea49ca0200e4d2
parentf69250358a74efa5d7d9c562b2cdd80fad1430f1 (diff)
parent103940fe6b0914dc42b8b033d1d328f38135ca5f (diff)
downloadcgit-16a3d2779ccd56bf7954d98da547247d8796544b.zip
cgit-16a3d2779ccd56bf7954d98da547247d8796544b.tar.gz
cgit-16a3d2779ccd56bf7954d98da547247d8796544b.tar.bz2
Merge branch 'lh/menu'
* lh/menu: Add ofs argument to cgit_log_link and use it in ui-log.c Add trim_end() and use it to remove trailing slashes from repo paths Do not include current path in the "tree" menu link Add setting to enable/disable extra links on index page Change S/L/T to summary/log/tree Change "files" to "tree" Include querystring as part of cached filename for repo summary page Add more menuitems on repo pages
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c10
-rw-r--r--cgit.css23
-rw-r--r--cgit.h4
-rw-r--r--cgitrc4
-rw-r--r--parsing.c2
-rw-r--r--shared.c27
-rw-r--r--ui-log.c16
-rw-r--r--ui-repolist.c35
-rw-r--r--ui-shared.c71
-rw-r--r--ui-summary.c2
-rw-r--r--ui-tree.c4
11 files changed, 145 insertions, 53 deletions
diff --git a/cgit.c b/cgit.c
index 11dff76..d9a03c2 100644
--- a/cgit.c
+++ b/cgit.c
@@ -28,4 +28,5 @@ static int cgit_prepare_cache(struct cacheitem *item)
if (!cgit_cmd) {
- item->name = xstrdup(fmt("%s/%s/index.html", cgit_cache_root,
- cache_safe_filename(cgit_repo->url)));
+ item->name = xstrdup(fmt("%s/%s/index.%s.html", cgit_cache_root,
+ cache_safe_filename(cgit_repo->url),
+ cache_safe_filename(cgit_querystring)));
item->ttl = cgit_cache_repo_ttl;
@@ -33,4 +34,5 @@ static int cgit_prepare_cache(struct cacheitem *item)
item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root,
- cache_safe_filename(cgit_repo->url), cgit_query_page,
- cache_safe_filename(cgit_querystring)));
+ cache_safe_filename(cgit_repo->url),
+ cgit_query_page,
+ cache_safe_filename(cgit_querystring)));
if (cgit_query_has_symref)
diff --git a/cgit.css b/cgit.css
index cda437e..112dac1 100644
--- a/cgit.css
+++ b/cgit.css
@@ -97,2 +97,10 @@ td#header {
+td#header a {
+ color: #666;
+}
+
+td#header a:hoved {
+ text-decoration: underline;
+}
+
td#logo {
@@ -118,2 +126,3 @@ td#crumb a {
background-color: #666;
+ padding: 0em 0.5em 0em 0.5em;
}
@@ -121,4 +130,5 @@ td#crumb a {
td#crumb a:hover {
- color: #eee;
- background-color: #666;
+ color: #666;
+ background-color: #ccc;
+ text-decoration: none;
}
@@ -363,5 +373,5 @@ a.button {
font-size: 80%;
- color: #333;
- background-color: #ccc;
- border: solid 1px #999;
+ color: #aaa;
+ background-color: #eee;
+ border: solid 1px #aaa;
padding: 0em 0.5em;
@@ -372,3 +382,4 @@ a.button:hover {
text-decoration: none;
- background-color: #eee;
+ color: #333;
+ background-color: #ccc;
}
diff --git a/cgit.h b/cgit.h
index 9558362..2ff5340 100644
--- a/cgit.h
+++ b/cgit.h
@@ -120,2 +120,3 @@ extern int cgit_nocache;
extern int cgit_snapshots;
+extern int cgit_enable_index_links;
extern int cgit_enable_log_filecount;
@@ -160,2 +161,3 @@ extern int chk_positive(int result, char *msg);
extern int hextoint(char c);
+extern char *trim_end(const char *str, char c);
@@ -206,3 +208,3 @@ extern void cgit_tree_link(char *name, char *title, char *class, char *head,
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,
diff --git a/cgitrc b/cgitrc
index 0f602e4..40877f8 100644
--- a/cgitrc
+++ b/cgitrc
@@ -14,2 +14,6 @@
+## Enable/disable extra links to summary/log/tree per repo on index page
+#enable-index-links=0
+
+
## Enable/disable display of 'number of files changed' in log view
diff --git a/parsing.c b/parsing.c
index 74a2484..2c05c09 100644
--- a/parsing.c
+++ b/parsing.c
@@ -170,3 +170,3 @@ void cgit_parse_url(const char *url)
if (p[1])
- cgit_query_path = xstrdup(p + 1);
+ cgit_query_path = trim_end(p + 1, '/');
}
diff --git a/shared.c b/shared.c
index f7f43b2..1a5b866 100644
--- a/shared.c
+++ b/shared.c
@@ -30,2 +30,3 @@ int cgit_nocache = 0;
int cgit_snapshots = 0;
+int cgit_enable_index_links = 0;
int cgit_enable_log_filecount = 0;
@@ -150,2 +151,4 @@ void cgit_global_config_cb(const char *name, const char *value)
cgit_snapshots = atoi(value);
+ else if (!strcmp(name, "enable-index-links"))
+ cgit_enable_index_links = atoi(value);
else if (!strcmp(name, "enable-log-filecount"))
@@ -229,3 +232,3 @@ void cgit_querystring_cb(const char *name, const char *value)
} else if (!strcmp(name, "path")) {
- cgit_query_path = xstrdup(value);
+ cgit_query_path = trim_end(value, '/');
} else if (!strcmp(name, "name")) {
@@ -258,2 +261,24 @@ int hextoint(char c)
+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,
diff --git a/ui-log.c b/ui-log.c
index 95cb453..d38e40a 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -115,13 +115,11 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *path, i
if (ofs > 0) {
- html("&nbsp;<a href='");
- html(cgit_pageurl(cgit_query_repo, cgit_query_page,
- fmt("h=%s&amp;ofs=%d", tip, ofs-cnt)));
- html("'>[prev]</a>&nbsp;");
+ cgit_log_link("[prev]", NULL, NULL, cgit_query_head,
+ cgit_query_sha1, cgit_query_path,
+ ofs - cnt);
+ html("&nbsp;");
}
-
if ((commit = get_revision(&rev)) != NULL) {
- html("&nbsp;<a href='");
- html(cgit_pageurl(cgit_query_repo, "log",
- fmt("h=%s&amp;ofs=%d", tip, ofs+cnt)));
- html("'>[next]</a>&nbsp;");
+ cgit_log_link("[next]", NULL, NULL, cgit_query_head,
+ cgit_query_sha1, cgit_query_path,
+ ofs + cnt);
}
diff --git a/ui-repolist.c b/ui-repolist.c
index 2018dab..4c86543 100644
--- a/ui-repolist.c
+++ b/ui-repolist.c
@@ -46,5 +46,8 @@ void cgit_print_repolist(struct cacheitem *item)
{
- int i;
+ int i, columns = 4;
char *last_group = NULL;
+ if (cgit_enable_index_links)
+ columns++;
+
cgit_print_docstart(cgit_root_title, item);
@@ -54,3 +57,4 @@ void cgit_print_repolist(struct cacheitem *item)
if (cgit_index_header) {
- html("<tr class='nohover'><td colspan='5' class='include-block'>");
+ htmlf("<tr class='nohover'><td colspan='%d' class='include-block'>",
+ columns);
html_include(cgit_index_header);
@@ -62,4 +66,6 @@ void cgit_print_repolist(struct cacheitem *item)
"<th class='left'>Owner</th>"
- "<th class='left'>Idle</th>"
- "<th>Links</th></tr>\n");
+ "<th class='left'>Idle</th>");
+ if (cgit_enable_index_links)
+ html("<th>Links</th>");
+ html("</tr>\n");
@@ -71,3 +77,4 @@ void cgit_print_repolist(struct cacheitem *item)
strcmp(cgit_repo->group, last_group))) {
- html("<tr class='nohover'><td colspan='4' class='repogroup'>");
+ htmlf("<tr class='nohover'><td colspan='%d' class='repogroup'>",
+ columns);
html_txt(cgit_repo->group);
@@ -87,9 +94,13 @@ void cgit_print_repolist(struct cacheitem *item)
print_modtime(cgit_repo);
- html("</td><td>");
- html_link_open(cgit_repourl(cgit_repo->url),
- "Summary", "button");
- html("S</a>");
- cgit_log_link("L", "Log", "button", NULL, NULL, NULL);
- cgit_tree_link("F", "Files", "button", NULL, NULL, NULL);
- html("</td></tr>\n");
+ html("</td>");
+ if (cgit_enable_index_links) {
+ html("<td>");
+ html_link_open(cgit_repourl(cgit_repo->url),
+ NULL, "button");
+ html("summary</a>");
+ cgit_log_link("log", NULL, "button", NULL, NULL, NULL, 0);
+ cgit_tree_link("tree", NULL, "button", NULL, NULL, NULL);
+ html("</td>");
+ }
+ html("</tr>\n");
}
diff --git a/ui-shared.c b/ui-shared.c
index 110c696..d4376ce 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -113,6 +113,8 @@ static char *repolink(char *title, char *class, char *page, char *head,
html("/");
- html(page);
- html("/");
- if (path)
- html_attr(path);
+ if (page) {
+ html(page);
+ html("/");
+ if (path)
+ html_attr(path);
+ }
} else {
@@ -123,6 +125,8 @@ static char *repolink(char *title, char *class, char *page, char *head,
html("/");
- html(page);
- html("/");
- if (path)
- html_attr(path);
+ if (page) {
+ html(page);
+ html("/");
+ if (path)
+ html_attr(path);
+ }
delim = "&amp;";
@@ -161,5 +165,21 @@ 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("</a>");
}
@@ -281,5 +301,7 @@ void cgit_print_pageheader(char *title, int show_search)
html("<table id='layout'>");
- html("<tr><td id='header'>");
- html(cgit_root_title);
- html("</td><td id='logo'>");
+ html("<tr><td id='header'><a href='");
+ html_attr(cgit_rooturl());
+ html("'>");
+ html_txt(cgit_root_title);
+ html("</a></td><td id='logo'>");
html("<a href='");
@@ -289,7 +311,24 @@ void cgit_print_pageheader(char *title, int show_search)
html("<tr><td id='crumb'>");
- htmlf("<a href='%s'>root</a>", cgit_rooturl());
if (cgit_query_repo) {
- htmlf(" : <a href='%s'>", cgit_repourl(cgit_repo->url));
html_txt(cgit_repo->name);
- htmlf("</a> : %s", title);
+ html(" (");
+ html_txt(cgit_query_head);
+ html(") : &nbsp;");
+ reporevlink(NULL, "summary", NULL, NULL, cgit_query_head,
+ NULL, NULL);
+ html(" ");
+ cgit_log_link("log", NULL, NULL, cgit_query_head,
+ cgit_query_sha1, cgit_query_path, 0);
+ html(" ");
+ cgit_tree_link("tree", NULL, NULL, cgit_query_head,
+ cgit_query_sha1, NULL);
+ html(" ");
+ cgit_commit_link("commit", NULL, NULL, cgit_query_head,
+ cgit_query_sha1);
+ html(" ");
+ cgit_diff_link("diff", NULL, NULL, cgit_query_head,
+ cgit_query_sha1, cgit_query_sha2,
+ cgit_query_path);
+ } else {
+ html_txt("Index of repositories");
}
diff --git a/ui-summary.c b/ui-summary.c
index 03dd078..b4bc6d8 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -29,3 +29,3 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,
html("<tr><td>");
- cgit_log_link(ref, NULL, NULL, ref, NULL, NULL);
+ cgit_log_link(ref, NULL, NULL, ref, NULL, NULL, 0);
html("</td><td>");
diff --git a/ui-tree.c b/ui-tree.c
index 1037c82..c5d64ff 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -94,4 +94,4 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen,
html("<td>");
- cgit_log_link("L", "Log", "button", cgit_query_head, curr_rev,
- fullpath);
+ cgit_log_link("log", NULL, "button", cgit_query_head, curr_rev,
+ fullpath, 0);
html("</td></tr>\n");