From bebe89d7c11a92bf206bf6e528c51ffa8ecbc0d5 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Fri, 22 Jul 2011 13:47:19 +0200 Subject: [PATCH 01/16] Fix potential XSS vulnerability in rename hint The file name displayed in the rename hint should be escaped to avoid XSS. Note that this vulnerability is only applicable when an attacker has gained push access to the repository. Signed-off-by: Lukas Fleischer Signed-off-by: Lars Hjemli --- ui-diff.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ui-diff.c b/ui-diff.c index d21541b..383a534 100644 --- a/ui-diff.c +++ b/ui-diff.c @@ -97,10 +97,12 @@ static void print_fileinfo(struct fileinfo *info) htmlf("", class); cgit_diff_link(info->new_path, NULL, NULL, ctx.qry.head, ctx.qry.sha1, ctx.qry.sha2, info->new_path, 0); - if (info->status == DIFF_STATUS_COPIED || info->status == DIFF_STATUS_RENAMED) - htmlf(" (%s from %s)", - info->status == DIFF_STATUS_COPIED ? "copied" : "renamed", - info->old_path); + if (info->status == DIFF_STATUS_COPIED || info->status == DIFF_STATUS_RENAMED) { + htmlf(" (%s from ", + info->status == DIFF_STATUS_COPIED ? "copied" : "renamed"); + html_txt(info->old_path); + html(")"); + } html(""); if (info->binary) { htmlf("bin%ld -> %ld bytes", -- 2.50.1 From 8185169e5e2a8b9438c7a6f3f9c5eb6db5a37fea Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Fri, 22 Jul 2011 17:15:49 +0200 Subject: [PATCH 02/16] shared.c: Remove unused "linux/limits.h" include This isn't used anywhere and prevents the code from being compiled on other platforms, such as *BSD. Signed-off-by: Lukas Fleischer --- shared.c | 1 - 1 file changed, 1 deletion(-) diff --git a/shared.c b/shared.c index 699c362..75c4b5c 100644 --- a/shared.c +++ b/shared.c @@ -8,7 +8,6 @@ #include "cgit.h" #include -#include struct cgit_repolist cgit_repolist; struct cgit_context ctx; -- 2.50.1 From d96d2c98ebc4c2d3765f5b35c4142e0e828a421b Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Wed, 14 Sep 2011 11:52:43 +0200 Subject: [PATCH 03/16] shared.c: Only setenv() if value is non-null Some setenv() implementations (e.g. the one in OpenBSD's stdlib) segfault if we pass a NULL value. Only set environment variables if the corresponding settings are defined to avoid this. Note that this is a minor behaviour change as environment variables were supposed to be set to an empty string if a setting was undefined. Given that this feature isn't part of any official release yet, there's no need to worry about backwards compatibility, really. Change the documentation accordingly. Signed-off-by: Lukas Fleischer --- cgitrc.5.txt | 2 +- shared.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cgitrc.5.txt b/cgitrc.5.txt index 4721c1e..a22423b 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -500,7 +500,7 @@ Also, all filters are handed the following environment variables: If a setting is not defined for a repository and the corresponding global setting is also not defined (if applicable), then the corresponding -environment variable will be an empty string. +environment variable will be unset. MACRO EXPANSION diff --git a/shared.c b/shared.c index 75c4b5c..0c8ce3e 100644 --- a/shared.c +++ b/shared.c @@ -392,7 +392,7 @@ void cgit_prepare_repo_env(struct cgit_repo * repo) p = env_vars; q = p + env_var_count; for (; p < q; p++) - if (setenv(p->name, p->value, 1)) + if (p->value && setenv(p->name, p->value, 1)) fprintf(stderr, warn, p->name, p->value); } -- 2.50.1 From e19f7d7180d64c8ba9ca15f5fe164606f0ec88c1 Mon Sep 17 00:00:00 2001 From: Jamie Couture Date: Sat, 17 Sep 2011 18:25:01 -0400 Subject: [PATCH 04/16] ui-ssdiff: move LCS table away from the stack Printing deferred line changes for files containing long lines would cause a segfault. - limit LCS table size: 128x128. - move LCS table to global context: avoid allocating/freeing memory for every deferred line change. Signed-off-by: Jamie Couture --- ui-ssdiff.c | 33 +++++++++++++++++++++++++++++++-- ui-ssdiff.h | 12 ++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/ui-ssdiff.c b/ui-ssdiff.c index 2481585..9fb5b11 100644 --- a/ui-ssdiff.c +++ b/ui-ssdiff.c @@ -2,10 +2,12 @@ #include "html.h" #include "ui-shared.h" #include "ui-diff.h" +#include "ui-ssdiff.h" extern int use_ssdiff; static int current_old_line, current_new_line; +static int **L = NULL; struct deferred_lines { int line_no; @@ -16,16 +18,42 @@ struct deferred_lines { static struct deferred_lines *deferred_old, *deferred_old_last; static struct deferred_lines *deferred_new, *deferred_new_last; +static void create_or_reset_lcs_table() +{ + int i; + + if (L != NULL) { + memset(*L, 0, sizeof(*L) * MAX_SSDIFF_SIZE); + return; + } + + // xcalloc will die if we ran out of memory; + // not very helpful for debugging + L = (int**)xcalloc(MAX_SSDIFF_M, sizeof(int *)); + *L = (int*)xcalloc(MAX_SSDIFF_SIZE, sizeof(int)); + + for (i = 1; i < MAX_SSDIFF_M; i++) { + L[i] = *L + i * MAX_SSDIFF_N; + } +} + static char *longest_common_subsequence(char *A, char *B) { int i, j, ri; int m = strlen(A); int n = strlen(B); - int L[m + 1][n + 1]; - int tmp1, tmp2; + int tmp1, tmp2, length; int lcs_length; char *result; + length = (m + 1) * (n + 1); + + // We bail if the lines are too long + if (length > MAX_SSDIFF_SIZE) + return NULL; + + create_or_reset_lcs_table(); + for (i = m; i >= 0; i--) { for (j = n; j >= 0; j--) { if (A[i] == '\0' || B[j] == '\0') { @@ -59,6 +87,7 @@ static char *longest_common_subsequence(char *A, char *B) j += 1; } } + return result; } diff --git a/ui-ssdiff.h b/ui-ssdiff.h index 64b4b12..88627e2 100644 --- a/ui-ssdiff.h +++ b/ui-ssdiff.h @@ -1,6 +1,18 @@ #ifndef UI_SSDIFF_H #define UI_SSDIFF_H +/* + * ssdiff line limits + */ +#ifndef MAX_SSDIFF_M +#define MAX_SSDIFF_M 128 +#endif + +#ifndef MAX_SSDIFF_N +#define MAX_SSDIFF_N 128 +#endif +#define MAX_SSDIFF_SIZE ((MAX_SSDIFF_M) * (MAX_SSDIFF_N)) + extern void cgit_ssdiff_print_deferred_lines(); extern void cgit_ssdiff_line_cb(char *line, int len); -- 2.50.1 From 7530d94f05887b8065742adb614c368d8568a22c Mon Sep 17 00:00:00 2001 From: Tobias Grimm Date: Sun, 31 Jul 2011 02:44:05 +0200 Subject: [PATCH 05/16] Add sort parameter to pager of repo list When the repolist is paged, the page-links are missing the sort parameter, causing the initial page to be custom sorted, but any clicked page will then be with the default sort order again. --- ui-repolist.c | 6 +++--- ui-shared.c | 24 +++++++++++++++--------- ui-shared.h | 2 +- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/ui-repolist.c b/ui-repolist.c index e138f59..4b21e2f 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -109,13 +109,13 @@ void print_header(int columns) } -void print_pager(int items, int pagelen, char *search) +void print_pager(int items, int pagelen, char *search, char *sort) { int i; html("
"); for(i = 0; i * pagelen < items; i++) cgit_index_link(fmt("[%d]", i+1), fmt("Page %d", i+1), NULL, - search, i * pagelen); + search, sort, i * pagelen); html("
"); } @@ -282,7 +282,7 @@ void cgit_print_repolist() if (!hits) cgit_print_error("No repositories found"); else if (hits > ctx.cfg.max_repo_count) - print_pager(hits, ctx.cfg.max_repo_count, ctx.qry.search); + print_pager(hits, ctx.cfg.max_repo_count, ctx.qry.search, ctx.qry.sort); cgit_print_docend(); } diff --git a/ui-shared.c b/ui-shared.c index 5aa9119..85c2096 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -133,7 +133,7 @@ char *cgit_currurl() return fmt("%s/", ctx.cfg.virtual_root); } -static void site_url(const char *page, const char *search, int ofs) +static void site_url(const char *page, const char *search, const char *sort, int ofs) { char *delim = "?"; @@ -154,6 +154,12 @@ static void site_url(const char *page, const char *search, int ofs) html_attr(search); delim = "&"; } + if (sort) { + html(delim); + html("s="); + html_attr(sort); + delim = "&"; + } if (ofs) { html(delim); htmlf("ofs=%d", ofs); @@ -161,7 +167,7 @@ static void site_url(const char *page, const char *search, int ofs) } static void site_link(const char *page, const char *name, const char *title, - const char *class, const char *search, int ofs) + const char *class, const char *search, const char *sort, int ofs) { html(""); html_txt(name); html(""); } void cgit_index_link(const char *name, const char *title, const char *class, - const char *pattern, int ofs) + const char *pattern, const char *sort, int ofs) { - site_link(NULL, name, title, class, pattern, ofs); + site_link(NULL, name, title, class, pattern, sort, ofs); } static char *repolink(const char *title, const char *class, const char *page, @@ -428,7 +434,7 @@ void cgit_self_link(char *name, const char *title, const char *class, struct cgit_context *ctx) { if (!strcmp(ctx->qry.page, "repolist")) - return cgit_index_link(name, title, class, ctx->qry.search, + return cgit_index_link(name, title, class, ctx->qry.search, ctx->qry.sort, ctx->qry.ofs); else if (!strcmp(ctx->qry.page, "summary")) return cgit_summary_link(name, title, class, ctx->qry.head); @@ -782,7 +788,7 @@ static void print_header(struct cgit_context *ctx) html(""); if (ctx->repo) { - cgit_index_link("index", NULL, NULL, NULL, 0); + cgit_index_link("index", NULL, NULL, NULL, NULL, 0); html(" : "); cgit_summary_link(ctx->repo->name, ctx->repo->name, NULL, NULL); html(""); @@ -858,10 +864,10 @@ void cgit_print_pageheader(struct cgit_context *ctx) html("\n"); html("\n"); } else { - site_link(NULL, "index", NULL, hc(ctx, "repolist"), NULL, 0); + site_link(NULL, "index", NULL, hc(ctx, "repolist"), NULL, NULL, 0); if (ctx->cfg.root_readme) site_link("about", "about", NULL, hc(ctx, "about"), - NULL, 0); + NULL, NULL, 0); html(""); html("
Date: Tue, 3 Jan 2012 16:09:59 +0000 Subject: [PATCH 08/16] ui-ssdiff.c: set correct diffmode in "control panel" When side-by-side-diffs=1 was set in cgitrc, specifying 'ss=0' in the querystring would not set the 'unified' option as active in the dropdown box used to select diffmode. --- ui-diff.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ui-diff.c b/ui-diff.c index af24a6c..c6bad63 100644 --- a/ui-diff.c +++ b/ui-diff.c @@ -341,9 +341,7 @@ void cgit_print_diff_ctrls() html("mode:"); html(""); html(""); -- 2.50.1 From dad620ee56b9c7e1a3217eba7ee750c4aa8d7e71 Mon Sep 17 00:00:00 2001 From: Norberto Lopes Date: Tue, 22 Nov 2011 17:59:26 -0800 Subject: [PATCH 09/16] fix css color value and vertical-align value --- cgit.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cgit.css b/cgit.css index 1d90057..8f409c3 100644 --- a/cgit.css +++ b/cgit.css @@ -654,7 +654,7 @@ table.hgraph th { } table.hgraph td { - vertical-align: center; + vertical-align: middle; padding: 2px 2px; } @@ -731,7 +731,7 @@ table.ssdiff td.lineno { } table.ssdiff td.hunk { - color: #black; + color: black; background: #ccf; border-top: solid 1px #aaa; border-bottom: solid 1px #aaa; -- 2.50.1 From fbd254d54e28e002a0d56b81c192156599df1e6b Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Tue, 3 Jan 2012 16:43:33 +0000 Subject: [PATCH 10/16] Makefile: fetch git tarballs from http://hjemli.net/git/git/ The git tarballs are currently not available from kernel.org, so for now the makefile will download autogenerated tarballs from cgit. Signed-off-by: Lars Hjemli --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3ddd728..7836963 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ pdfdir = $(docdir) mandir = $(prefix)/share/man SHA1_HEADER = GIT_VER = 1.7.4 -GIT_URL = http://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.bz2 +GIT_URL = http://hjemli.net/git/git/snapshot/git-$(GIT_VER).tar.bz2 INSTALL = install MAN5_TXT = $(wildcard *.5.txt) MAN_TXT = $(MAN5_TXT) -- 2.50.1 From 94b7c76e531315b245f79a9e2dfd0655e6e45fee Mon Sep 17 00:00:00 2001 From: John Keeping Date: Thu, 24 Nov 2011 11:54:47 +0000 Subject: [PATCH 11/16] Fix segmentation fault in empty repository When a repository is empty, the ATOM feed link is written in the header, but this involves formatting ctx->qry.head which is NULL in this case. With glibc, vsnprintf formats "%s" with a NULL input as "(null)" but on Solaris this results in a segmentation fault. Since we don't have a meaningful head for the atom feed in an empty repository, it's simplest not to write out the link element at all. Signed-off-by: John Keeping --- ui-shared.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-shared.c b/ui-shared.c index 85c2096..3e9282f 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -619,7 +619,7 @@ void cgit_print_docstart(struct cgit_context *ctx) html_attr(ctx->cfg.favicon); html("'/>\n"); } - if (host && ctx->repo) { + if (host && ctx->repo && ctx->qry.head) { html(" --- ui-ssdiff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ssdiff.c b/ui-ssdiff.c index 45770b1..0cff4b8 100644 --- a/ui-ssdiff.c +++ b/ui-ssdiff.c @@ -23,7 +23,7 @@ static void create_or_reset_lcs_table() int i; if (L != NULL) { - memset(*L, 0, sizeof(*L) * MAX_SSDIFF_SIZE); + memset(*L, 0, sizeof(int) * MAX_SSDIFF_SIZE); return; } -- 2.50.1 From 21418ec42a9a2de4c2c22eca7a1183b311914eca Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 4 Jan 2012 09:01:51 +0000 Subject: [PATCH 14/16] segfault fix on some bogus requests ctx.qry.head can be NULL in some cases due to bad requests by weird bots. I managed to reproduce with: PATH_INFO=/repo.git/shop.php QUERY_STRING=id= Signed-off-by: Eric Wong --- ui-shared.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui-shared.c b/ui-shared.c index 3e9282f..d7d75bf 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -294,7 +294,7 @@ void cgit_log_link(const char *name, const char *title, const char *class, char *delim; delim = repolink(title, class, "log", head, path); - if (rev && strcmp(rev, ctx.qry.head)) { + if (rev && ctx.qry.head && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_url_arg(rev); @@ -338,7 +338,7 @@ void cgit_commit_link(char *name, const char *title, const char *class, char *delim; delim = repolink(title, class, "commit", head, path); - if (rev && strcmp(rev, ctx.qry.head)) { + if (rev && ctx.qry.head && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_url_arg(rev); -- 2.50.1 From e032761a5ebc3372ab0abd0c9bcd8436d89485ae Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Sun, 18 Mar 2012 10:16:27 +0000 Subject: [PATCH 15/16] CGIT-0.9.0.3 Signed-off-by: Lars Hjemli --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7836963..6de072a 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -CGIT_VERSION = v0.9.0.2 +CGIT_VERSION = v0.9.0.3 CGIT_SCRIPT_NAME = cgit.cgi CGIT_SCRIPT_PATH = /var/www/htdocs/cgit CGIT_DATA_PATH = $(CGIT_SCRIPT_PATH) -- 2.50.1 From add1ccb1d805e9472483e49c3ce55a2e30bf5aae Mon Sep 17 00:00:00 2001 From: Ferry Huberts Date: Sun, 18 Mar 2012 11:44:03 +0100 Subject: [PATCH 16/16] css: prefix all styles with div#cgit to facilitate easier embedding Signed-off-by: Ferry Huberts --- cgit.css | 338 +++++++++++++++++++++++++++---------------------------- 1 file changed, 169 insertions(+), 169 deletions(-) diff --git a/cgit.css b/cgit.css index 3734ca7..37872e5 100644 --- a/cgit.css +++ b/cgit.css @@ -1,4 +1,4 @@ -body, table, form { +body, div#cgit table, div#cgit form { padding: 0em; margin: 0em; } @@ -11,39 +11,39 @@ body { padding: 4px; } -a { +div#cgit a { color: blue; text-decoration: none; } -a:hover { +div#cgit a:hover { text-decoration: underline; } -table { +div#cgit table { border-collapse: collapse; } -table#header { +div#cgit table#header { width: 100%; margin-bottom: 1em; } -table#header td.logo { +div#cgit table#header td.logo { width: 96px; } -table#header td.main { +div#cgit table#header td.main { font-size: 250%; padding-left: 10px; white-space: nowrap; } -table#header td.main a { +div#cgit table#header td.main a { color: #000; } -table#header td.form { +div#cgit table#header td.form { text-align: right; vertical-align: bottom; padding-right: 1em; @@ -51,19 +51,19 @@ table#header td.form { white-space: nowrap; } -table#header td.form form, -table#header td.form input, -table#header td.form select { +div#cgit table#header td.form form, +div#cgit table#header td.form input, +div#cgit table#header td.form select { font-size: 90%; } -table#header td.sub { +div#cgit table#header td.sub { color: #777; border-top: solid 1px #ccc; padding-left: 10px; } -table.tabs { +div#cgit table.tabs { border-bottom: solid 3px #ccc; border-collapse: collapse; margin-top: 2em; @@ -71,74 +71,74 @@ table.tabs { width: 100%; } -table.tabs td { +div#cgit table.tabs td { padding: 0px 1em; vertical-align: bottom; } -table.tabs td a { +div#cgit table.tabs td a { padding: 2px 0.75em; color: #777; font-size: 110%; } -table.tabs td a.active { +div#cgit table.tabs td a.active { color: #000; background-color: #ccc; } -table.tabs td.form { +div#cgit table.tabs td.form { text-align: right; } -table.tabs td.form form { +div#cgit table.tabs td.form form { padding-bottom: 2px; font-size: 90%; white-space: nowrap; } -table.tabs td.form input, -table.tabs td.form select { +div#cgit table.tabs td.form input, +div#cgit table.tabs td.form select { font-size: 90%; } -div.path { +div#cgit div.path { margin: 0px; padding: 5px 2em 2px 2em; color: #000; background-color: #eee; } -div.content { +div#cgit div.content { margin: 0px; padding: 2em; border-bottom: solid 3px #ccc; } -table.list { +div#cgit table.list { width: 100%; border: none; border-collapse: collapse; } -table.list tr { +div#cgit table.list tr { background: white; } -table.list tr.logheader { +div#cgit table.list tr.logheader { background: #eee; } -table.list tr:hover { +div#cgit table.list tr:hover { background: #eee; } -table.list tr.nohover:hover { +div#cgit table.list tr.nohover:hover { background: white; } -table.list th { +div#cgit table.list th { font-weight: bold; /* color: #888; border-top: dashed 1px #888; @@ -148,93 +148,93 @@ table.list th { vertical-align: baseline; } -table.list td { +div#cgit table.list td { border: none; padding: 0.1em 0.5em 0.1em 0.5em; } -table.list td.commitgraph { +div#cgit table.list td.commitgraph { font-family: monospace; white-space: pre; } -table.list td.commitgraph .column1 { +div#cgit table.list td.commitgraph .column1 { color: #a00; } -table.list td.commitgraph .column2 { +div#cgit table.list td.commitgraph .column2 { color: #0a0; } -table.list td.commitgraph .column3 { +div#cgit table.list td.commitgraph .column3 { color: #aa0; } -table.list td.commitgraph .column4 { +div#cgit table.list td.commitgraph .column4 { color: #00a; } -table.list td.commitgraph .column5 { +div#cgit table.list td.commitgraph .column5 { color: #a0a; } -table.list td.commitgraph .column6 { +div#cgit table.list td.commitgraph .column6 { color: #0aa; } -table.list td.logsubject { +div#cgit table.list td.logsubject { font-family: monospace; font-weight: bold; } -table.list td.logmsg { +div#cgit table.list td.logmsg { font-family: monospace; white-space: pre; padding: 0 0.5em; } -table.list td a { +div#cgit table.list td a { color: black; } -table.list td a.ls-dir { +div#cgit table.list td a.ls-dir { font-weight: bold; color: #00f; } -table.list td a:hover { +div#cgit table.list td a:hover { color: #00f; } -img { +div#cgit img { border: none; } -input#switch-btn { +div#cgit input#switch-btn { margin: 2px 0px 0px 0px; } -td#sidebar input.txt { +div#cgit td#sidebar input.txt { width: 100%; margin: 2px 0px 0px 0px; } -table#grid { +div#cgit table#grid { margin: 0px; } -td#content { +div#cgit td#content { vertical-align: top; padding: 1em 2em 1em 1em; border: none; } -div#summary { +div#cgit div#summary { vertical-align: top; margin-bottom: 1em; } -table#downloads { +div#cgit table#downloads { float: right; border-collapse: collapse; border: solid 1px #777; @@ -242,152 +242,152 @@ table#downloads { margin-bottom: 0.5em; } -table#downloads th { +div#cgit table#downloads th { background-color: #ccc; } -div#blob { +div#cgit div#blob { border: solid 1px black; } -div.error { +div#cgit div.error { color: red; font-weight: bold; margin: 1em 2em; } -a.ls-blob, a.ls-dir, a.ls-mod { +div#cgit a.ls-blob, div#cgit a.ls-dir, div#cgit a.ls-mod { font-family: monospace; } -td.ls-size { +div#cgit td.ls-size { text-align: right; font-family: monospace; width: 10em; } -td.ls-mode { +div#cgit td.ls-mode { font-family: monospace; width: 10em; } -table.blob { +div#cgit table.blob { margin-top: 0.5em; border-top: solid 1px black; } -table.blob td.lines { +div#cgit table.blob td.lines { margin: 0; padding: 0 0 0 0.5em; vertical-align: top; color: black; } -table.blob td.linenumbers { +div#cgit table.blob td.linenumbers { margin: 0; padding: 0 0.5em 0 0.5em; vertical-align: top; text-align: right; border-right: 1px solid gray; } -table.blob pre { +div#cgit table.blob pre { padding: 0; margin: 0; } -table.blob a.no, table.ssdiff a.no { +div#cgit table.blob a.no, div#cgit table.ssdiff a.no { color: gray; text-align: right; text-decoration: none; } -table.blob a.no a:hover { +div#cgit table.blob a.no a:hover { color: black; } -table.bin-blob { +div#cgit table.bin-blob { margin-top: 0.5em; border: solid 1px black; } -table.bin-blob th { +div#cgit table.bin-blob th { font-family: monospace; white-space: pre; border: solid 1px #777; padding: 0.5em 1em; } -table.bin-blob td { +div#cgit table.bin-blob td { font-family: monospace; white-space: pre; border-left: solid 1px #777; padding: 0em 1em; } -table.nowrap td { +div#cgit table.nowrap td { white-space: nowrap; } -table.commit-info { +div#cgit table.commit-info { border-collapse: collapse; margin-top: 1.5em; } -div.cgit-panel { +div#cgit div.cgit-panel { float: right; margin-top: 1.5em; } -div.cgit-panel table { +div#cgit div.cgit-panel table { border-collapse: collapse; border: solid 1px #aaa; background-color: #eee; } -div.cgit-panel th { +div#cgit div.cgit-panel th { text-align: center; } -div.cgit-panel td { +div#cgit div.cgit-panel td { padding: 0.25em 0.5em; } -div.cgit-panel td.label { +div#cgit div.cgit-panel td.label { padding-right: 0.5em; } -div.cgit-panel td.ctrl { +div#cgit div.cgit-panel td.ctrl { padding-left: 0.5em; } -table.commit-info th { +div#cgit table.commit-info th { text-align: left; font-weight: normal; padding: 0.1em 1em 0.1em 0.1em; vertical-align: top; } -table.commit-info td { +div#cgit table.commit-info td { font-weight: normal; padding: 0.1em 1em 0.1em 0.1em; } -div.commit-subject { +div#cgit div.commit-subject { font-weight: bold; font-size: 125%; margin: 1.5em 0em 0.5em 0em; padding: 0em; } -div.commit-msg { +div#cgit div.commit-msg { white-space: pre; font-family: monospace; } -div.notes-header { +div#cgit div.notes-header { font-weight: bold; padding-top: 1.5em; } -div.notes { +div#cgit div.notes { white-space: pre; font-family: monospace; border: solid 1px #ee9; @@ -396,22 +396,22 @@ div.notes { float: left; } -div.notes-footer { +div#cgit div.notes-footer { clear: left; } -div.diffstat-header { +div#cgit div.diffstat-header { font-weight: bold; padding-top: 1.5em; } -table.diffstat { +div#cgit table.diffstat { border-collapse: collapse; border: solid 1px #aaa; background-color: #eee; } -table.diffstat th { +div#cgit table.diffstat th { font-weight: normal; text-align: left; text-decoration: underline; @@ -419,282 +419,282 @@ table.diffstat th { font-size: 100%; } -table.diffstat td { +div#cgit table.diffstat td { padding: 0.2em 0.2em 0.1em 0.1em; font-size: 100%; border: none; } -table.diffstat td.mode { +div#cgit table.diffstat td.mode { white-space: nowrap; } -table.diffstat td span.modechange { +div#cgit table.diffstat td span.modechange { padding-left: 1em; color: red; } -table.diffstat td.add a { +div#cgit table.diffstat td.add a { color: green; } -table.diffstat td.del a { +div#cgit table.diffstat td.del a { color: red; } -table.diffstat td.upd a { +div#cgit table.diffstat td.upd a { color: blue; } -table.diffstat td.graph { +div#cgit table.diffstat td.graph { width: 500px; vertical-align: middle; } -table.diffstat td.graph table { +div#cgit table.diffstat td.graph table { border: none; } -table.diffstat td.graph td { +div#cgit table.diffstat td.graph td { padding: 0px; border: 0px; height: 7pt; } -table.diffstat td.graph td.add { +div#cgit table.diffstat td.graph td.add { background-color: #5c5; } -table.diffstat td.graph td.rem { +div#cgit table.diffstat td.graph td.rem { background-color: #c55; } -div.diffstat-summary { +div#cgit div.diffstat-summary { color: #888; padding-top: 0.5em; } -table.diff { +div#cgit table.diff { width: 100%; } -table.diff td { +div#cgit table.diff td { font-family: monospace; white-space: pre; } -table.diff td div.head { +div#cgit table.diff td div.head { font-weight: bold; margin-top: 1em; color: black; } -table.diff td div.hunk { +div#cgit table.diff td div.hunk { color: #009; } -table.diff td div.add { +div#cgit table.diff td div.add { color: green; } -table.diff td div.del { +div#cgit table.diff td div.del { color: red; } -.sha1 { +div#cgit .sha1 { font-family: monospace; font-size: 90%; } -.left { +div#cgit .left { text-align: left; } -.right { +div#cgit .right { text-align: right; } -table.list td.reposection { +div#cgit table.list td.reposection { font-style: italic; color: #888; } -a.button { +div#cgit a.button { font-size: 80%; padding: 0em 0.5em; } -a.primary { +div#cgit a.primary { font-size: 100%; } -a.secondary { +div#cgit a.secondary { font-size: 90%; } -td.toplevel-repo { +div#cgit td.toplevel-repo { } -table.list td.sublevel-repo { +div#cgit table.list td.sublevel-repo { padding-left: 1.5em; } -div.pager { +div#cgit div.pager { text-align: center; margin: 1em 0em 0em 0em; } -div.pager a { +div#cgit div.pager a { color: #777; margin: 0em 0.5em; } -span.age-mins { +div#cgit span.age-mins { font-weight: bold; color: #080; } -span.age-hours { +div#cgit span.age-hours { color: #080; } -span.age-days { +div#cgit span.age-days { color: #040; } -span.age-weeks { +div#cgit span.age-weeks { color: #444; } -span.age-months { +div#cgit span.age-months { color: #888; } -span.age-years { +div#cgit span.age-years { color: #bbb; } -div.footer { +div#cgit div.footer { margin-top: 0.5em; text-align: center; font-size: 80%; color: #ccc; } -a.branch-deco { +div#cgit a.branch-deco { margin: 0px 0.5em; padding: 0px 0.25em; background-color: #88ff88; border: solid 1px #007700; } -a.tag-deco { +div#cgit a.tag-deco { margin: 0px 0.5em; padding: 0px 0.25em; background-color: #ffff88; border: solid 1px #777700; } -a.remote-deco { +div#cgit a.remote-deco { margin: 0px 0.5em; padding: 0px 0.25em; background-color: #ccccff; border: solid 1px #000077; } -a.deco { +div#cgit a.deco { margin: 0px 0.5em; padding: 0px 0.25em; background-color: #ff8888; border: solid 1px #770000; } -div.commit-subject a.branch-deco, -div.commit-subject a.tag-deco, -div.commit-subject a.remote-deco, -div.commit-subject a.deco { +div#cgit div.commit-subject a.branch-deco, +div#cgit div.commit-subject a.tag-deco, +div#cgit div.commit-subject a.remote-deco, +div#cgit div.commit-subject a.deco { margin-left: 1em; font-size: 75%; } -table.stats { +div#cgit table.stats { border: solid 1px black; border-collapse: collapse; } -table.stats th { +div#cgit table.stats th { text-align: left; padding: 1px 0.5em; background-color: #eee; border: solid 1px black; } -table.stats td { +div#cgit table.stats td { text-align: right; padding: 1px 0.5em; border: solid 1px black; } -table.stats td.total { +div#cgit table.stats td.total { font-weight: bold; text-align: left; } -table.stats td.sum { +div#cgit table.stats td.sum { color: #c00; font-weight: bold; /* background-color: #eee; */ } -table.stats td.left { +div#cgit table.stats td.left { text-align: left; } -table.vgraph { +div#cgit table.vgraph { border-collapse: separate; border: solid 1px black; height: 200px; } -table.vgraph th { +div#cgit table.vgraph th { background-color: #eee; font-weight: bold; border: solid 1px white; padding: 1px 0.5em; } -table.vgraph td { +div#cgit table.vgraph td { vertical-align: bottom; padding: 0px 10px; } -table.vgraph div.bar { +div#cgit table.vgraph div.bar { background-color: #eee; } -table.hgraph { +div#cgit table.hgraph { border: solid 1px black; width: 800px; } -table.hgraph th { +div#cgit table.hgraph th { background-color: #eee; font-weight: bold; border: solid 1px black; padding: 1px 0.5em; } -table.hgraph td { +div#cgit table.hgraph td { vertical-align: middle; padding: 2px 2px; } -table.hgraph div.bar { +div#cgit table.hgraph div.bar { background-color: #eee; height: 1em; } -table.ssdiff { +div#cgit table.ssdiff { width: 100%; } -table.ssdiff td { +div#cgit table.ssdiff td { font-size: 75%; font-family: monospace; white-space: pre; @@ -703,53 +703,53 @@ table.ssdiff td { border-right: solid 1px #aaa; } -table.ssdiff td.add { +div#cgit table.ssdiff td.add { color: black; background: #cfc; min-width: 50%; } -table.ssdiff td.add_dark { +div#cgit table.ssdiff td.add_dark { color: black; background: #aca; min-width: 50%; } -table.ssdiff span.add { +div#cgit table.ssdiff span.add { background: #cfc; font-weight: bold; } -table.ssdiff td.del { +div#cgit table.ssdiff td.del { color: black; background: #fcc; min-width: 50%; } -table.ssdiff td.del_dark { +div#cgit table.ssdiff td.del_dark { color: black; background: #caa; min-width: 50%; } -table.ssdiff span.del { +div#cgit table.ssdiff span.del { background: #fcc; font-weight: bold; } -table.ssdiff td.changed { +div#cgit table.ssdiff td.changed { color: black; background: #ffc; min-width: 50%; } -table.ssdiff td.changed_dark { +div#cgit table.ssdiff td.changed_dark { color: black; background: #cca; min-width: 50%; } -table.ssdiff td.lineno { +div#cgit table.ssdiff td.lineno { color: black; background: #eee; text-align: right; @@ -757,48 +757,48 @@ table.ssdiff td.lineno { min-width: 3em; } -table.ssdiff td.hunk { +div#cgit table.ssdiff td.hunk { color: black; background: #ccf; border-top: solid 1px #aaa; border-bottom: solid 1px #aaa; } -table.ssdiff td.head { +div#cgit table.ssdiff td.head { border-top: solid 1px #aaa; border-bottom: solid 1px #aaa; } -table.ssdiff td.head div.head { +div#cgit table.ssdiff td.head div.head { font-weight: bold; color: black; } -table.ssdiff td.foot { +div#cgit table.ssdiff td.foot { border-top: solid 1px #aaa; border-left: none; border-right: none; border-bottom: none; } -table.ssdiff td.space { +div#cgit table.ssdiff td.space { border: none; } -table.ssdiff td.space div { +div#cgit table.ssdiff td.space div { min-height: 3em; } /* Syntax highlighting */ -table.blob .num { color:#2928ff; } -table.blob .esc { color:#ff00ff; } -table.blob .str { color:#ff0000; } -table.blob .dstr { color:#818100; } -table.blob .slc { color:#838183; font-style:italic; } -table.blob .com { color:#838183; font-style:italic; } -table.blob .dir { color:#008200; } -table.blob .sym { color:#000000; } -table.blob .kwa { color:#000000; font-weight:bold; } -table.blob .kwb { color:#830000; } -table.blob .kwc { color:#000000; font-weight:bold; } -table.blob .kwd { color:#010181; } +div#cgit table.blob .num { color:#2928ff; } +div#cgit table.blob .esc { color:#ff00ff; } +div#cgit table.blob .str { color:#ff0000; } +div#cgit table.blob .dstr { color:#818100; } +div#cgit table.blob .slc { color:#838183; font-style:italic; } +div#cgit table.blob .com { color:#838183; font-style:italic; } +div#cgit table.blob .dir { color:#008200; } +div#cgit table.blob .sym { color:#000000; } +div#cgit table.blob .kwa { color:#000000; font-weight:bold; } +div#cgit table.blob .kwb { color:#830000; } +div#cgit table.blob .kwc { color:#000000; font-weight:bold; } +div#cgit table.blob .kwd { color:#010181; } -- 2.50.1