author | Michael Krelin <hacker@klever.net> | 2008-06-24 21:42:32 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2008-06-24 21:42:32 (UTC) |
commit | 42effc939090b2fbf1b2b76cd1d9c30fabcd230e (patch) (unidiff) | |
tree | ba75a2bc400a2a1dab6417b33b97a0d020fabf0f | |
parent | 01d2dce7e73e3f022d186de27dd5d15574144ca8 (diff) | |
download | cgit-42effc939090b2fbf1b2b76cd1d9c30fabcd230e.zip cgit-42effc939090b2fbf1b2b76cd1d9c30fabcd230e.tar.gz cgit-42effc939090b2fbf1b2b76cd1d9c30fabcd230e.tar.bz2 |
allow specification of directly linked blobs mimetypes
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | cgit.c | 2 | ||||
-rw-r--r-- | cgit.h | 1 | ||||
-rw-r--r-- | ui-blob.c | 2 |
3 files changed, 4 insertions, 1 deletions
@@ -131,32 +131,34 @@ static void querystring_cb(const char *name, const char *value) | |||
131 | ctx.qry.search = xstrdup(value); | 131 | ctx.qry.search = xstrdup(value); |
132 | } else if (!strcmp(name, "h")) { | 132 | } else if (!strcmp(name, "h")) { |
133 | ctx.qry.head = xstrdup(value); | 133 | ctx.qry.head = xstrdup(value); |
134 | ctx.qry.has_symref = 1; | 134 | ctx.qry.has_symref = 1; |
135 | } else if (!strcmp(name, "id")) { | 135 | } else if (!strcmp(name, "id")) { |
136 | ctx.qry.sha1 = xstrdup(value); | 136 | ctx.qry.sha1 = xstrdup(value); |
137 | ctx.qry.has_sha1 = 1; | 137 | ctx.qry.has_sha1 = 1; |
138 | } else if (!strcmp(name, "id2")) { | 138 | } else if (!strcmp(name, "id2")) { |
139 | ctx.qry.sha2 = xstrdup(value); | 139 | ctx.qry.sha2 = xstrdup(value); |
140 | ctx.qry.has_sha1 = 1; | 140 | ctx.qry.has_sha1 = 1; |
141 | } else if (!strcmp(name, "ofs")) { | 141 | } else if (!strcmp(name, "ofs")) { |
142 | ctx.qry.ofs = atoi(value); | 142 | ctx.qry.ofs = atoi(value); |
143 | } else if (!strcmp(name, "path")) { | 143 | } else if (!strcmp(name, "path")) { |
144 | ctx.qry.path = trim_end(value, '/'); | 144 | ctx.qry.path = trim_end(value, '/'); |
145 | } else if (!strcmp(name, "name")) { | 145 | } else if (!strcmp(name, "name")) { |
146 | ctx.qry.name = xstrdup(value); | 146 | ctx.qry.name = xstrdup(value); |
147 | } else if (!strcmp(name, "mimetype")) { | ||
148 | ctx.qry.mimetype = xstrdup(value); | ||
147 | } | 149 | } |
148 | } | 150 | } |
149 | 151 | ||
150 | static void prepare_context(struct cgit_context *ctx) | 152 | static void prepare_context(struct cgit_context *ctx) |
151 | { | 153 | { |
152 | memset(ctx, 0, sizeof(ctx)); | 154 | memset(ctx, 0, sizeof(ctx)); |
153 | ctx->cfg.agefile = "info/web/last-modified"; | 155 | ctx->cfg.agefile = "info/web/last-modified"; |
154 | ctx->cfg.nocache = 0; | 156 | ctx->cfg.nocache = 0; |
155 | ctx->cfg.cache_size = 0; | 157 | ctx->cfg.cache_size = 0; |
156 | ctx->cfg.cache_dynamic_ttl = 5; | 158 | ctx->cfg.cache_dynamic_ttl = 5; |
157 | ctx->cfg.cache_max_create_time = 5; | 159 | ctx->cfg.cache_max_create_time = 5; |
158 | ctx->cfg.cache_repo_ttl = 5; | 160 | ctx->cfg.cache_repo_ttl = 5; |
159 | ctx->cfg.cache_root = CGIT_CACHE_ROOT; | 161 | ctx->cfg.cache_root = CGIT_CACHE_ROOT; |
160 | ctx->cfg.cache_root_ttl = 5; | 162 | ctx->cfg.cache_root_ttl = 5; |
161 | ctx->cfg.cache_static_ttl = -1; | 163 | ctx->cfg.cache_static_ttl = -1; |
162 | ctx->cfg.css = "/cgit.css"; | 164 | ctx->cfg.css = "/cgit.css"; |
@@ -103,32 +103,33 @@ struct reflist { | |||
103 | int count; | 103 | int count; |
104 | }; | 104 | }; |
105 | 105 | ||
106 | struct cgit_query { | 106 | struct cgit_query { |
107 | int has_symref; | 107 | int has_symref; |
108 | int has_sha1; | 108 | int has_sha1; |
109 | char *raw; | 109 | char *raw; |
110 | char *repo; | 110 | char *repo; |
111 | char *page; | 111 | char *page; |
112 | char *search; | 112 | char *search; |
113 | char *grep; | 113 | char *grep; |
114 | char *head; | 114 | char *head; |
115 | char *sha1; | 115 | char *sha1; |
116 | char *sha2; | 116 | char *sha2; |
117 | char *path; | 117 | char *path; |
118 | char *name; | 118 | char *name; |
119 | char *mimetype; | ||
119 | int ofs; | 120 | int ofs; |
120 | }; | 121 | }; |
121 | 122 | ||
122 | struct cgit_config { | 123 | struct cgit_config { |
123 | char *agefile; | 124 | char *agefile; |
124 | char *cache_root; | 125 | char *cache_root; |
125 | char *clone_prefix; | 126 | char *clone_prefix; |
126 | char *css; | 127 | char *css; |
127 | char *index_header; | 128 | char *index_header; |
128 | char *index_info; | 129 | char *index_info; |
129 | char *logo; | 130 | char *logo; |
130 | char *logo_link; | 131 | char *logo_link; |
131 | char *module_link; | 132 | char *module_link; |
132 | char *repo_group; | 133 | char *repo_group; |
133 | char *robots; | 134 | char *robots; |
134 | char *root_title; | 135 | char *root_title; |
@@ -52,21 +52,21 @@ void cgit_print_blob(const char *hex, char *path, const char *head) | |||
52 | read_tree_recursive(commit->tree, NULL, 0, 0, paths, walk_tree); | 52 | read_tree_recursive(commit->tree, NULL, 0, 0, paths, walk_tree); |
53 | type = sha1_object_info(sha1,&size); | 53 | type = sha1_object_info(sha1,&size); |
54 | } | 54 | } |
55 | 55 | ||
56 | if (type == OBJ_BAD) { | 56 | if (type == OBJ_BAD) { |
57 | cgit_print_error(fmt("Bad object name: %s", hex)); | 57 | cgit_print_error(fmt("Bad object name: %s", hex)); |
58 | return; | 58 | return; |
59 | } | 59 | } |
60 | 60 | ||
61 | buf = read_sha1_file(sha1, &type, &size); | 61 | buf = read_sha1_file(sha1, &type, &size); |
62 | if (!buf) { | 62 | if (!buf) { |
63 | cgit_print_error(fmt("Error reading object %s", hex)); | 63 | cgit_print_error(fmt("Error reading object %s", hex)); |
64 | return; | 64 | return; |
65 | } | 65 | } |
66 | 66 | ||
67 | buf[size] = '\0'; | 67 | buf[size] = '\0'; |
68 | ctx.page.mimetype = NULL; | 68 | ctx.page.mimetype = ctx.qry.mimetype; |
69 | ctx.page.filename = path; | 69 | ctx.page.filename = path; |
70 | cgit_print_http_headers(&ctx); | 70 | cgit_print_http_headers(&ctx); |
71 | write(htmlfd, buf, size); | 71 | write(htmlfd, buf, size); |
72 | } | 72 | } |