about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--cgit.c8
-rw-r--r--cgit.css2
-rw-r--r--cgit.h2
-rw-r--r--cgit.pngbin1840 -> 1488 bytes
-rw-r--r--cgitrc.5.txt9
-rw-r--r--ui-diff.c12
-rw-r--r--ui-diff.h6
-rw-r--r--ui-shared.c18
-rw-r--r--ui-ssdiff.c34
9 files changed, 74 insertions, 17 deletions
diff --git a/cgit.c b/cgit.c index 71f3fc8..916feb4 100644 --- a/cgit.c +++ b/cgit.c
@@ -73,9 +73,13 @@ void repo_config(struct cgit_repo *repo, const char *name, const char *value)
73 repo->module_link= xstrdup(value); 73 repo->module_link= xstrdup(value);
74 else if (!strcmp(name, "section")) 74 else if (!strcmp(name, "section"))
75 repo->section = xstrdup(value); 75 repo->section = xstrdup(value);
76 else if (!strcmp(name, "readme") && value != NULL) { 76 else if (!strcmp(name, "readme") && value != NULL)
77 repo->readme = xstrdup(value); 77 repo->readme = xstrdup(value);
78 } else if (ctx.cfg.enable_filter_overrides) { 78 else if (!strcmp(name, "logo") && value != NULL)
79 repo->logo = xstrdup(value);
80 else if (!strcmp(name, "logo-link") && value != NULL)
81 repo->logo_link = xstrdup(value);
82 else if (ctx.cfg.enable_filter_overrides) {
79 if (!strcmp(name, "about-filter")) 83 if (!strcmp(name, "about-filter"))
80 repo->about_filter = new_filter(value, 0); 84 repo->about_filter = new_filter(value, 0);
81 else if (!strcmp(name, "commit-filter")) 85 else if (!strcmp(name, "commit-filter"))
diff --git a/cgit.css b/cgit.css index 008cff8..1d90057 100644 --- a/cgit.css +++ b/cgit.css
@@ -293,7 +293,7 @@ table.blob pre {
293 padding: 0; margin: 0; 293 padding: 0; margin: 0;
294} 294}
295 295
296table.blob a.no { 296table.blob a.no, table.ssdiff a.no {
297 color: gray; 297 color: gray;
298 text-align: right; 298 text-align: right;
299 text-decoration: none; 299 text-decoration: none;
diff --git a/cgit.h b/cgit.h index 74aa340..b5f00fc 100644 --- a/cgit.h +++ b/cgit.h
@@ -71,6 +71,8 @@ struct cgit_repo {
71 char *readme; 71 char *readme;
72 char *section; 72 char *section;
73 char *clone_url; 73 char *clone_url;
74 char *logo;
75 char *logo_link;
74 int snapshots; 76 int snapshots;
75 int enable_commit_graph; 77 int enable_commit_graph;
76 int enable_log_filecount; 78 int enable_log_filecount;
diff --git a/cgit.png b/cgit.png index d7f70bc..0bdf5a7 100644 --- a/cgit.png +++ b/cgit.png
Binary files differ
diff --git a/cgitrc.5.txt b/cgitrc.5.txt index a832830..c3698a6 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt
@@ -387,6 +387,15 @@ repo.enable-subject-links::
387 A flag which can be used to override the global setting 387 A flag which can be used to override the global setting
388 `enable-subject-links'. Default value: none. 388 `enable-subject-links'. Default value: none.
389 389
390repo.logo::
391 Url which specifies the source of an image which will be used as a logo
392 on this repo's pages. Default value: global logo.
393
394repo.logo-link::
395 Url loaded when clicking on the cgit logo image. If unspecified the
396 calculated url of the repository index page will be used. Default
397 value: global logo-link.
398
390repo.max-stats:: 399repo.max-stats::
391 Override the default maximum statistics period. Valid values are equal 400 Override the default maximum statistics period. Valid values are equal
392 to the values specified for the global "max-stats" setting. Default 401 to the values specified for the global "max-stats" setting. Default
diff --git a/ui-diff.c b/ui-diff.c index 7ff7e46..a53425d 100644 --- a/ui-diff.c +++ b/ui-diff.c
@@ -34,6 +34,17 @@ static struct fileinfo {
34} *items; 34} *items;
35 35
36static int use_ssdiff = 0; 36static int use_ssdiff = 0;
37static struct diff_filepair *current_filepair;
38
39struct diff_filespec *cgit_get_current_old_file(void)
40{
41 return current_filepair->one;
42}
43
44struct diff_filespec *cgit_get_current_new_file(void)
45{
46 return current_filepair->two;
47}
37 48
38static void print_fileinfo(struct fileinfo *info) 49static void print_fileinfo(struct fileinfo *info)
39{ 50{
@@ -284,6 +295,7 @@ static void filepair_cb(struct diff_filepair *pair)
284 int binary = 0; 295 int binary = 0;
285 linediff_fn print_line_fn = print_line; 296 linediff_fn print_line_fn = print_line;
286 297
298 current_filepair = pair;
287 if (use_ssdiff) { 299 if (use_ssdiff) {
288 cgit_ssdiff_header_begin(); 300 cgit_ssdiff_header_begin();
289 print_line_fn = cgit_ssdiff_line_cb; 301 print_line_fn = cgit_ssdiff_line_cb;
diff --git a/ui-diff.h b/ui-diff.h index 70b2926..12d0c62 100644 --- a/ui-diff.h +++ b/ui-diff.h
@@ -7,4 +7,10 @@ extern void cgit_print_diffstat(const unsigned char *old_sha1,
7extern void cgit_print_diff(const char *new_hex, const char *old_hex, 7extern void cgit_print_diff(const char *new_hex, const char *old_hex,
8 const char *prefix); 8 const char *prefix);
9 9
10extern struct diff_filespec *cgit_get_current_old_file(void);
11extern struct diff_filespec *cgit_get_current_new_file(void);
12
13extern unsigned char old_rev_sha1[20];
14extern unsigned char new_rev_sha1[20];
15
10#endif /* UI_DIFF_H */ 16#endif /* UI_DIFF_H */
diff --git a/ui-shared.c b/ui-shared.c index ae29615..7efae7a 100644 --- a/ui-shared.c +++ b/ui-shared.c
@@ -756,17 +756,27 @@ static void cgit_print_path_crumbs(struct cgit_context *ctx, char *path)
756 756
757static void print_header(struct cgit_context *ctx) 757static void print_header(struct cgit_context *ctx)
758{ 758{
759 char *logo = NULL, *logo_link = NULL;
760
759 html("<table id='header'>\n"); 761 html("<table id='header'>\n");
760 html("<tr>\n"); 762 html("<tr>\n");
761 763
762 if (ctx->cfg.logo && ctx->cfg.logo[0] != 0) { 764 if (ctx->repo && ctx->repo->logo && *ctx->repo->logo)
765 logo = ctx->repo->logo;
766 else
767 logo = ctx->cfg.logo;
768 if (ctx->repo && ctx->repo->logo_link && *ctx->repo->logo_link)
769 logo_link = ctx->repo->logo_link;
770 else
771 logo_link = ctx->cfg.logo_link;
772 if (logo && *logo) {
763 html("<td class='logo' rowspan='2'><a href='"); 773 html("<td class='logo' rowspan='2'><a href='");
764 if (ctx->cfg.logo_link) 774 if (logo_link && *logo_link)
765 html_attr(ctx->cfg.logo_link); 775 html_attr(logo_link);
766 else 776 else
767 html_attr(cgit_rooturl()); 777 html_attr(cgit_rooturl());
768 html("'><img src='"); 778 html("'><img src='");
769 html_attr(ctx->cfg.logo); 779 html_attr(logo);
770 html("' alt='cgit logo'/></a></td>\n"); 780 html("' alt='cgit logo'/></a></td>\n");
771 } 781 }
772 782
diff --git a/ui-ssdiff.c b/ui-ssdiff.c index 408e620..2481585 100644 --- a/ui-ssdiff.c +++ b/ui-ssdiff.c
@@ -1,6 +1,7 @@
1#include "cgit.h" 1#include "cgit.h"
2#include "html.h" 2#include "html.h"
3#include "ui-shared.h" 3#include "ui-shared.h"
4#include "ui-diff.h"
4 5
5extern int use_ssdiff; 6extern int use_ssdiff;
6 7
@@ -191,17 +192,24 @@ static void print_ssdiff_line(char *class,
191 char *new_line, int individual_chars) 192 char *new_line, int individual_chars)
192{ 193{
193 char *lcs = NULL; 194 char *lcs = NULL;
195
194 if (old_line) 196 if (old_line)
195 old_line = replace_tabs(old_line + 1); 197 old_line = replace_tabs(old_line + 1);
196 if (new_line) 198 if (new_line)
197 new_line = replace_tabs(new_line + 1); 199 new_line = replace_tabs(new_line + 1);
198 if (individual_chars && old_line && new_line) 200 if (individual_chars && old_line && new_line)
199 lcs = longest_common_subsequence(old_line, new_line); 201 lcs = longest_common_subsequence(old_line, new_line);
200 html("<tr>"); 202 html("<tr>\n");
201 if (old_line_no > 0) 203 if (old_line_no > 0) {
202 htmlf("<td class='lineno'>%d</td><td class='%s'>", 204 struct diff_filespec *old_file = cgit_get_current_old_file();
203 old_line_no, class); 205 char *lineno_str = fmt("n%d", old_line_no);
204 else if (old_line) 206 char *id_str = fmt("%s#%s", is_null_sha1(old_file->sha1)?"HEAD":sha1_to_hex(old_rev_sha1), lineno_str);
207 html("<td class='lineno'><a class='no' href='");
208 html(cgit_fileurl(ctx.repo->url, "tree", old_file->path, id_str));
209 htmlf("' id='%s' name='%s'>%s</a>", lineno_str, lineno_str, lineno_str + 1);
210 html("</td>");
211 htmlf("<td class='%s'>", class);
212 } else if (old_line)
205 htmlf("<td class='lineno'></td><td class='%s'>", class); 213 htmlf("<td class='lineno'></td><td class='%s'>", class);
206 else 214 else
207 htmlf("<td class='lineno'></td><td class='%s_dark'>", class); 215 htmlf("<td class='lineno'></td><td class='%s_dark'>", class);
@@ -212,11 +220,17 @@ static void print_ssdiff_line(char *class,
212 html_txt(old_line); 220 html_txt(old_line);
213 } 221 }
214 222
215 html("</td>"); 223 html("</td>\n");
216 if (new_line_no > 0) 224 if (new_line_no > 0) {
217 htmlf("<td class='lineno'>%d</td><td class='%s'>", 225 struct diff_filespec *new_file = cgit_get_current_new_file();
218 new_line_no, class); 226 char *lineno_str = fmt("n%d", new_line_no);
219 else if (new_line) 227 char *id_str = fmt("%s#%s", is_null_sha1(new_file->sha1)?"HEAD":sha1_to_hex(new_rev_sha1), lineno_str);
228 html("<td class='lineno'><a class='no' href='");
229 html(cgit_fileurl(ctx.repo->url, "tree", new_file->path, id_str));
230 htmlf("' id='%s' name='%s'>%s</a>", lineno_str, lineno_str, lineno_str + 1);
231 html("</td>");
232 htmlf("<td class='%s'>", class);
233 } else if (new_line)
220 htmlf("<td class='lineno'></td><td class='%s'>", class); 234 htmlf("<td class='lineno'></td><td class='%s'>", class);
221 else 235 else
222 htmlf("<td class='lineno'></td><td class='%s_dark'>", class); 236 htmlf("<td class='lineno'></td><td class='%s_dark'>", class);