diff options
-rw-r--r-- | .gitignore | 5 | ||||
-rw-r--r-- | Makefile | 21 | ||||
-rw-r--r-- | cgit-doc.css | 3 | ||||
-rw-r--r-- | cgit.c | 2 | ||||
-rw-r--r-- | cgit.h | 2 | ||||
-rw-r--r-- | cgitrc.5.txt | 114 | ||||
-rw-r--r-- | ui-atom.c | 6 | ||||
-rw-r--r-- | ui-blob.c | 8 | ||||
-rw-r--r-- | ui-plain.c | 5 | ||||
-rw-r--r-- | ui-shared.c | 16 | ||||
-rw-r--r-- | ui-shared.h | 1 | ||||
-rw-r--r-- | ui-snapshot.c | 23 | ||||
-rw-r--r-- | ui-tree.c | 13 |
13 files changed, 144 insertions, 75 deletions
@@ -2,5 +2,10 @@ | |||
2 | cgit | 2 | cgit |
3 | cgit.conf | 3 | cgit.conf |
4 | VERSION | 4 | VERSION |
5 | cgitrc.5 | ||
6 | cgitrc.5.fo | ||
7 | cgitrc.5.html | ||
8 | cgitrc.5.pdf | ||
9 | cgitrc.5.xml | ||
5 | *.o | 10 | *.o |
6 | *.d | 11 | *.d |
@@ -1,4 +1,4 @@ | |||
1 | CGIT_VERSION = v0.8.2 | 1 | CGIT_VERSION = v0.8.2.1 |
2 | CGIT_SCRIPT_NAME = cgit.cgi | 2 | CGIT_SCRIPT_NAME = cgit.cgi |
3 | CGIT_SCRIPT_PATH = /var/www/htdocs/cgit | 3 | CGIT_SCRIPT_PATH = /var/www/htdocs/cgit |
4 | CGIT_DATA_PATH = $(CGIT_SCRIPT_PATH) | 4 | CGIT_DATA_PATH = $(CGIT_SCRIPT_PATH) |
@@ -100,7 +100,8 @@ ifdef NEEDS_LIBICONV | |||
100 | endif | 100 | endif |
101 | 101 | ||
102 | 102 | ||
103 | .PHONY: all libgit test install uninstall clean force-version get-git | 103 | .PHONY: all libgit test install uninstall clean force-version get-git \ |
104 | doc man-doc html-doc clean-doc | ||
104 | 105 | ||
105 | all: cgit | 106 | all: cgit |
106 | 107 | ||
@@ -149,8 +150,22 @@ uninstall: | |||
149 | rm -f $(CGIT_DATA_PATH)/cgit.css | 150 | rm -f $(CGIT_DATA_PATH)/cgit.css |
150 | rm -f $(CGIT_DATA_PATH)/cgit.png | 151 | rm -f $(CGIT_DATA_PATH)/cgit.png |
151 | 152 | ||
152 | clean: | 153 | doc: man-doc html-doc pdf-doc |
154 | |||
155 | man-doc: cgitrc.5.txt | ||
156 | a2x -f manpage cgitrc.5.txt | ||
157 | |||
158 | html-doc: cgitrc.5.txt | ||
159 | a2x -f xhtml --stylesheet=cgit-doc.css cgitrc.5.txt | ||
160 | |||
161 | pdf-doc: cgitrc.5.txt | ||
162 | a2x -f pdf cgitrc.5.txt | ||
163 | |||
164 | clean: clean-doc | ||
153 | rm -f cgit VERSION *.o *.d | 165 | rm -f cgit VERSION *.o *.d |
154 | 166 | ||
167 | clean-doc: | ||
168 | rm -f cgitrc.5 cgitrc.5.html cgitrc.5.pdf cgitrc.5.xml cgitrc.5.fo | ||
169 | |||
155 | get-git: | 170 | get-git: |
156 | curl $(GIT_URL) | tar -xj && rm -rf git && mv git-$(GIT_VER) git | 171 | curl $(GIT_URL) | tar -xj && rm -rf git && mv git-$(GIT_VER) git |
diff --git a/cgit-doc.css b/cgit-doc.css new file mode 100644 index 0000000..5a399b6 --- /dev/null +++ b/cgit-doc.css | |||
@@ -0,0 +1,3 @@ | |||
1 | div.variablelist dt { | ||
2 | margin-top: 1em; | ||
3 | } | ||
@@ -286,6 +286,8 @@ static int prepare_repo_cmd(struct cgit_context *ctx) | |||
286 | if (get_sha1(ctx->qry.head, sha1)) { | 286 | if (get_sha1(ctx->qry.head, sha1)) { |
287 | tmp = xstrdup(ctx->qry.head); | 287 | tmp = xstrdup(ctx->qry.head); |
288 | ctx->qry.head = ctx->repo->defbranch; | 288 | ctx->qry.head = ctx->repo->defbranch; |
289 | ctx->page.status = 404; | ||
290 | ctx->page.statusmsg = "not found"; | ||
289 | cgit_print_http_headers(ctx); | 291 | cgit_print_http_headers(ctx); |
290 | cgit_print_docstart(ctx); | 292 | cgit_print_docstart(ctx); |
291 | cgit_print_pageheader(ctx); | 293 | cgit_print_pageheader(ctx); |
@@ -182,6 +182,8 @@ struct cgit_page { | |||
182 | char *filename; | 182 | char *filename; |
183 | char *etag; | 183 | char *etag; |
184 | char *title; | 184 | char *title; |
185 | int status; | ||
186 | char *statusmsg; | ||
185 | }; | 187 | }; |
186 | 188 | ||
187 | struct cgit_context { | 189 | struct cgit_context { |
diff --git a/cgitrc.5.txt b/cgitrc.5.txt index fd299ae..7879f75 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt | |||
@@ -1,14 +1,14 @@ | |||
1 | CGITRC | 1 | CGITRC(5) |
2 | ====== | 2 | ======== |
3 | 3 | ||
4 | 4 | ||
5 | NAME | 5 | NAME |
6 | ---- | 6 | ---- |
7 | cgitrc - runtime configuration for cgit | 7 | cgitrc - runtime configuration for cgit |
8 | 8 | ||
9 | 9 | ||
10 | DESCRIPTION | 10 | SYNOPSIS |
11 | ----------- | 11 | -------- |
12 | Cgitrc contains all runtime settings for cgit, including the list of git | 12 | Cgitrc contains all runtime settings for cgit, including the list of git |
13 | repositories, formatted as a line-separated list of NAME=VALUE pairs. Blank | 13 | repositories, formatted as a line-separated list of NAME=VALUE pairs. Blank |
14 | lines, and lines starting with '#', are ignored. | 14 | lines, and lines starting with '#', are ignored. |
@@ -16,166 +16,166 @@ lines, and lines starting with '#', are ignored. | |||
16 | 16 | ||
17 | GLOBAL SETTINGS | 17 | GLOBAL SETTINGS |
18 | --------------- | 18 | --------------- |
19 | agefile | 19 | agefile:: |
20 | Specifies a path, relative to each repository path, which can be used | 20 | Specifies a path, relative to each repository path, which can be used |
21 | to specify the date and time of the youngest commit in the repository. | 21 | to specify the date and time of the youngest commit in the repository. |
22 | The first line in the file is used as input to the "parse_date" | 22 | The first line in the file is used as input to the "parse_date" |
23 | function in libgit. Recommended timestamp-format is "yyyy-mm-dd | 23 | function in libgit. Recommended timestamp-format is "yyyy-mm-dd |
24 | hh:mm:ss". Default value: "info/web/last-modified". | 24 | hh:mm:ss". Default value: "info/web/last-modified". |
25 | 25 | ||
26 | cache-root | 26 | cache-root:: |
27 | Path used to store the cgit cache entries. Default value: | 27 | Path used to store the cgit cache entries. Default value: |
28 | "/var/cache/cgit". | 28 | "/var/cache/cgit". |
29 | 29 | ||
30 | cache-dynamic-ttl | 30 | cache-dynamic-ttl:: |
31 | Number which specifies the time-to-live, in minutes, for the cached | 31 | Number which specifies the time-to-live, in minutes, for the cached |
32 | version of repository pages accessed without a fixed SHA1. Default | 32 | version of repository pages accessed without a fixed SHA1. Default |
33 | value: "5". | 33 | value: "5". |
34 | 34 | ||
35 | cache-repo-ttl | 35 | cache-repo-ttl:: |
36 | Number which specifies the time-to-live, in minutes, for the cached | 36 | Number which specifies the time-to-live, in minutes, for the cached |
37 | version of the repository summary page. Default value: "5". | 37 | version of the repository summary page. Default value: "5". |
38 | 38 | ||
39 | cache-root-ttl | 39 | cache-root-ttl:: |
40 | Number which specifies the time-to-live, in minutes, for the cached | 40 | Number which specifies the time-to-live, in minutes, for the cached |
41 | version of the repository index page. Default value: "5". | 41 | version of the repository index page. Default value: "5". |
42 | 42 | ||
43 | cache-size | 43 | cache-size:: |
44 | The maximum number of entries in the cgit cache. Default value: "0" | 44 | The maximum number of entries in the cgit cache. Default value: "0" |
45 | (i.e. caching is disabled). | 45 | (i.e. caching is disabled). |
46 | 46 | ||
47 | cache-static-ttl | 47 | cache-static-ttl:: |
48 | Number which specifies the time-to-live, in minutes, for the cached | 48 | Number which specifies the time-to-live, in minutes, for the cached |
49 | version of repository pages accessed with a fixed SHA1. Default value: | 49 | version of repository pages accessed with a fixed SHA1. Default value: |
50 | "5". | 50 | "5". |
51 | 51 | ||
52 | clone-prefix | 52 | clone-prefix:: |
53 | Space-separated list of common prefixes which, when combined with a | 53 | Space-separated list of common prefixes which, when combined with a |
54 | repository url, generates valid clone urls for the repository. This | 54 | repository url, generates valid clone urls for the repository. This |
55 | setting is only used if `repo.clone-url` is unspecified. Default value: | 55 | setting is only used if `repo.clone-url` is unspecified. Default value: |
56 | none. | 56 | none. |
57 | 57 | ||
58 | css | 58 | css:: |
59 | Url which specifies the css document to include in all cgit pages. | 59 | Url which specifies the css document to include in all cgit pages. |
60 | Default value: "/cgit.css". | 60 | Default value: "/cgit.css". |
61 | 61 | ||
62 | enable-index-links | 62 | enable-index-links:: |
63 | Flag which, when set to "1", will make cgit generate extra links for | 63 | Flag which, when set to "1", will make cgit generate extra links for |
64 | each repo in the repository index (specifically, to the "summary", | 64 | each repo in the repository index (specifically, to the "summary", |
65 | "commit" and "tree" pages). Default value: "0". | 65 | "commit" and "tree" pages). Default value: "0". |
66 | 66 | ||
67 | enable-log-filecount | 67 | enable-log-filecount:: |
68 | Flag which, when set to "1", will make cgit print the number of | 68 | Flag which, when set to "1", will make cgit print the number of |
69 | modified files for each commit on the repository log page. Default | 69 | modified files for each commit on the repository log page. Default |
70 | value: "0". | 70 | value: "0". |
71 | 71 | ||
72 | enable-log-linecount | 72 | enable-log-linecount:: |
73 | Flag which, when set to "1", will make cgit print the number of added | 73 | Flag which, when set to "1", will make cgit print the number of added |
74 | and removed lines for each commit on the repository log page. Default | 74 | and removed lines for each commit on the repository log page. Default |
75 | value: "0". | 75 | value: "0". |
76 | 76 | ||
77 | favicon | 77 | favicon:: |
78 | Url used as link to a shortcut icon for cgit. If specified, it is | 78 | Url used as link to a shortcut icon for cgit. If specified, it is |
79 | suggested to use the value "/favicon.ico" since certain browsers will | 79 | suggested to use the value "/favicon.ico" since certain browsers will |
80 | ignore other values. Default value: none. | 80 | ignore other values. Default value: none. |
81 | 81 | ||
82 | footer | 82 | footer:: |
83 | The content of the file specified with this option will be included | 83 | The content of the file specified with this option will be included |
84 | verbatim at the bottom of all pages (i.e. it replaces the standard | 84 | verbatim at the bottom of all pages (i.e. it replaces the standard |
85 | "generated by..." message. Default value: none. | 85 | "generated by..." message. Default value: none. |
86 | 86 | ||
87 | header | 87 | header:: |
88 | The content of the file specified with this option will be included | 88 | The content of the file specified with this option will be included |
89 | verbatim at the top of all pages. Default value: none. | 89 | verbatim at the top of all pages. Default value: none. |
90 | 90 | ||
91 | include | 91 | include:: |
92 | Name of a configfile to include before the rest of the current config- | 92 | Name of a configfile to include before the rest of the current config- |
93 | file is parsed. Default value: none. | 93 | file is parsed. Default value: none. |
94 | 94 | ||
95 | index-header | 95 | index-header:: |
96 | The content of the file specified with this option will be included | 96 | The content of the file specified with this option will be included |
97 | verbatim above the repository index. This setting is deprecated, and | 97 | verbatim above the repository index. This setting is deprecated, and |
98 | will not be supported by cgit-1.0 (use root-readme instead). Default | 98 | will not be supported by cgit-1.0 (use root-readme instead). Default |
99 | value: none. | 99 | value: none. |
100 | 100 | ||
101 | index-info | 101 | index-info:: |
102 | The content of the file specified with this option will be included | 102 | The content of the file specified with this option will be included |
103 | verbatim below the heading on the repository index page. This setting | 103 | verbatim below the heading on the repository index page. This setting |
104 | is deprecated, and will not be supported by cgit-1.0 (use root-desc | 104 | is deprecated, and will not be supported by cgit-1.0 (use root-desc |
105 | instead). Default value: none. | 105 | instead). Default value: none. |
106 | 106 | ||
107 | local-time | 107 | local-time:: |
108 | Flag which, if set to "1", makes cgit print commit and tag times in the | 108 | Flag which, if set to "1", makes cgit print commit and tag times in the |
109 | servers timezone. Default value: "0". | 109 | servers timezone. Default value: "0". |
110 | 110 | ||
111 | logo | 111 | logo:: |
112 | Url which specifies the source of an image which will be used as a logo | 112 | Url which specifies the source of an image which will be used as a logo |
113 | on all cgit pages. | 113 | on all cgit pages. |
114 | 114 | ||
115 | logo-link | 115 | logo-link:: |
116 | Url loaded when clicking on the cgit logo image. If unspecified the | 116 | Url loaded when clicking on the cgit logo image. If unspecified the |
117 | calculated url of the repository index page will be used. Default | 117 | calculated url of the repository index page will be used. Default |
118 | value: none. | 118 | value: none. |
119 | 119 | ||
120 | max-commit-count | 120 | max-commit-count:: |
121 | Specifies the number of entries to list per page in "log" view. Default | 121 | Specifies the number of entries to list per page in "log" view. Default |
122 | value: "50". | 122 | value: "50". |
123 | 123 | ||
124 | max-message-length | 124 | max-message-length:: |
125 | Specifies the maximum number of commit message characters to display in | 125 | Specifies the maximum number of commit message characters to display in |
126 | "log" view. Default value: "80". | 126 | "log" view. Default value: "80". |
127 | 127 | ||
128 | max-repo-count | 128 | max-repo-count:: |
129 | Specifies the number of entries to list per page on the repository | 129 | Specifies the number of entries to list per page on the repository |
130 | index page. Default value: "50". | 130 | index page. Default value: "50". |
131 | 131 | ||
132 | max-repodesc-length | 132 | max-repodesc-length:: |
133 | Specifies the maximum number of repo description characters to display | 133 | Specifies the maximum number of repo description characters to display |
134 | on the repository index page. Default value: "80". | 134 | on the repository index page. Default value: "80". |
135 | 135 | ||
136 | max-stats | 136 | max-stats:: |
137 | Set the default maximum statistics period. Valid values are "week", | 137 | Set the default maximum statistics period. Valid values are "week", |
138 | "month", "quarter" and "year". If unspecified, statistics are | 138 | "month", "quarter" and "year". If unspecified, statistics are |
139 | disabled. Default value: none. See also: "repo.max-stats". | 139 | disabled. Default value: none. See also: "repo.max-stats". |
140 | 140 | ||
141 | module-link | 141 | module-link:: |
142 | Text which will be used as the formatstring for a hyperlink when a | 142 | Text which will be used as the formatstring for a hyperlink when a |
143 | submodule is printed in a directory listing. The arguments for the | 143 | submodule is printed in a directory listing. The arguments for the |
144 | formatstring are the path and SHA1 of the submodule commit. Default | 144 | formatstring are the path and SHA1 of the submodule commit. Default |
145 | value: "./?repo=%s&page=commit&id=%s" | 145 | value: "./?repo=%s&page=commit&id=%s" |
146 | 146 | ||
147 | nocache | 147 | nocache:: |
148 | If set to the value "1" caching will be disabled. This settings is | 148 | If set to the value "1" caching will be disabled. This settings is |
149 | deprecated, and will not be honored starting with cgit-1.0. Default | 149 | deprecated, and will not be honored starting with cgit-1.0. Default |
150 | value: "0". | 150 | value: "0". |
151 | 151 | ||
152 | renamelimit | 152 | renamelimit:: |
153 | Maximum number of files to consider when detecting renames. The value | 153 | Maximum number of files to consider when detecting renames. The value |
154 | "-1" uses the compiletime value in git (for further info, look at | 154 | "-1" uses the compiletime value in git (for further info, look at |
155 | `man git-diff`). Default value: "-1". | 155 | `man git-diff`). Default value: "-1". |
156 | 156 | ||
157 | repo.group | 157 | repo.group:: |
158 | A value for the current repository group, which all repositories | 158 | A value for the current repository group, which all repositories |
159 | specified after this setting will inherit. Default value: none. | 159 | specified after this setting will inherit. Default value: none. |
160 | 160 | ||
161 | robots | 161 | robots:: |
162 | Text used as content for the "robots" meta-tag. Default value: | 162 | Text used as content for the "robots" meta-tag. Default value: |
163 | "index, nofollow". | 163 | "index, nofollow". |
164 | 164 | ||
165 | root-desc | 165 | root-desc:: |
166 | Text printed below the heading on the repository index page. Default | 166 | Text printed below the heading on the repository index page. Default |
167 | value: "a fast webinterface for the git dscm". | 167 | value: "a fast webinterface for the git dscm". |
168 | 168 | ||
169 | root-readme: | 169 | root-readme:: |
170 | The content of the file specified with this option will be included | 170 | The content of the file specified with this option will be included |
171 | verbatim below the "about" link on the repository index page. Default | 171 | verbatim below the "about" link on the repository index page. Default |
172 | value: none. | 172 | value: none. |
173 | 173 | ||
174 | root-title | 174 | root-title:: |
175 | Text printed as heading on the repository index page. Default value: | 175 | Text printed as heading on the repository index page. Default value: |
176 | "Git Repository Browser". | 176 | "Git Repository Browser". |
177 | 177 | ||
178 | snapshots | 178 | snapshots:: |
179 | Text which specifies the default (and allowed) set of snapshot formats | 179 | Text which specifies the default (and allowed) set of snapshot formats |
180 | supported by cgit. The value is a space-separated list of zero or more | 180 | supported by cgit. The value is a space-separated list of zero or more |
181 | of the following values: | 181 | of the following values: |
@@ -185,19 +185,19 @@ snapshots | |||
185 | "zip" zip-file | 185 | "zip" zip-file |
186 | Default value: none. | 186 | Default value: none. |
187 | 187 | ||
188 | summary-branches | 188 | summary-branches:: |
189 | Specifies the number of branches to display in the repository "summary" | 189 | Specifies the number of branches to display in the repository "summary" |
190 | view. Default value: "10". | 190 | view. Default value: "10". |
191 | 191 | ||
192 | summary-log | 192 | summary-log:: |
193 | Specifies the number of log entries to display in the repository | 193 | Specifies the number of log entries to display in the repository |
194 | "summary" view. Default value: "10". | 194 | "summary" view. Default value: "10". |
195 | 195 | ||
196 | summary-tags | 196 | summary-tags:: |
197 | Specifies the number of tags to display in the repository "summary" | 197 | Specifies the number of tags to display in the repository "summary" |
198 | view. Default value: "10". | 198 | view. Default value: "10". |
199 | 199 | ||
200 | virtual-root | 200 | virtual-root:: |
201 | Url which, if specified, will be used as root for all cgit links. It | 201 | Url which, if specified, will be used as root for all cgit links. It |
202 | will also cause cgit to generate 'virtual urls', i.e. urls like | 202 | will also cause cgit to generate 'virtual urls', i.e. urls like |
203 | '/cgit/tree/README' as opposed to '?r=cgit&p=tree&path=README'. Default | 203 | '/cgit/tree/README' as opposed to '?r=cgit&p=tree&path=README'. Default |
@@ -207,51 +207,51 @@ virtual-root | |||
207 | 207 | ||
208 | REPOSITORY SETTINGS | 208 | REPOSITORY SETTINGS |
209 | ------------------- | 209 | ------------------- |
210 | repo.clone-url | 210 | repo.clone-url:: |
211 | A list of space-separated urls which can be used to clone this repo. | 211 | A list of space-separated urls which can be used to clone this repo. |
212 | Default value: none. | 212 | Default value: none. |
213 | 213 | ||
214 | repo.defbranch | 214 | repo.defbranch:: |
215 | The name of the default branch for this repository. If no such branch | 215 | The name of the default branch for this repository. If no such branch |
216 | exists in the repository, the first branch name (when sorted) is used | 216 | exists in the repository, the first branch name (when sorted) is used |
217 | as default instead. Default value: "master". | 217 | as default instead. Default value: "master". |
218 | 218 | ||
219 | repo.desc | 219 | repo.desc:: |
220 | The value to show as repository description. Default value: none. | 220 | The value to show as repository description. Default value: none. |
221 | 221 | ||
222 | repo.enable-log-filecount | 222 | repo.enable-log-filecount:: |
223 | A flag which can be used to disable the global setting | 223 | A flag which can be used to disable the global setting |
224 | `enable-log-filecount'. Default value: none. | 224 | `enable-log-filecount'. Default value: none. |
225 | 225 | ||
226 | repo.enable-log-linecount | 226 | repo.enable-log-linecount:: |
227 | A flag which can be used to disable the global setting | 227 | A flag which can be used to disable the global setting |
228 | `enable-log-linecount'. Default value: none. | 228 | `enable-log-linecount'. Default value: none. |
229 | 229 | ||
230 | repo.max-stats | 230 | repo.max-stats:: |
231 | Override the default maximum statistics period. Valid values are equal | 231 | Override the default maximum statistics period. Valid values are equal |
232 | to the values specified for the global "max-stats" setting. Default | 232 | to the values specified for the global "max-stats" setting. Default |
233 | value: none. | 233 | value: none. |
234 | 234 | ||
235 | repo.name | 235 | repo.name:: |
236 | The value to show as repository name. Default value: <repo.url>. | 236 | The value to show as repository name. Default value: <repo.url>. |
237 | 237 | ||
238 | repo.owner | 238 | repo.owner:: |
239 | A value used to identify the owner of the repository. Default value: | 239 | A value used to identify the owner of the repository. Default value: |
240 | none. | 240 | none. |
241 | 241 | ||
242 | repo.path | 242 | repo.path:: |
243 | An absolute path to the repository directory. For non-bare repositories | 243 | An absolute path to the repository directory. For non-bare repositories |
244 | this is the .git-directory. Default value: none. | 244 | this is the .git-directory. Default value: none. |
245 | 245 | ||
246 | repo.readme | 246 | repo.readme:: |
247 | A path (relative to <repo.path>) which specifies a file to include | 247 | A path (relative to <repo.path>) which specifies a file to include |
248 | verbatim as the "About" page for this repo. Default value: none. | 248 | verbatim as the "About" page for this repo. Default value: none. |
249 | 249 | ||
250 | repo.snapshots | 250 | repo.snapshots:: |
251 | A mask of allowed snapshot-formats for this repo, restricted by the | 251 | A mask of allowed snapshot-formats for this repo, restricted by the |
252 | "snapshots" global setting. Default value: <snapshots>. | 252 | "snapshots" global setting. Default value: <snapshots>. |
253 | 253 | ||
254 | repo.url | 254 | repo.url:: |
255 | The relative url used to access the repository. This must be the first | 255 | The relative url used to access the repository. This must be the first |
256 | setting specified for each repo. Default value: none. | 256 | setting specified for each repo. Default value: none. |
257 | 257 | ||
@@ -259,6 +259,7 @@ repo.url | |||
259 | EXAMPLE CGITRC FILE | 259 | EXAMPLE CGITRC FILE |
260 | ------------------- | 260 | ------------------- |
261 | 261 | ||
262 | .... | ||
262 | # Enable caching of up to 1000 output entriess | 263 | # Enable caching of up to 1000 output entriess |
263 | cache-size=1000 | 264 | cache-size=1000 |
264 | 265 | ||
@@ -368,6 +369,7 @@ repo.enable-log-linecount=0 | |||
368 | 369 | ||
369 | # Restrict the max statistics period for this repo | 370 | # Restrict the max statistics period for this repo |
370 | repo.max-stats=month | 371 | repo.max-stats=month |
372 | .... | ||
371 | 373 | ||
372 | 374 | ||
373 | BUGS | 375 | BUGS |
@@ -52,7 +52,8 @@ void add_entry(struct commit *commit, char *host) | |||
52 | cgit_print_date(info->author_date, FMT_ATOMDATE, ctx.cfg.local_time); | 52 | cgit_print_date(info->author_date, FMT_ATOMDATE, ctx.cfg.local_time); |
53 | html("</published>\n"); | 53 | html("</published>\n"); |
54 | if (host) { | 54 | if (host) { |
55 | html("<link rel='alternate' type='text/html' href='http://"); | 55 | html("<link rel='alternate' type='text/html' href='"); |
56 | html(cgit_httpscheme()); | ||
56 | html_attr(host); | 57 | html_attr(host); |
57 | html_attr(cgit_pageurl(ctx.repo->url, "commit", NULL)); | 58 | html_attr(cgit_pageurl(ctx.repo->url, "commit", NULL)); |
58 | if (ctx.cfg.virtual_root) | 59 | if (ctx.cfg.virtual_root) |
@@ -113,7 +114,8 @@ void cgit_print_atom(char *tip, char *path, int max_count) | |||
113 | html_txt(ctx.repo->desc); | 114 | html_txt(ctx.repo->desc); |
114 | html("</subtitle>\n"); | 115 | html("</subtitle>\n"); |
115 | if (host) { | 116 | if (host) { |
116 | html("<link rel='alternate' type='text/html' href='http://"); | 117 | html("<link rel='alternate' type='text/html' href='"); |
118 | html(cgit_httpscheme()); | ||
117 | html_attr(host); | 119 | html_attr(host); |
118 | html_attr(cgit_repourl(ctx.repo->url)); | 120 | html_attr(cgit_repourl(ctx.repo->url)); |
119 | html("'/>\n"); | 121 | html("'/>\n"); |
@@ -27,7 +27,7 @@ void cgit_print_blob(const char *hex, char *path, const char *head) | |||
27 | 27 | ||
28 | unsigned char sha1[20]; | 28 | unsigned char sha1[20]; |
29 | enum object_type type; | 29 | enum object_type type; |
30 | unsigned char *buf; | 30 | char *buf; |
31 | unsigned long size; | 31 | unsigned long size; |
32 | struct commit *commit; | 32 | struct commit *commit; |
33 | const char *paths[] = {path, NULL}; | 33 | const char *paths[] = {path, NULL}; |
@@ -67,6 +67,12 @@ void cgit_print_blob(const char *hex, char *path, const char *head) | |||
67 | 67 | ||
68 | buf[size] = '\0'; | 68 | buf[size] = '\0'; |
69 | ctx.page.mimetype = ctx.qry.mimetype; | 69 | ctx.page.mimetype = ctx.qry.mimetype; |
70 | if (!ctx.page.mimetype) { | ||
71 | if (buffer_is_binary(buf, size)) | ||
72 | ctx.page.mimetype = "application/octet-stream"; | ||
73 | else | ||
74 | ctx.page.mimetype = "text/plain"; | ||
75 | } | ||
70 | ctx.page.filename = path; | 76 | ctx.page.filename = path; |
71 | cgit_print_http_headers(&ctx); | 77 | cgit_print_http_headers(&ctx); |
72 | write(htmlfd, buf, size); | 78 | write(htmlfd, buf, size); |
@@ -31,7 +31,10 @@ static void print_object(const unsigned char *sha1, const char *path) | |||
31 | html_status(404, "Not found", 0); | 31 | html_status(404, "Not found", 0); |
32 | return; | 32 | return; |
33 | } | 33 | } |
34 | ctx.page.mimetype = "text/plain"; | 34 | if (buffer_is_binary(buf, size)) |
35 | ctx.page.mimetype = "application/octet-stream"; | ||
36 | else | ||
37 | ctx.page.mimetype = "text/plain"; | ||
35 | ctx.page.filename = fmt("%s", path); | 38 | ctx.page.filename = fmt("%s", path); |
36 | ctx.page.size = size; | 39 | ctx.page.size = size; |
37 | ctx.page.etag = sha1_to_hex(sha1); | 40 | ctx.page.etag = sha1_to_hex(sha1); |
diff --git a/ui-shared.c b/ui-shared.c index 0dafc83..10be3c0 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -34,6 +34,17 @@ void cgit_print_error(char *msg) | |||
34 | html("</div>\n"); | 34 | html("</div>\n"); |
35 | } | 35 | } |
36 | 36 | ||
37 | char *cgit_httpscheme() | ||
38 | { | ||
39 | char *https; | ||
40 | |||
41 | https = getenv("HTTPS"); | ||
42 | if (https != NULL && strcmp(https, "on") == 0) | ||
43 | return "https://"; | ||
44 | else | ||
45 | return "http://"; | ||
46 | } | ||
47 | |||
37 | char *cgit_hosturl() | 48 | char *cgit_hosturl() |
38 | { | 49 | { |
39 | char *host, *port; | 50 | char *host, *port; |
@@ -458,6 +469,8 @@ void cgit_print_http_headers(struct cgit_context *ctx) | |||
458 | { | 469 | { |
459 | const char *method = getenv("REQUEST_METHOD"); | 470 | const char *method = getenv("REQUEST_METHOD"); |
460 | 471 | ||
472 | if (ctx->page.status) | ||
473 | htmlf("Status: %d %s\n", ctx->page.status, ctx->page.statusmsg); | ||
461 | if (ctx->page.mimetype && ctx->page.charset) | 474 | if (ctx->page.mimetype && ctx->page.charset) |
462 | htmlf("Content-Type: %s; charset=%s\n", ctx->page.mimetype, | 475 | htmlf("Content-Type: %s; charset=%s\n", ctx->page.mimetype, |
463 | ctx->page.charset); | 476 | ctx->page.charset); |
@@ -498,7 +511,8 @@ void cgit_print_docstart(struct cgit_context *ctx) | |||
498 | html("'/>\n"); | 511 | html("'/>\n"); |
499 | } | 512 | } |
500 | if (host && ctx->repo) { | 513 | if (host && ctx->repo) { |
501 | html("<link rel='alternate' title='Atom feed' href='http://"); | 514 | html("<link rel='alternate' title='Atom feed' href='"); |
515 | html(cgit_httpscheme()); | ||
502 | html_attr(cgit_hosturl()); | 516 | html_attr(cgit_hosturl()); |
503 | html_attr(cgit_fileurl(ctx->repo->url, "atom", ctx->qry.path, | 517 | html_attr(cgit_fileurl(ctx->repo->url, "atom", ctx->qry.path, |
504 | fmt("h=%s", ctx->qry.head))); | 518 | fmt("h=%s", ctx->qry.head))); |
diff --git a/ui-shared.h b/ui-shared.h index 5a3821f..bff4826 100644 --- a/ui-shared.h +++ b/ui-shared.h | |||
@@ -1,6 +1,7 @@ | |||
1 | #ifndef UI_SHARED_H | 1 | #ifndef UI_SHARED_H |
2 | #define UI_SHARED_H | 2 | #define UI_SHARED_H |
3 | 3 | ||
4 | extern char *cgit_httpscheme(); | ||
4 | extern char *cgit_hosturl(); | 5 | extern char *cgit_hosturl(); |
5 | extern char *cgit_repourl(const char *reponame); | 6 | extern char *cgit_repourl(const char *reponame); |
6 | extern char *cgit_fileurl(const char *reponame, const char *pagename, | 7 | extern char *cgit_fileurl(const char *reponame, const char *pagename, |
diff --git a/ui-snapshot.c b/ui-snapshot.c index f25613e..5372f5d 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c | |||
@@ -156,20 +156,31 @@ static const char *get_ref_from_filename(const char *url, const char *filename, | |||
156 | return NULL; | 156 | return NULL; |
157 | } | 157 | } |
158 | 158 | ||
159 | void show_error(char *msg) | ||
160 | { | ||
161 | ctx.page.mimetype = "text/html"; | ||
162 | cgit_print_http_headers(&ctx); | ||
163 | cgit_print_docstart(&ctx); | ||
164 | cgit_print_pageheader(&ctx); | ||
165 | cgit_print_error(msg); | ||
166 | cgit_print_docend(); | ||
167 | } | ||
168 | |||
159 | void cgit_print_snapshot(const char *head, const char *hex, | 169 | void cgit_print_snapshot(const char *head, const char *hex, |
160 | const char *filename, int snapshots, int dwim) | 170 | const char *filename, int snapshots, int dwim) |
161 | { | 171 | { |
162 | const struct cgit_snapshot_format* f; | 172 | const struct cgit_snapshot_format* f; |
163 | char *prefix = NULL; | 173 | char *prefix = NULL; |
164 | 174 | ||
175 | if (!filename) { | ||
176 | show_error("No snapshot name specified"); | ||
177 | return; | ||
178 | } | ||
179 | |||
165 | f = get_format(filename); | 180 | f = get_format(filename); |
166 | if (!f) { | 181 | if (!f) { |
167 | ctx.page.mimetype = "text/html"; | 182 | show_error(xstrdup(fmt("Unsupported snapshot format: %s", |
168 | cgit_print_http_headers(&ctx); | 183 | filename))); |
169 | cgit_print_docstart(&ctx); | ||
170 | cgit_print_pageheader(&ctx); | ||
171 | cgit_print_error(fmt("Unsupported snapshot format: %s", filename)); | ||
172 | cgit_print_docend(); | ||
173 | return; | 184 | return; |
174 | } | 185 | } |
175 | 186 | ||
@@ -25,11 +25,14 @@ static void print_text_buffer(char *buf, unsigned long size) | |||
25 | html("<tr><td class='linenumbers'><pre>"); | 25 | html("<tr><td class='linenumbers'><pre>"); |
26 | idx = 0; | 26 | idx = 0; |
27 | lineno = 0; | 27 | lineno = 0; |
28 | htmlf(numberfmt, ++lineno); | 28 | |
29 | while(idx < size - 1) { // skip absolute last newline | 29 | if (size) { |
30 | if (buf[idx] == '\n') | 30 | htmlf(numberfmt, ++lineno); |
31 | htmlf(numberfmt, ++lineno); | 31 | while(idx < size - 1) { // skip absolute last newline |
32 | idx++; | 32 | if (buf[idx] == '\n') |
33 | htmlf(numberfmt, ++lineno); | ||
34 | idx++; | ||
35 | } | ||
33 | } | 36 | } |
34 | html("</pre></td>\n"); | 37 | html("</pre></td>\n"); |
35 | html("<td class='lines'><pre><code>"); | 38 | html("<td class='lines'><pre><code>"); |