author | Lars Hjemli <hjemli@gmail.com> | 2006-12-21 23:58:18 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2006-12-21 23:58:18 (UTC) |
commit | 9d8d9b61238df3a855504825e5f735d00289f12b (patch) (side-by-side diff) | |
tree | ee4e5b6712abb684b920f1f69683eb2b43c6fd8d | |
parent | 378cae639849ba9f020666d1cf6dad6e08bfaf0e (diff) | |
download | cgit-9d8d9b61238df3a855504825e5f735d00289f12b.zip cgit-9d8d9b61238df3a855504825e5f735d00289f12b.tar.gz cgit-9d8d9b61238df3a855504825e5f735d00289f12b.tar.bz2 |
Only show first 80 characters of commit subject in log and summary
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.css | 2 | ||||
-rw-r--r-- | cgit.h | 1 | ||||
-rw-r--r-- | html.c | 28 | ||||
-rw-r--r-- | ui-log.c | 4 | ||||
-rw-r--r-- | ui-summary.c | 4 |
5 files changed, 34 insertions, 5 deletions
@@ -55,97 +55,97 @@ div#header { font-size: 150%; font-weight: bold; border: solid 1px #ccc; vertical-align: middle; } div#header img#logo { float: right; } div#header a { color: black; } div#content { margin: 0.5em 0.5em; } div#blob { border: solid 1px black; } div.error { color: red; font-weight: bold; margin: 1em 2em; } div.ls-blob, div.ls-dir { font-family: monospace; } div.ls-dir a { font-weight: bold; } th.filesize, td.filesize { text-align: right; } td.filesize { font-family: monospace; } td.filemode { font-family: monospace; } td.blob { white-space: pre; font-family: courier; font-size: 100%; background-color: white; } -table.log td { +table.nowrap td { white-space: nowrap; } table.commit-info { border-collapse: collapse; margin-top: 1.5em; } table.commit-info th { text-align: left; font-weight: normal; padding: 0.1em 1em 0.1em 0.1em; } table.commit-info td { font-weight: normal; padding: 0.1em 1em 0.1em 0.1em; } div.commit-subject { font-weight: bold; font-size: 125%; margin: 1.5em 0em 0.5em 0em; padding: 0em; } div.commit-msg { white-space: pre; font-family: monospace; } table.diffstat { border-collapse: collapse; margin-top: 1.5em; } table.diffstat th { font-weight: normal; text-align: left; text-decoration: underline; padding: 0.1em 1em 0.1em 0.1em; font-size: 100%; } table.diffstat td { padding: 0.1em 1em 0.1em 0.1em; font-size: 100%; } table.diffstat td span.modechange { padding-left: 1em; color: red; } table.diffstat td.add a { color: green; } @@ -28,83 +28,84 @@ struct commitinfo { }; extern const char cgit_version[]; extern char *cgit_root; extern char *cgit_root_title; extern char *cgit_css; extern char *cgit_logo; extern char *cgit_logo_link; extern char *cgit_virtual_root; extern char *cgit_cache_root; extern int cgit_nocache; extern int cgit_max_lock_attempts; extern int cgit_cache_root_ttl; extern int cgit_cache_repo_ttl; extern int cgit_cache_dynamic_ttl; extern int cgit_cache_static_ttl; extern int cgit_cache_max_create_time; extern char *cgit_repo_name; extern char *cgit_repo_desc; extern char *cgit_repo_owner; extern int cgit_query_has_symref; extern int cgit_query_has_sha1; extern char *cgit_querystring; extern char *cgit_query_repo; extern char *cgit_query_page; extern char *cgit_query_head; extern char *cgit_query_sha1; extern char *cgit_query_sha2; extern int cgit_query_ofs; extern int htmlfd; extern void cgit_global_config_cb(const char *name, const char *value); extern void cgit_repo_config_cb(const char *name, const char *value); extern void cgit_querystring_cb(const char *name, const char *value); extern void *cgit_free_commitinfo(struct commitinfo *info); extern char *fmt(const char *format,...); extern void html(const char *txt); extern void htmlf(const char *format,...); extern void html_txt(char *txt); +extern void html_ntxt(int len, char *txt); extern void html_attr(char *txt); extern void html_link_open(char *url, char *title, char *class); extern void html_link_close(void); extern void html_filemode(unsigned short mode); extern int cgit_read_config(const char *filename, configfn fn); extern int cgit_parse_query(char *txt, configfn fn); extern struct commitinfo *cgit_parse_commit(struct commit *commit); extern void cache_prepare(struct cacheitem *item); extern int cache_lock(struct cacheitem *item); extern int cache_unlock(struct cacheitem *item); extern int cache_cancel_lock(struct cacheitem *item); extern int cache_exist(struct cacheitem *item); extern int cache_expired(struct cacheitem *item); extern char *cgit_repourl(const char *reponame); extern char *cgit_pageurl(const char *reponame, const char *pagename, const char *query); extern void cgit_print_error(char *msg); extern void cgit_print_date(unsigned long secs); extern void cgit_print_docstart(char *title, struct cacheitem *item); extern void cgit_print_docend(); extern void cgit_print_pageheader(char *title); extern void cgit_print_repolist(struct cacheitem *item); extern void cgit_print_summary(); extern void cgit_print_log(const char *tip, int ofs, int cnt); extern void cgit_print_view(const char *hex); extern void cgit_print_tree(const char *hex); extern void cgit_print_commit(const char *hex); extern void cgit_print_diff(const char *old_hex, const char *new_hex); #endif /* CGIT_H */ @@ -20,96 +20,124 @@ char *fmt(const char *format, ...) va_start(args, format); len = vsnprintf(buf[bufidx], sizeof(buf[bufidx]), format, args); va_end(args); if (len>sizeof(buf[bufidx])) die("[html.c] string truncated: %s", format); return buf[bufidx]; } void html(const char *txt) { write(htmlfd, txt, strlen(txt)); } void htmlf(const char *format, ...) { static char buf[65536]; va_list args; va_start(args, format); vsnprintf(buf, sizeof(buf), format, args); va_end(args); html(buf); } void html_txt(char *txt) { char *t = txt; while(*t){ int c = *t; if (c=='<' || c=='>' || c=='&') { *t = '\0'; html(txt); *t = c; if (c=='>') html(">"); else if (c=='<') html("<"); else if (c=='&') html("&"); txt = t+1; } t++; } if (t!=txt) html(txt); } +void html_ntxt(int len, char *txt) +{ + char *t = txt; + while(*t && len--){ + int c = *t; + if (c=='<' || c=='>' || c=='&') { + *t = '\0'; + html(txt); + *t = c; + if (c=='>') + html(">"); + else if (c=='<') + html("<"); + else if (c=='&') + html("&"); + txt = t+1; + } + t++; + } + if (t!=txt) { + char c = *t; + *t = '\0'; + html(txt); + *t = c; + } + if (len<0) + html("..."); +} void html_attr(char *txt) { char *t = txt; while(*t){ int c = *t; if (c=='<' || c=='>' || c=='\'') { *t = '\0'; html(txt); *t = c; if (c=='>') html(">"); else if (c=='<') html("<"); else if (c=='\'') html(""e;"); txt = t+1; } t++; } if (t!=txt) html(txt); } void html_link_open(char *url, char *title, char *class) { html("<a href='"); html_attr(url); if (title) { html("' title='"); html_attr(title); } if (class) { html("' class='"); html_attr(class); } html("'>"); } void html_link_close(void) { html("</a>"); } void html_fileperm(unsigned short mode) { htmlf("%c%c%c", (mode & 4 ? 'r' : '-'), (mode & 2 ? 'w' : '-'), (mode & 1 ? 'x' : '-')); @@ -1,91 +1,91 @@ /* ui-log.c: functions for log output * * Copyright (C) 2006 Lars Hjemli * * Licensed under GNU General Public License v2 * (see COPYING for full license text) */ #include "cgit.h" void print_commit(struct commit *commit) { char buf[32]; struct commitinfo *info; struct tm *time; info = cgit_parse_commit(commit); time = gmtime(&commit->date); html("<tr><td>"); strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time); html_txt(buf); html("</td><td>"); char *qry = fmt("id=%s", sha1_to_hex(commit->object.sha1)); char *url = cgit_pageurl(cgit_query_repo, "commit", qry); html_link_open(url, NULL, NULL); - html_txt(info->subject); + html_ntxt(80, info->subject); html_link_close(); html("</td><td>"); html_txt(info->author); html("</td></tr>\n"); cgit_free_commitinfo(info); } void cgit_print_log(const char *tip, int ofs, int cnt) { struct rev_info rev; struct commit *commit; const char *argv[2] = {NULL, tip}; int i; init_revisions(&rev, NULL); rev.abbrev = DEFAULT_ABBREV; rev.commit_format = CMIT_FMT_DEFAULT; rev.verbose_header = 1; rev.show_root_diff = 0; setup_revisions(2, argv, &rev, NULL); prepare_revision_walk(&rev); html("<h2>Log</h2>"); - html("<table class='list log'>"); + html("<table class='list nowrap'>"); html("<tr><th class='left'>Date</th>" "<th class='left'>Message</th>" "<th class='left'>Author</th></tr>\n"); if (ofs<0) ofs = 0; for (i = 0; i < ofs && (commit = get_revision(&rev)) != NULL; i++) { free(commit->buffer); commit->buffer = NULL; free_commit_list(commit->parents); commit->parents = NULL; } for (i = 0; i < cnt && (commit = get_revision(&rev)) != NULL; i++) { print_commit(commit); free(commit->buffer); commit->buffer = NULL; free_commit_list(commit->parents); commit->parents = NULL; } html("</table>\n"); html("<div class='pager'>"); if (ofs > 0) { html(" <a href='"); html(cgit_pageurl(cgit_query_repo, cgit_query_page, fmt("h=%s&ofs=%d", tip, ofs-cnt))); html("'>[prev]</a> "); } if ((commit = get_revision(&rev)) != NULL) { html(" <a href='"); html(cgit_pageurl(cgit_query_repo, "log", fmt("h=%s&ofs=%d", tip, ofs+cnt))); html("'>[next]</a> "); } html("</div>"); } diff --git a/ui-summary.c b/ui-summary.c index 638c8f6..de95053 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -1,67 +1,67 @@ /* ui-summary.c: functions for generating repo summary page * * Copyright (C) 2006 Lars Hjemli * * Licensed under GNU General Public License v2 * (see COPYING for full license text) */ #include "cgit.h" static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, int flags, void *cb_data) { struct commit *commit; struct commitinfo *info; char buf[256], *url; commit = lookup_commit(sha1); if (commit && !parse_commit(commit)){ info = cgit_parse_commit(commit); html("<tr><td>"); url = cgit_pageurl(cgit_query_repo, "log", fmt("h=%s", refname)); html_link_open(url, NULL, NULL); strncpy(buf, refname, sizeof(buf)); html_txt(buf); html_link_close(); html("</td><td>"); cgit_print_date(commit->date); html("</td><td>"); url = cgit_pageurl(cgit_query_repo, "commit", fmt("id=%s", sha1_to_hex(sha1))); html_link_open(url, NULL, NULL); - html_txt(info->subject); + html_ntxt(80, info->subject); html_link_close(); html("</td><td>"); html_txt(info->author); html("</td></tr>\n"); cgit_free_commitinfo(info); } else { html("<tr><td>"); html_txt(buf); html("</td><td>"); htmlf("*** bad ref %s", sha1_to_hex(sha1)); html("</td></tr>\n"); } return 0; } static void cgit_print_branches() { - html("<table class='list'>"); + html("<table class='list nowrap'>"); html("<tr><th class='left'>Branch</th>" "<th class='left'>Updated</th>" "<th class='left'>Commit subject</th>" "<th class='left'>Author</th></tr>\n"); for_each_branch_ref(cgit_print_branch_cb, NULL); html("</table>"); } void cgit_print_summary() { html("<h2>"); html_txt("Repo summary page"); html("</h2>"); cgit_print_branches(); } |