author | Lars Hjemli <hjemli@gmail.com> | 2009-08-24 05:42:03 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2009-08-24 08:22:58 (UTC) |
commit | e01229cf80bc618a132d2154c0ebd71792d31c64 (patch) (unidiff) | |
tree | 62aa3f02166f7f4b6cdf866a4916b53921ed3ecf | |
parent | 74061ed5f03e72796450aa3b8ca1cf6ced5d59e2 (diff) | |
download | cgit-e01229cf80bc618a132d2154c0ebd71792d31c64.zip cgit-e01229cf80bc618a132d2154c0ebd71792d31c64.tar.gz cgit-e01229cf80bc618a132d2154c0ebd71792d31c64.tar.bz2 |
ui-repolist: handle empty sections similar to NULL sections
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.c | 1 | ||||
-rw-r--r-- | ui-repolist.c | 18 |
2 files changed, 12 insertions, 7 deletions
@@ -208,128 +208,129 @@ static void querystring_cb(const char *name, const char *value) | |||
208 | cgit_parse_url(value); | 208 | cgit_parse_url(value); |
209 | } else if (!strcmp(name, "qt")) { | 209 | } else if (!strcmp(name, "qt")) { |
210 | ctx.qry.grep = xstrdup(value); | 210 | ctx.qry.grep = xstrdup(value); |
211 | } else if (!strcmp(name, "q")) { | 211 | } else if (!strcmp(name, "q")) { |
212 | ctx.qry.search = xstrdup(value); | 212 | ctx.qry.search = xstrdup(value); |
213 | } else if (!strcmp(name, "h")) { | 213 | } else if (!strcmp(name, "h")) { |
214 | ctx.qry.head = xstrdup(value); | 214 | ctx.qry.head = xstrdup(value); |
215 | ctx.qry.has_symref = 1; | 215 | ctx.qry.has_symref = 1; |
216 | } else if (!strcmp(name, "id")) { | 216 | } else if (!strcmp(name, "id")) { |
217 | ctx.qry.sha1 = xstrdup(value); | 217 | ctx.qry.sha1 = xstrdup(value); |
218 | ctx.qry.has_sha1 = 1; | 218 | ctx.qry.has_sha1 = 1; |
219 | } else if (!strcmp(name, "id2")) { | 219 | } else if (!strcmp(name, "id2")) { |
220 | ctx.qry.sha2 = xstrdup(value); | 220 | ctx.qry.sha2 = xstrdup(value); |
221 | ctx.qry.has_sha1 = 1; | 221 | ctx.qry.has_sha1 = 1; |
222 | } else if (!strcmp(name, "ofs")) { | 222 | } else if (!strcmp(name, "ofs")) { |
223 | ctx.qry.ofs = atoi(value); | 223 | ctx.qry.ofs = atoi(value); |
224 | } else if (!strcmp(name, "path")) { | 224 | } else if (!strcmp(name, "path")) { |
225 | ctx.qry.path = trim_end(value, '/'); | 225 | ctx.qry.path = trim_end(value, '/'); |
226 | } else if (!strcmp(name, "name")) { | 226 | } else if (!strcmp(name, "name")) { |
227 | ctx.qry.name = xstrdup(value); | 227 | ctx.qry.name = xstrdup(value); |
228 | } else if (!strcmp(name, "mimetype")) { | 228 | } else if (!strcmp(name, "mimetype")) { |
229 | ctx.qry.mimetype = xstrdup(value); | 229 | ctx.qry.mimetype = xstrdup(value); |
230 | } else if (!strcmp(name, "s")){ | 230 | } else if (!strcmp(name, "s")){ |
231 | ctx.qry.sort = xstrdup(value); | 231 | ctx.qry.sort = xstrdup(value); |
232 | } else if (!strcmp(name, "showmsg")) { | 232 | } else if (!strcmp(name, "showmsg")) { |
233 | ctx.qry.showmsg = atoi(value); | 233 | ctx.qry.showmsg = atoi(value); |
234 | } else if (!strcmp(name, "period")) { | 234 | } else if (!strcmp(name, "period")) { |
235 | ctx.qry.period = xstrdup(value); | 235 | ctx.qry.period = xstrdup(value); |
236 | } | 236 | } |
237 | } | 237 | } |
238 | 238 | ||
239 | char *xstrdupn(const char *str) | 239 | char *xstrdupn(const char *str) |
240 | { | 240 | { |
241 | return (str ? xstrdup(str) : NULL); | 241 | return (str ? xstrdup(str) : NULL); |
242 | } | 242 | } |
243 | 243 | ||
244 | static void prepare_context(struct cgit_context *ctx) | 244 | static void prepare_context(struct cgit_context *ctx) |
245 | { | 245 | { |
246 | memset(ctx, 0, sizeof(ctx)); | 246 | memset(ctx, 0, sizeof(ctx)); |
247 | ctx->cfg.agefile = "info/web/last-modified"; | 247 | ctx->cfg.agefile = "info/web/last-modified"; |
248 | ctx->cfg.nocache = 0; | 248 | ctx->cfg.nocache = 0; |
249 | ctx->cfg.cache_size = 0; | 249 | ctx->cfg.cache_size = 0; |
250 | ctx->cfg.cache_dynamic_ttl = 5; | 250 | ctx->cfg.cache_dynamic_ttl = 5; |
251 | ctx->cfg.cache_max_create_time = 5; | 251 | ctx->cfg.cache_max_create_time = 5; |
252 | ctx->cfg.cache_repo_ttl = 5; | 252 | ctx->cfg.cache_repo_ttl = 5; |
253 | ctx->cfg.cache_root = CGIT_CACHE_ROOT; | 253 | ctx->cfg.cache_root = CGIT_CACHE_ROOT; |
254 | ctx->cfg.cache_root_ttl = 5; | 254 | ctx->cfg.cache_root_ttl = 5; |
255 | ctx->cfg.cache_scanrc_ttl = 15; | 255 | ctx->cfg.cache_scanrc_ttl = 15; |
256 | ctx->cfg.cache_static_ttl = -1; | 256 | ctx->cfg.cache_static_ttl = -1; |
257 | ctx->cfg.css = "/cgit.css"; | 257 | ctx->cfg.css = "/cgit.css"; |
258 | ctx->cfg.logo = "/cgit.png"; | 258 | ctx->cfg.logo = "/cgit.png"; |
259 | ctx->cfg.local_time = 0; | 259 | ctx->cfg.local_time = 0; |
260 | ctx->cfg.max_repo_count = 50; | 260 | ctx->cfg.max_repo_count = 50; |
261 | ctx->cfg.max_commit_count = 50; | 261 | ctx->cfg.max_commit_count = 50; |
262 | ctx->cfg.max_lock_attempts = 5; | 262 | ctx->cfg.max_lock_attempts = 5; |
263 | ctx->cfg.max_msg_len = 80; | 263 | ctx->cfg.max_msg_len = 80; |
264 | ctx->cfg.max_repodesc_len = 80; | 264 | ctx->cfg.max_repodesc_len = 80; |
265 | ctx->cfg.max_stats = 0; | 265 | ctx->cfg.max_stats = 0; |
266 | ctx->cfg.module_link = "./?repo=%s&page=commit&id=%s"; | 266 | ctx->cfg.module_link = "./?repo=%s&page=commit&id=%s"; |
267 | ctx->cfg.renamelimit = -1; | 267 | ctx->cfg.renamelimit = -1; |
268 | ctx->cfg.robots = "index, nofollow"; | 268 | ctx->cfg.robots = "index, nofollow"; |
269 | ctx->cfg.root_title = "Git repository browser"; | 269 | ctx->cfg.root_title = "Git repository browser"; |
270 | ctx->cfg.root_desc = "a fast webinterface for the git dscm"; | 270 | ctx->cfg.root_desc = "a fast webinterface for the git dscm"; |
271 | ctx->cfg.script_name = CGIT_SCRIPT_NAME; | 271 | ctx->cfg.script_name = CGIT_SCRIPT_NAME; |
272 | ctx->cfg.section = ""; | ||
272 | ctx->cfg.summary_branches = 10; | 273 | ctx->cfg.summary_branches = 10; |
273 | ctx->cfg.summary_log = 10; | 274 | ctx->cfg.summary_log = 10; |
274 | ctx->cfg.summary_tags = 10; | 275 | ctx->cfg.summary_tags = 10; |
275 | ctx->env.cgit_config = xstrdupn(getenv("CGIT_CONFIG")); | 276 | ctx->env.cgit_config = xstrdupn(getenv("CGIT_CONFIG")); |
276 | ctx->env.http_host = xstrdupn(getenv("HTTP_HOST")); | 277 | ctx->env.http_host = xstrdupn(getenv("HTTP_HOST")); |
277 | ctx->env.https = xstrdupn(getenv("HTTPS")); | 278 | ctx->env.https = xstrdupn(getenv("HTTPS")); |
278 | ctx->env.no_http = xstrdupn(getenv("NO_HTTP")); | 279 | ctx->env.no_http = xstrdupn(getenv("NO_HTTP")); |
279 | ctx->env.path_info = xstrdupn(getenv("PATH_INFO")); | 280 | ctx->env.path_info = xstrdupn(getenv("PATH_INFO")); |
280 | ctx->env.query_string = xstrdupn(getenv("QUERY_STRING")); | 281 | ctx->env.query_string = xstrdupn(getenv("QUERY_STRING")); |
281 | ctx->env.request_method = xstrdupn(getenv("REQUEST_METHOD")); | 282 | ctx->env.request_method = xstrdupn(getenv("REQUEST_METHOD")); |
282 | ctx->env.script_name = xstrdupn(getenv("SCRIPT_NAME")); | 283 | ctx->env.script_name = xstrdupn(getenv("SCRIPT_NAME")); |
283 | ctx->env.server_name = xstrdupn(getenv("SERVER_NAME")); | 284 | ctx->env.server_name = xstrdupn(getenv("SERVER_NAME")); |
284 | ctx->env.server_port = xstrdupn(getenv("SERVER_PORT")); | 285 | ctx->env.server_port = xstrdupn(getenv("SERVER_PORT")); |
285 | ctx->page.mimetype = "text/html"; | 286 | ctx->page.mimetype = "text/html"; |
286 | ctx->page.charset = PAGE_ENCODING; | 287 | ctx->page.charset = PAGE_ENCODING; |
287 | ctx->page.filename = NULL; | 288 | ctx->page.filename = NULL; |
288 | ctx->page.size = 0; | 289 | ctx->page.size = 0; |
289 | ctx->page.modified = time(NULL); | 290 | ctx->page.modified = time(NULL); |
290 | ctx->page.expires = ctx->page.modified; | 291 | ctx->page.expires = ctx->page.modified; |
291 | ctx->page.etag = NULL; | 292 | ctx->page.etag = NULL; |
292 | memset(&ctx->cfg.mimetypes, 0, sizeof(struct string_list)); | 293 | memset(&ctx->cfg.mimetypes, 0, sizeof(struct string_list)); |
293 | if (ctx->env.script_name) | 294 | if (ctx->env.script_name) |
294 | ctx->cfg.script_name = ctx->env.script_name; | 295 | ctx->cfg.script_name = ctx->env.script_name; |
295 | if (ctx->env.query_string) | 296 | if (ctx->env.query_string) |
296 | ctx->qry.raw = ctx->env.query_string; | 297 | ctx->qry.raw = ctx->env.query_string; |
297 | if (!ctx->env.cgit_config) | 298 | if (!ctx->env.cgit_config) |
298 | ctx->env.cgit_config = CGIT_CONFIG; | 299 | ctx->env.cgit_config = CGIT_CONFIG; |
299 | } | 300 | } |
300 | 301 | ||
301 | struct refmatch { | 302 | struct refmatch { |
302 | char *req_ref; | 303 | char *req_ref; |
303 | char *first_ref; | 304 | char *first_ref; |
304 | int match; | 305 | int match; |
305 | }; | 306 | }; |
306 | 307 | ||
307 | int find_current_ref(const char *refname, const unsigned char *sha1, | 308 | int find_current_ref(const char *refname, const unsigned char *sha1, |
308 | int flags, void *cb_data) | 309 | int flags, void *cb_data) |
309 | { | 310 | { |
310 | struct refmatch *info; | 311 | struct refmatch *info; |
311 | 312 | ||
312 | info = (struct refmatch *)cb_data; | 313 | info = (struct refmatch *)cb_data; |
313 | if (!strcmp(refname, info->req_ref)) | 314 | if (!strcmp(refname, info->req_ref)) |
314 | info->match = 1; | 315 | info->match = 1; |
315 | if (!info->first_ref) | 316 | if (!info->first_ref) |
316 | info->first_ref = xstrdup(refname); | 317 | info->first_ref = xstrdup(refname); |
317 | return info->match; | 318 | return info->match; |
318 | } | 319 | } |
319 | 320 | ||
320 | char *find_default_branch(struct cgit_repo *repo) | 321 | char *find_default_branch(struct cgit_repo *repo) |
321 | { | 322 | { |
322 | struct refmatch info; | 323 | struct refmatch info; |
323 | char *ref; | 324 | char *ref; |
324 | 325 | ||
325 | info.req_ref = repo->defbranch; | 326 | info.req_ref = repo->defbranch; |
326 | info.first_ref = NULL; | 327 | info.first_ref = NULL; |
327 | info.match = 0; | 328 | info.match = 0; |
328 | for_each_branch_ref(find_current_ref, &info); | 329 | for_each_branch_ref(find_current_ref, &info); |
329 | if (info.match) | 330 | if (info.match) |
330 | ref = info.req_ref; | 331 | ref = info.req_ref; |
331 | else | 332 | else |
332 | ref = info.first_ref; | 333 | ref = info.first_ref; |
333 | if (ref) | 334 | if (ref) |
334 | ref = xstrdup(ref); | 335 | ref = xstrdup(ref); |
335 | return ref; | 336 | return ref; |
diff --git a/ui-repolist.c b/ui-repolist.c index d56654d..3ef2e99 100644 --- a/ui-repolist.c +++ b/ui-repolist.c | |||
@@ -156,145 +156,149 @@ static int sort_name(const void *a, const void *b) | |||
156 | return cmp(r1->name, r2->name); | 156 | return cmp(r1->name, r2->name); |
157 | } | 157 | } |
158 | 158 | ||
159 | static int sort_desc(const void *a, const void *b) | 159 | static int sort_desc(const void *a, const void *b) |
160 | { | 160 | { |
161 | const struct cgit_repo *r1 = a; | 161 | const struct cgit_repo *r1 = a; |
162 | const struct cgit_repo *r2 = b; | 162 | const struct cgit_repo *r2 = b; |
163 | 163 | ||
164 | return cmp(r1->desc, r2->desc); | 164 | return cmp(r1->desc, r2->desc); |
165 | } | 165 | } |
166 | 166 | ||
167 | static int sort_owner(const void *a, const void *b) | 167 | static int sort_owner(const void *a, const void *b) |
168 | { | 168 | { |
169 | const struct cgit_repo *r1 = a; | 169 | const struct cgit_repo *r1 = a; |
170 | const struct cgit_repo *r2 = b; | 170 | const struct cgit_repo *r2 = b; |
171 | 171 | ||
172 | return cmp(r1->owner, r2->owner); | 172 | return cmp(r1->owner, r2->owner); |
173 | } | 173 | } |
174 | 174 | ||
175 | static int sort_idle(const void *a, const void *b) | 175 | static int sort_idle(const void *a, const void *b) |
176 | { | 176 | { |
177 | const struct cgit_repo *r1 = a; | 177 | const struct cgit_repo *r1 = a; |
178 | const struct cgit_repo *r2 = b; | 178 | const struct cgit_repo *r2 = b; |
179 | time_t t1, t2; | 179 | time_t t1, t2; |
180 | 180 | ||
181 | t1 = t2 = 0; | 181 | t1 = t2 = 0; |
182 | get_repo_modtime(r1, &t1); | 182 | get_repo_modtime(r1, &t1); |
183 | get_repo_modtime(r2, &t2); | 183 | get_repo_modtime(r2, &t2); |
184 | return t2 - t1; | 184 | return t2 - t1; |
185 | } | 185 | } |
186 | 186 | ||
187 | struct sortcolumn { | 187 | struct sortcolumn { |
188 | const char *name; | 188 | const char *name; |
189 | int (*fn)(const void *a, const void *b); | 189 | int (*fn)(const void *a, const void *b); |
190 | }; | 190 | }; |
191 | 191 | ||
192 | struct sortcolumn sortcolumn[] = { | 192 | struct sortcolumn sortcolumn[] = { |
193 | {"section", sort_section}, | 193 | {"section", sort_section}, |
194 | {"name", sort_name}, | 194 | {"name", sort_name}, |
195 | {"desc", sort_desc}, | 195 | {"desc", sort_desc}, |
196 | {"owner", sort_owner}, | 196 | {"owner", sort_owner}, |
197 | {"idle", sort_idle}, | 197 | {"idle", sort_idle}, |
198 | {NULL, NULL} | 198 | {NULL, NULL} |
199 | }; | 199 | }; |
200 | 200 | ||
201 | int sort_repolist(char *field) | 201 | int sort_repolist(char *field) |
202 | { | 202 | { |
203 | struct sortcolumn *column; | 203 | struct sortcolumn *column; |
204 | 204 | ||
205 | for (column = &sortcolumn[0]; column->name; column++) { | 205 | for (column = &sortcolumn[0]; column->name; column++) { |
206 | if (strcmp(field, column->name)) | 206 | if (strcmp(field, column->name)) |
207 | continue; | 207 | continue; |
208 | qsort(cgit_repolist.repos, cgit_repolist.count, | 208 | qsort(cgit_repolist.repos, cgit_repolist.count, |
209 | sizeof(struct cgit_repo), column->fn); | 209 | sizeof(struct cgit_repo), column->fn); |
210 | return 1; | 210 | return 1; |
211 | } | 211 | } |
212 | return 0; | 212 | return 0; |
213 | } | 213 | } |
214 | 214 | ||
215 | 215 | ||
216 | void cgit_print_repolist() | 216 | void cgit_print_repolist() |
217 | { | 217 | { |
218 | int i, columns = 4, hits = 0, header = 0; | 218 | int i, columns = 4, hits = 0, header = 0; |
219 | char *last_section = NULL; | 219 | char *last_section = NULL; |
220 | char *section; | ||
220 | int sorted = 0; | 221 | int sorted = 0; |
221 | 222 | ||
222 | if (ctx.cfg.enable_index_links) | 223 | if (ctx.cfg.enable_index_links) |
223 | columns++; | 224 | columns++; |
224 | 225 | ||
225 | ctx.page.title = ctx.cfg.root_title; | 226 | ctx.page.title = ctx.cfg.root_title; |
226 | cgit_print_http_headers(&ctx); | 227 | cgit_print_http_headers(&ctx); |
227 | cgit_print_docstart(&ctx); | 228 | cgit_print_docstart(&ctx); |
228 | cgit_print_pageheader(&ctx); | 229 | cgit_print_pageheader(&ctx); |
229 | 230 | ||
230 | if (ctx.cfg.index_header) | 231 | if (ctx.cfg.index_header) |
231 | html_include(ctx.cfg.index_header); | 232 | html_include(ctx.cfg.index_header); |
232 | 233 | ||
233 | if(ctx.qry.sort) | 234 | if(ctx.qry.sort) |
234 | sorted = sort_repolist(ctx.qry.sort); | 235 | sorted = sort_repolist(ctx.qry.sort); |
235 | else | 236 | else |
236 | sort_repolist("section"); | 237 | sort_repolist("section"); |
237 | 238 | ||
238 | html("<table summary='repository list' class='list nowrap'>"); | 239 | html("<table summary='repository list' class='list nowrap'>"); |
239 | for (i=0; i<cgit_repolist.count; i++) { | 240 | for (i=0; i<cgit_repolist.count; i++) { |
240 | ctx.repo = &cgit_repolist.repos[i]; | 241 | ctx.repo = &cgit_repolist.repos[i]; |
241 | if (!(is_match(ctx.repo) && is_in_url(ctx.repo))) | 242 | if (!(is_match(ctx.repo) && is_in_url(ctx.repo))) |
242 | continue; | 243 | continue; |
243 | hits++; | 244 | hits++; |
244 | if (hits <= ctx.qry.ofs) | 245 | if (hits <= ctx.qry.ofs) |
245 | continue; | 246 | continue; |
246 | if (hits > ctx.qry.ofs + ctx.cfg.max_repo_count) | 247 | if (hits > ctx.qry.ofs + ctx.cfg.max_repo_count) |
247 | continue; | 248 | continue; |
248 | if (!header++) | 249 | if (!header++) |
249 | print_header(columns); | 250 | print_header(columns); |
251 | section = ctx.repo->section; | ||
252 | if (section && !strcmp(section, "")) | ||
253 | section = NULL; | ||
250 | if (!sorted && | 254 | if (!sorted && |
251 | ((last_section == NULL && ctx.repo->section != NULL) || | 255 | ((last_section == NULL && section != NULL) || |
252 | (last_section != NULL && ctx.repo->section == NULL) || | 256 | (last_section != NULL && section == NULL) || |
253 | (last_section != NULL && ctx.repo->section != NULL && | 257 | (last_section != NULL && section != NULL && |
254 | strcmp(ctx.repo->section, last_section)))) { | 258 | strcmp(section, last_section)))) { |
255 | htmlf("<tr class='nohover'><td colspan='%d' class='reposection'>", | 259 | htmlf("<tr class='nohover'><td colspan='%d' class='reposection'>", |
256 | columns); | 260 | columns); |
257 | html_txt(ctx.repo->section); | 261 | html_txt(section); |
258 | html("</td></tr>"); | 262 | html("</td></tr>"); |
259 | last_section = ctx.repo->section; | 263 | last_section = section; |
260 | } | 264 | } |
261 | htmlf("<tr><td class='%s'>", | 265 | htmlf("<tr><td class='%s'>", |
262 | !sorted && ctx.repo->section ? "sublevel-repo" : "toplevel-repo"); | 266 | !sorted && section ? "sublevel-repo" : "toplevel-repo"); |
263 | cgit_summary_link(ctx.repo->name, ctx.repo->name, NULL, NULL); | 267 | cgit_summary_link(ctx.repo->name, ctx.repo->name, NULL, NULL); |
264 | html("</td><td>"); | 268 | html("</td><td>"); |
265 | html_link_open(cgit_repourl(ctx.repo->url), NULL, NULL); | 269 | html_link_open(cgit_repourl(ctx.repo->url), NULL, NULL); |
266 | html_ntxt(ctx.cfg.max_repodesc_len, ctx.repo->desc); | 270 | html_ntxt(ctx.cfg.max_repodesc_len, ctx.repo->desc); |
267 | html_link_close(); | 271 | html_link_close(); |
268 | html("</td><td>"); | 272 | html("</td><td>"); |
269 | html_txt(ctx.repo->owner); | 273 | html_txt(ctx.repo->owner); |
270 | html("</td><td>"); | 274 | html("</td><td>"); |
271 | print_modtime(ctx.repo); | 275 | print_modtime(ctx.repo); |
272 | html("</td>"); | 276 | html("</td>"); |
273 | if (ctx.cfg.enable_index_links) { | 277 | if (ctx.cfg.enable_index_links) { |
274 | html("<td>"); | 278 | html("<td>"); |
275 | cgit_summary_link("summary", NULL, "button", NULL); | 279 | cgit_summary_link("summary", NULL, "button", NULL); |
276 | cgit_log_link("log", NULL, "button", NULL, NULL, NULL, | 280 | cgit_log_link("log", NULL, "button", NULL, NULL, NULL, |
277 | 0, NULL, NULL, ctx.qry.showmsg); | 281 | 0, NULL, NULL, ctx.qry.showmsg); |
278 | cgit_tree_link("tree", NULL, "button", NULL, NULL, NULL); | 282 | cgit_tree_link("tree", NULL, "button", NULL, NULL, NULL); |
279 | html("</td>"); | 283 | html("</td>"); |
280 | } | 284 | } |
281 | html("</tr>\n"); | 285 | html("</tr>\n"); |
282 | } | 286 | } |
283 | html("</table>"); | 287 | html("</table>"); |
284 | if (!hits) | 288 | if (!hits) |
285 | cgit_print_error("No repositories found"); | 289 | cgit_print_error("No repositories found"); |
286 | else if (hits > ctx.cfg.max_repo_count) | 290 | else if (hits > ctx.cfg.max_repo_count) |
287 | print_pager(hits, ctx.cfg.max_repo_count, ctx.qry.search); | 291 | print_pager(hits, ctx.cfg.max_repo_count, ctx.qry.search); |
288 | cgit_print_docend(); | 292 | cgit_print_docend(); |
289 | } | 293 | } |
290 | 294 | ||
291 | void cgit_print_site_readme() | 295 | void cgit_print_site_readme() |
292 | { | 296 | { |
293 | if (!ctx.cfg.root_readme) | 297 | if (!ctx.cfg.root_readme) |
294 | return; | 298 | return; |
295 | if (ctx.cfg.about_filter) | 299 | if (ctx.cfg.about_filter) |
296 | cgit_open_filter(ctx.cfg.about_filter); | 300 | cgit_open_filter(ctx.cfg.about_filter); |
297 | html_include(ctx.cfg.root_readme); | 301 | html_include(ctx.cfg.root_readme); |
298 | if (ctx.cfg.about_filter) | 302 | if (ctx.cfg.about_filter) |
299 | cgit_close_filter(ctx.cfg.about_filter); | 303 | cgit_close_filter(ctx.cfg.about_filter); |
300 | } | 304 | } |