diff options
| -rw-r--r-- | cgit.c | 12 | ||||
| -rw-r--r-- | cgit.h | 1 | ||||
| -rw-r--r-- | cgitrc.5.txt | 5 | ||||
| -rw-r--r-- | cmd.c | 42 | ||||
| -rw-r--r-- | cmd.h | 3 | ||||
| -rw-r--r-- | ui-log.c | 29 |
6 files changed, 54 insertions, 38 deletions
| @@ -147,6 +147,8 @@ void config_cb(const char *name, const char *value) | |||
| 147 | ctx.cfg.enable_filter_overrides = atoi(value); | 147 | ctx.cfg.enable_filter_overrides = atoi(value); |
| 148 | else if (!strcmp(name, "enable-gitweb-owner")) | 148 | else if (!strcmp(name, "enable-gitweb-owner")) |
| 149 | ctx.cfg.enable_gitweb_owner = atoi(value); | 149 | ctx.cfg.enable_gitweb_owner = atoi(value); |
| 150 | else if (!strcmp(name, "enable-http-clone")) | ||
| 151 | ctx.cfg.enable_http_clone = atoi(value); | ||
| 150 | else if (!strcmp(name, "enable-index-links")) | 152 | else if (!strcmp(name, "enable-index-links")) |
| 151 | ctx.cfg.enable_index_links = atoi(value); | 153 | ctx.cfg.enable_index_links = atoi(value); |
| 152 | else if (!strcmp(name, "enable-commit-graph")) | 154 | else if (!strcmp(name, "enable-commit-graph")) |
| @@ -312,6 +314,7 @@ static void prepare_context(struct cgit_context *ctx) | |||
| 312 | ctx->cfg.logo = "/cgit.png"; | 314 | ctx->cfg.logo = "/cgit.png"; |
| 313 | ctx->cfg.local_time = 0; | 315 | ctx->cfg.local_time = 0; |
| 314 | ctx->cfg.enable_gitweb_owner = 1; | 316 | ctx->cfg.enable_gitweb_owner = 1; |
| 317 | ctx->cfg.enable_http_clone = 1; | ||
| 315 | ctx->cfg.enable_tree_linenumbers = 1; | 318 | ctx->cfg.enable_tree_linenumbers = 1; |
| 316 | ctx->cfg.max_repo_count = 50; | 319 | ctx->cfg.max_repo_count = 50; |
| 317 | ctx->cfg.max_commit_count = 50; | 320 | ctx->cfg.max_commit_count = 50; |
| @@ -439,7 +442,7 @@ static int prepare_repo_cmd(struct cgit_context *ctx) | |||
| 439 | tmp = xstrdup(ctx->qry.head); | 442 | tmp = xstrdup(ctx->qry.head); |
| 440 | ctx->qry.head = ctx->repo->defbranch; | 443 | ctx->qry.head = ctx->repo->defbranch; |
| 441 | ctx->page.status = 404; | 444 | ctx->page.status = 404; |
| 442 | ctx->page.statusmsg = "not found"; | 445 | ctx->page.statusmsg = "Not found"; |
| 443 | cgit_print_http_headers(ctx); | 446 | cgit_print_http_headers(ctx); |
| 444 | cgit_print_docstart(ctx); | 447 | cgit_print_docstart(ctx); |
| 445 | cgit_print_pageheader(ctx); | 448 | cgit_print_pageheader(ctx); |
| @@ -458,6 +461,8 @@ static void process_request(void *cbdata) | |||
| 458 | cmd = cgit_get_cmd(ctx); | 461 | cmd = cgit_get_cmd(ctx); |
| 459 | if (!cmd) { | 462 | if (!cmd) { |
| 460 | ctx->page.title = "cgit error"; | 463 | ctx->page.title = "cgit error"; |
| 464 | ctx->page.status = 404; | ||
| 465 | ctx->page.statusmsg = "Not found"; | ||
| 461 | cgit_print_http_headers(ctx); | 466 | cgit_print_http_headers(ctx); |
| 462 | cgit_print_docstart(ctx); | 467 | cgit_print_docstart(ctx); |
| 463 | cgit_print_pageheader(ctx); | 468 | cgit_print_pageheader(ctx); |
| @@ -466,6 +471,11 @@ static void process_request(void *cbdata) | |||
| 466 | return; | 471 | return; |
| 467 | } | 472 | } |
| 468 | 473 | ||
| 474 | if (!ctx->cfg.enable_http_clone && cmd->is_clone) { | ||
| 475 | html_status(404, "Not found", 0); | ||
| 476 | return; | ||
| 477 | } | ||
| 478 | |||
| 469 | /* If cmd->want_vpath is set, assume ctx->qry.path contains a "virtual" | 479 | /* If cmd->want_vpath is set, assume ctx->qry.path contains a "virtual" |
| 470 | * in-project path limit to be made available at ctx->qry.vpath. | 480 | * in-project path limit to be made available at ctx->qry.vpath. |
| 471 | * Otherwise, no path limit is in effect (ctx->qry.vpath = NULL). | 481 | * Otherwise, no path limit is in effect (ctx->qry.vpath = NULL). |
| @@ -191,6 +191,7 @@ struct cgit_config { | |||
| 191 | int embedded; | 191 | int embedded; |
| 192 | int enable_filter_overrides; | 192 | int enable_filter_overrides; |
| 193 | int enable_gitweb_owner; | 193 | int enable_gitweb_owner; |
| 194 | int enable_http_clone; | ||
| 194 | int enable_index_links; | 195 | int enable_index_links; |
| 195 | int enable_commit_graph; | 196 | int enable_commit_graph; |
| 196 | int enable_log_filecount; | 197 | int enable_log_filecount; |
diff --git a/cgitrc.5.txt b/cgitrc.5.txt index 65b210f..875d51f 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt | |||
| @@ -105,6 +105,11 @@ enable-gitweb-owner:: | |||
| 105 | for the git config value "gitweb.owner" to determine the owner. | 105 | for the git config value "gitweb.owner" to determine the owner. |
| 106 | Default value: "1". See also: scan-path. | 106 | Default value: "1". See also: scan-path. |
| 107 | 107 | ||
| 108 | enable-http-clone:: | ||
| 109 | If set to "1", cgit will act as an dumb HTTP endpoint for git clones. | ||
| 110 | If you use an alternate way of serving git repositories, you may wish | ||
| 111 | to disable this. Default value: "1". | ||
| 112 | |||
| 108 | enable-index-links:: | 113 | enable-index-links:: |
| 109 | Flag which, when set to "1", will make cgit generate extra links for | 114 | Flag which, when set to "1", will make cgit generate extra links for |
| 110 | each repo in the repository index (specifically, to the "summary", | 115 | each repo in the repository index (specifically, to the "summary", |
| @@ -130,31 +130,31 @@ static void tree_fn(struct cgit_context *ctx) | |||
| 130 | cgit_print_tree(ctx->qry.sha1, ctx->qry.path); | 130 | cgit_print_tree(ctx->qry.sha1, ctx->qry.path); |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | #define def_cmd(name, want_repo, want_layout, want_vpath) \ | 133 | #define def_cmd(name, want_repo, want_layout, want_vpath, is_clone) \ |
| 134 | {#name, name##_fn, want_repo, want_layout, want_vpath} | 134 | {#name, name##_fn, want_repo, want_layout, want_vpath, is_clone} |
| 135 | 135 | ||
| 136 | struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) | 136 | struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) |
| 137 | { | 137 | { |
| 138 | static struct cgit_cmd cmds[] = { | 138 | static struct cgit_cmd cmds[] = { |
| 139 | def_cmd(HEAD, 1, 0, 0), | 139 | def_cmd(HEAD, 1, 0, 0, 1), |
| 140 | def_cmd(atom, 1, 0, 0), | 140 | def_cmd(atom, 1, 0, 0, 0), |
| 141 | def_cmd(about, 0, 1, 0), | 141 | def_cmd(about, 0, 1, 0, 0), |
| 142 | def_cmd(blob, 1, 0, 0), | 142 | def_cmd(blob, 1, 0, 0, 0), |
| 143 | def_cmd(commit, 1, 1, 1), | 143 | def_cmd(commit, 1, 1, 1, 0), |
| 144 | def_cmd(diff, 1, 1, 1), | 144 | def_cmd(diff, 1, 1, 1, 0), |
| 145 | def_cmd(info, 1, 0, 0), | 145 | def_cmd(info, 1, 0, 0, 1), |
| 146 | def_cmd(log, 1, 1, 1), | 146 | def_cmd(log, 1, 1, 1, 0), |
| 147 | def_cmd(ls_cache, 0, 0, 0), | 147 | def_cmd(ls_cache, 0, 0, 0, 0), |
| 148 | def_cmd(objects, 1, 0, 0), | 148 | def_cmd(objects, 1, 0, 0, 1), |
| 149 | def_cmd(patch, 1, 0, 1), | 149 | def_cmd(patch, 1, 0, 1, 0), |
| 150 | def_cmd(plain, 1, 0, 0), | 150 | def_cmd(plain, 1, 0, 0, 0), |
| 151 | def_cmd(refs, 1, 1, 0), | 151 | def_cmd(refs, 1, 1, 0, 0), |
| 152 | def_cmd(repolist, 0, 0, 0), | 152 | def_cmd(repolist, 0, 0, 0, 0), |
| 153 | def_cmd(snapshot, 1, 0, 0), | 153 | def_cmd(snapshot, 1, 0, 0, 0), |
| 154 | def_cmd(stats, 1, 1, 1), | 154 | def_cmd(stats, 1, 1, 1, 0), |
| 155 | def_cmd(summary, 1, 1, 0), | 155 | def_cmd(summary, 1, 1, 0, 0), |
| 156 | def_cmd(tag, 1, 1, 0), | 156 | def_cmd(tag, 1, 1, 0, 0), |
| 157 | def_cmd(tree, 1, 1, 1), | 157 | def_cmd(tree, 1, 1, 1, 0), |
| 158 | }; | 158 | }; |
| 159 | int i; | 159 | int i; |
| 160 | 160 | ||
| @@ -8,7 +8,8 @@ struct cgit_cmd { | |||
| 8 | cgit_cmd_fn fn; | 8 | cgit_cmd_fn fn; |
| 9 | unsigned int want_repo:1, | 9 | unsigned int want_repo:1, |
| 10 | want_layout:1, | 10 | want_layout:1, |
| 11 | want_vpath:1; | 11 | want_vpath:1, |
| 12 | is_clone:1; | ||
| 12 | }; | 13 | }; |
| 13 | 14 | ||
| 14 | extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx); | 15 | extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx); |
| @@ -100,11 +100,10 @@ void print_commit(struct commit *commit, struct rev_info *revs) | |||
| 100 | struct strbuf graphbuf = STRBUF_INIT; | 100 | struct strbuf graphbuf = STRBUF_INIT; |
| 101 | struct strbuf msgbuf = STRBUF_INIT; | 101 | struct strbuf msgbuf = STRBUF_INIT; |
| 102 | 102 | ||
| 103 | if (ctx.repo->enable_log_filecount) { | 103 | if (ctx.repo->enable_log_filecount) |
| 104 | cols++; | ||
| 105 | if (ctx.repo->enable_log_linecount) | ||
| 104 | cols++; | 106 | cols++; |
| 105 | if (ctx.repo->enable_log_linecount) | ||
| 106 | cols++; | ||
| 107 | } | ||
| 108 | 107 | ||
| 109 | if (revs->graph) { | 108 | if (revs->graph) { |
| 110 | /* Advance graph until current commit */ | 109 | /* Advance graph until current commit */ |
| @@ -179,18 +178,18 @@ void print_commit(struct commit *commit, struct rev_info *revs) | |||
| 179 | html_link_close(); | 178 | html_link_close(); |
| 180 | } | 179 | } |
| 181 | 180 | ||
| 182 | if (ctx.repo->enable_log_filecount) { | 181 | if (ctx.repo->enable_log_filecount || ctx.repo->enable_log_linecount) { |
| 183 | files = 0; | 182 | files = 0; |
| 184 | add_lines = 0; | 183 | add_lines = 0; |
| 185 | rem_lines = 0; | 184 | rem_lines = 0; |
| 186 | cgit_diff_commit(commit, inspect_files, ctx.qry.vpath); | 185 | cgit_diff_commit(commit, inspect_files, ctx.qry.vpath); |
| 187 | html("</td><td>"); | ||
| 188 | htmlf("%d", files); | ||
| 189 | if (ctx.repo->enable_log_linecount) { | ||
| 190 | html("</td><td>"); | ||
| 191 | htmlf("-%d/+%d", rem_lines, add_lines); | ||
| 192 | } | ||
| 193 | } | 186 | } |
| 187 | |||
| 188 | if (ctx.repo->enable_log_filecount) | ||
| 189 | htmlf("</td><td>%d", files); | ||
| 190 | if (ctx.repo->enable_log_linecount) | ||
| 191 | htmlf("</td><td>-%d/+%d", rem_lines, add_lines); | ||
| 192 | |||
| 194 | html("</td></tr>\n"); | 193 | html("</td></tr>\n"); |
| 195 | 194 | ||
| 196 | if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */ | 195 | if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */ |
| @@ -379,10 +378,10 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern | |||
| 379 | if (ctx.repo->enable_log_filecount) { | 378 | if (ctx.repo->enable_log_filecount) { |
| 380 | html("<th class='left'>Files</th>"); | 379 | html("<th class='left'>Files</th>"); |
| 381 | columns++; | 380 | columns++; |
| 382 | if (ctx.repo->enable_log_linecount) { | 381 | } |
| 383 | html("<th class='left'>Lines</th>"); | 382 | if (ctx.repo->enable_log_linecount) { |
| 384 | columns++; | 383 | html("<th class='left'>Lines</th>"); |
| 385 | } | 384 | columns++; |
| 386 | } | 385 | } |
| 387 | html("</tr>\n"); | 386 | html("</tr>\n"); |
| 388 | 387 | ||
