| -rw-r--r-- | Makefile | 1 | ||||
| -rw-r--r-- | cgit.c | 1 | ||||
| -rw-r--r-- | cgit.h | 1 | ||||
| -rw-r--r-- | cmd.c | 7 | ||||
| -rw-r--r-- | html.c | 9 | ||||
| -rw-r--r-- | html.h | 3 | ||||
| -rw-r--r-- | ui-clone.c | 10 | ||||
| -rw-r--r-- | ui-plain.c | 82 | ||||
| -rw-r--r-- | ui-plain.h | 6 | ||||
| -rw-r--r-- | ui-shared.c | 8 | ||||
| -rw-r--r-- | ui-shared.h | 2 | ||||
| -rw-r--r-- | ui-tree.c | 8 |
12 files changed, 13 insertions, 125 deletions
@@ -62,7 +62,6 @@ OBJECTS += ui-commit.o OBJECTS += ui-diff.o OBJECTS += ui-log.o OBJECTS += ui-patch.o -OBJECTS += ui-plain.o OBJECTS += ui-refs.o OBJECTS += ui-repolist.o OBJECTS += ui-shared.o @@ -187,7 +187,6 @@ static void prepare_context(struct cgit_context *ctx) ctx->page.mimetype = "text/html"; ctx->page.charset = PAGE_ENCODING; ctx->page.filename = NULL; - ctx->page.size = 0; ctx->page.modified = time(NULL); ctx->page.expires = ctx->page.modified; } @@ -166,7 +166,6 @@ struct cgit_config { struct cgit_page { time_t modified; time_t expires; - size_t size; char *mimetype; char *charset; char *filename; @@ -17,7 +17,6 @@ #include "ui-diff.h" #include "ui-log.h" #include "ui-patch.h" -#include "ui-plain.h" #include "ui-refs.h" #include "ui-repolist.h" #include "ui-snapshot.h" @@ -92,11 +91,6 @@ static void patch_fn(struct cgit_context *ctx) cgit_print_patch(ctx->qry.sha1); } -static void plain_fn(struct cgit_context *ctx) -{ - cgit_print_plain(ctx); -} - static void refs_fn(struct cgit_context *ctx) { cgit_print_refs(); @@ -141,7 +135,6 @@ struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) def_cmd(ls_cache, 0, 0), def_cmd(objects, 1, 0), def_cmd(patch, 1, 0), - def_cmd(plain, 1, 0), def_cmd(refs, 1, 1), def_cmd(repolist, 0, 0), def_cmd(snapshot, 1, 0), @@ -35,11 +35,6 @@ char *fmt(const char *format, ...) return buf[bufidx]; } -void html_raw(const char *data, size_t size) -{ - write(htmlfd, data, size); -} - void html(const char *txt) { write(htmlfd, txt, strlen(txt)); @@ -56,9 +51,9 @@ void htmlf(const char *format, ...) html(buf); } -void html_status(int code, const char *msg, int more_headers) +void html_status(int code, int more_headers) { - htmlf("Status: %d %s\n", code, msg); + htmlf("Status: %d\n", code); if (!more_headers) html("\n"); } @@ -3,10 +3,9 @@ extern int htmlfd; -extern void html_raw(const char *txt, size_t size); extern void html(const char *txt); extern void htmlf(const char *format,...); -extern void html_status(int code, const char *msg, int more_headers); +extern void html_status(int code, int more_headers); extern void html_txt(char *txt); extern void html_ntxt(int len, char *txt); extern void html_attr(char *txt); @@ -48,18 +48,20 @@ static void print_pack_info(struct cgit_context *ctx) static void send_file(struct cgit_context *ctx, char *path) { struct stat st; + int err; if (stat(path, &st)) { switch (errno) { case ENOENT: - html_status(404, "Not found", 0); + err = 404; break; case EACCES: - html_status(403, "Forbidden", 0); + err = 403; break; default: - html_status(400, "Bad request", 0); + err = 400; } + html_status(err, 0); return; } ctx->page.mimetype = "application/octet-stream"; @@ -84,7 +86,7 @@ void cgit_clone_info(struct cgit_context *ctx) void cgit_clone_objects(struct cgit_context *ctx) { if (!ctx->qry.path) { - html_status(400, "Bad request", 0); + html_status(400, 0); return; } diff --git a/ui-plain.c b/ui-plain.c deleted file mode 100644 index 35888a0..0000000 --- a/ui-plain.c +++ /dev/null @@ -1,82 +0,0 @@ -/* ui-plain.c: functions for output of plain blobs by path - * - * Copyright (C) 2008 Lars Hjemli - * - * Licensed under GNU General Public License v2 - * (see COPYING for full license text) - */ - -#include "cgit.h" -#include "html.h" -#include "ui-shared.h" - -char *curr_rev; -char *match_path; -int match; - -static void print_object(const unsigned char *sha1, const char *path) -{ - enum object_type type; - char *buf; - size_t size; - - type = sha1_object_info(sha1, &size); - if (type == OBJ_BAD) { - html_status(404, "Not found", 0); - return; - } - - buf = read_sha1_file(sha1, &type, &size); - if (!buf) { - html_status(404, "Not found", 0); - return; - } - ctx.page.mimetype = "text/plain"; - ctx.page.filename = fmt("%s", path); - ctx.page.size = size; - cgit_print_http_headers(&ctx); - html_raw(buf, size); - match = 1; -} - -static int walk_tree(const unsigned char *sha1, const char *base, int baselen, - const char *pathname, unsigned mode, int stage, - void *cbdata) -{ - fprintf(stderr, "[cgit] walk_tree.pathname=%s", pathname); - - if (!pathname || strcmp(match_path, pathname)) - return READ_TREE_RECURSIVE; - - if (S_ISREG(mode)) - print_object(sha1, pathname); - - return 0; -} - -void cgit_print_plain(struct cgit_context *ctx) -{ - const char *rev = ctx->qry.sha1; - unsigned char sha1[20]; - struct commit *commit; - const char *paths[] = {ctx->qry.path, NULL}; - - if (!rev) - rev = ctx->qry.head; - - curr_rev = xstrdup(rev); - if (get_sha1(rev, sha1)) { - html_status(404, "Not found", 0); - return; - } - commit = lookup_commit_reference(sha1); - if (!commit || parse_commit(commit)) { - html_status(404, "Not found", 0); - return; - } - match_path = ctx->qry.path; - fprintf(stderr, "[cgit] match_path=%s", match_path); - read_tree_recursive(commit->tree, NULL, 0, 0, paths, walk_tree, NULL); - if (!match) - html_status(404, "Not found", 0); -} diff --git a/ui-plain.h b/ui-plain.h deleted file mode 100644 index 4373118..0000000 --- a/ui-plain.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef UI_PLAIN_H -#define UI_PLAIN_H - -extern void cgit_print_plain(struct cgit_context *ctx); - -#endif /* UI_PLAIN_H */ diff --git a/ui-shared.c b/ui-shared.c index 4818e70..37c60b2 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -258,12 +258,6 @@ void cgit_tree_link(char *name, char *title, char *class, char *head, reporevlink("tree", name, title, class, head, rev, path); } -void cgit_plain_link(char *name, char *title, char *class, char *head, - char *rev, char *path) -{ - reporevlink("plain", name, title, class, head, rev, path); -} - void cgit_log_link(char *name, char *title, char *class, char *head, char *rev, char *path, int ofs, char *grep, char *pattern) { @@ -439,8 +433,6 @@ void cgit_print_http_headers(struct cgit_context *ctx) ctx->page.charset); else if (ctx->page.mimetype) htmlf("Content-Type: %s\n", ctx->page.mimetype); - if (ctx->page.size) - htmlf("Content-Length: %ld\n", ctx->page.size); if (ctx->page.filename) htmlf("Content-Disposition: inline; filename=\"%s\"\n", ctx->page.filename); diff --git a/ui-shared.h b/ui-shared.h index 747f092..f4123d3 100644 --- a/ui-shared.h +++ b/ui-shared.h @@ -12,8 +12,6 @@ extern void cgit_index_link(char *name, char *title, char *class, char *pattern, int ofs); extern void cgit_tree_link(char *name, char *title, char *class, char *head, char *rev, char *path); -extern void cgit_plain_link(char *name, char *title, char *class, char *head, - char *rev, char *path); extern void cgit_log_link(char *name, char *title, char *class, char *head, char *rev, char *path, int ofs, char *grep, char *pattern); @@ -35,10 +35,10 @@ static void print_object(const unsigned char *sha1, char *path) return; } - html(" ("); - cgit_plain_link("plain", NULL, NULL, ctx.qry.head, - curr_rev, path); - htmlf(")<br/>blob: %s", sha1_to_hex(sha1)); + html(" blob: <a href='"); + html_attr(cgit_pageurl(ctx.qry.repo, "blob", + fmt("id=%s&path=%s", sha1_to_hex(sha1), path))); + htmlf("'>%s</a>",sha1_to_hex(sha1)); html("<table summary='blob content' class='blob'>\n"); idx = 0; |