author | Lars Hjemli <hjemli@gmail.com> | 2009-02-13 19:43:30 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2009-07-25 10:55:15 (UTC) |
commit | c4d46c7035d07070ac1ebf0c0b44df927358687f (patch) (unidiff) | |
tree | 562cf4f01afe78b92b13ad5be5dc01e07db04a66 /cgit.h | |
parent | 286a905842dc0bec6d21a614ec4a97c5f19d5bc4 (diff) | |
download | cgit-c4d46c7035d07070ac1ebf0c0b44df927358687f.zip cgit-c4d46c7035d07070ac1ebf0c0b44df927358687f.tar.gz cgit-c4d46c7035d07070ac1ebf0c0b44df927358687f.tar.bz2 |
Add support for mime type registration and lookup
This patch makes it possible to register mappings from filename
extension to mime type in cgitrc and use this mapping when returning
blob content in `plain` view.
The reason for adding this mapping to cgitrc (as opposed to parsing
something like /etc/mime.types) is to allow quick lookup of a limited
number of filename extensions (/etc/mime-types on my machine currently
contains over 700 entries).
NB: A nice addition to this patch would be to parse /etc/mime.types
when `plain` view is requested for a file with an extension for which
there is no mapping registered in cgitrc.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.h | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -1,65 +1,66 @@ | |||
1 | #ifndef CGIT_H | 1 | #ifndef CGIT_H |
2 | #define CGIT_H | 2 | #define CGIT_H |
3 | 3 | ||
4 | 4 | ||
5 | #include <git-compat-util.h> | 5 | #include <git-compat-util.h> |
6 | #include <cache.h> | 6 | #include <cache.h> |
7 | #include <grep.h> | 7 | #include <grep.h> |
8 | #include <object.h> | 8 | #include <object.h> |
9 | #include <tree.h> | 9 | #include <tree.h> |
10 | #include <commit.h> | 10 | #include <commit.h> |
11 | #include <tag.h> | 11 | #include <tag.h> |
12 | #include <diff.h> | 12 | #include <diff.h> |
13 | #include <diffcore.h> | 13 | #include <diffcore.h> |
14 | #include <refs.h> | 14 | #include <refs.h> |
15 | #include <revision.h> | 15 | #include <revision.h> |
16 | #include <log-tree.h> | 16 | #include <log-tree.h> |
17 | #include <archive.h> | 17 | #include <archive.h> |
18 | #include <string-list.h> | ||
18 | #include <xdiff-interface.h> | 19 | #include <xdiff-interface.h> |
19 | #include <xdiff/xdiff.h> | 20 | #include <xdiff/xdiff.h> |
20 | #include <utf8.h> | 21 | #include <utf8.h> |
21 | 22 | ||
22 | 23 | ||
23 | /* | 24 | /* |
24 | * Dateformats used on misc. pages | 25 | * Dateformats used on misc. pages |
25 | */ | 26 | */ |
26 | #define FMT_LONGDATE "%Y-%m-%d %H:%M:%S (%Z)" | 27 | #define FMT_LONGDATE "%Y-%m-%d %H:%M:%S (%Z)" |
27 | #define FMT_SHORTDATE "%Y-%m-%d" | 28 | #define FMT_SHORTDATE "%Y-%m-%d" |
28 | #define FMT_ATOMDATE "%Y-%m-%dT%H:%M:%SZ" | 29 | #define FMT_ATOMDATE "%Y-%m-%dT%H:%M:%SZ" |
29 | 30 | ||
30 | 31 | ||
31 | /* | 32 | /* |
32 | * Limits used for relative dates | 33 | * Limits used for relative dates |
33 | */ | 34 | */ |
34 | #define TM_MIN 60 | 35 | #define TM_MIN 60 |
35 | #define TM_HOUR (TM_MIN * 60) | 36 | #define TM_HOUR (TM_MIN * 60) |
36 | #define TM_DAY (TM_HOUR * 24) | 37 | #define TM_DAY (TM_HOUR * 24) |
37 | #define TM_WEEK (TM_DAY * 7) | 38 | #define TM_WEEK (TM_DAY * 7) |
38 | #define TM_YEAR (TM_DAY * 365) | 39 | #define TM_YEAR (TM_DAY * 365) |
39 | #define TM_MONTH (TM_YEAR / 12.0) | 40 | #define TM_MONTH (TM_YEAR / 12.0) |
40 | 41 | ||
41 | 42 | ||
42 | /* | 43 | /* |
43 | * Default encoding | 44 | * Default encoding |
44 | */ | 45 | */ |
45 | #define PAGE_ENCODING "UTF-8" | 46 | #define PAGE_ENCODING "UTF-8" |
46 | 47 | ||
47 | typedef void (*configfn)(const char *name, const char *value); | 48 | typedef void (*configfn)(const char *name, const char *value); |
48 | typedef void (*filepair_fn)(struct diff_filepair *pair); | 49 | typedef void (*filepair_fn)(struct diff_filepair *pair); |
49 | typedef void (*linediff_fn)(char *line, int len); | 50 | typedef void (*linediff_fn)(char *line, int len); |
50 | 51 | ||
51 | struct cgit_repo { | 52 | struct cgit_repo { |
52 | char *url; | 53 | char *url; |
53 | char *name; | 54 | char *name; |
54 | char *path; | 55 | char *path; |
55 | char *desc; | 56 | char *desc; |
56 | char *owner; | 57 | char *owner; |
57 | char *defbranch; | 58 | char *defbranch; |
58 | char *group; | 59 | char *group; |
59 | char *module_link; | 60 | char *module_link; |
60 | char *readme; | 61 | char *readme; |
61 | char *clone_url; | 62 | char *clone_url; |
62 | int snapshots; | 63 | int snapshots; |
63 | int enable_log_filecount; | 64 | int enable_log_filecount; |
64 | int enable_log_linecount; | 65 | int enable_log_linecount; |
65 | int max_stats; | 66 | int max_stats; |
@@ -129,96 +130,97 @@ struct cgit_query { | |||
129 | int showmsg; | 130 | int showmsg; |
130 | }; | 131 | }; |
131 | 132 | ||
132 | struct cgit_config { | 133 | struct cgit_config { |
133 | char *agefile; | 134 | char *agefile; |
134 | char *cache_root; | 135 | char *cache_root; |
135 | char *clone_prefix; | 136 | char *clone_prefix; |
136 | char *css; | 137 | char *css; |
137 | char *favicon; | 138 | char *favicon; |
138 | char *footer; | 139 | char *footer; |
139 | char *head_include; | 140 | char *head_include; |
140 | char *header; | 141 | char *header; |
141 | char *index_header; | 142 | char *index_header; |
142 | char *index_info; | 143 | char *index_info; |
143 | char *logo; | 144 | char *logo; |
144 | char *logo_link; | 145 | char *logo_link; |
145 | char *module_link; | 146 | char *module_link; |
146 | char *repo_group; | 147 | char *repo_group; |
147 | char *robots; | 148 | char *robots; |
148 | char *root_title; | 149 | char *root_title; |
149 | char *root_desc; | 150 | char *root_desc; |
150 | char *root_readme; | 151 | char *root_readme; |
151 | char *script_name; | 152 | char *script_name; |
152 | char *virtual_root; | 153 | char *virtual_root; |
153 | int cache_size; | 154 | int cache_size; |
154 | int cache_dynamic_ttl; | 155 | int cache_dynamic_ttl; |
155 | int cache_max_create_time; | 156 | int cache_max_create_time; |
156 | int cache_repo_ttl; | 157 | int cache_repo_ttl; |
157 | int cache_root_ttl; | 158 | int cache_root_ttl; |
158 | int cache_static_ttl; | 159 | int cache_static_ttl; |
159 | int embedded; | 160 | int embedded; |
160 | int enable_index_links; | 161 | int enable_index_links; |
161 | int enable_log_filecount; | 162 | int enable_log_filecount; |
162 | int enable_log_linecount; | 163 | int enable_log_linecount; |
163 | int local_time; | 164 | int local_time; |
164 | int max_repo_count; | 165 | int max_repo_count; |
165 | int max_commit_count; | 166 | int max_commit_count; |
166 | int max_lock_attempts; | 167 | int max_lock_attempts; |
167 | int max_msg_len; | 168 | int max_msg_len; |
168 | int max_repodesc_len; | 169 | int max_repodesc_len; |
169 | int max_stats; | 170 | int max_stats; |
170 | int nocache; | 171 | int nocache; |
171 | int noheader; | 172 | int noheader; |
172 | int renamelimit; | 173 | int renamelimit; |
173 | int snapshots; | 174 | int snapshots; |
174 | int summary_branches; | 175 | int summary_branches; |
175 | int summary_log; | 176 | int summary_log; |
176 | int summary_tags; | 177 | int summary_tags; |
178 | struct string_list mimetypes; | ||
177 | }; | 179 | }; |
178 | 180 | ||
179 | struct cgit_page { | 181 | struct cgit_page { |
180 | time_t modified; | 182 | time_t modified; |
181 | time_t expires; | 183 | time_t expires; |
182 | size_t size; | 184 | size_t size; |
183 | char *mimetype; | 185 | char *mimetype; |
184 | char *charset; | 186 | char *charset; |
185 | char *filename; | 187 | char *filename; |
186 | char *etag; | 188 | char *etag; |
187 | char *title; | 189 | char *title; |
188 | int status; | 190 | int status; |
189 | char *statusmsg; | 191 | char *statusmsg; |
190 | }; | 192 | }; |
191 | 193 | ||
192 | struct cgit_context { | 194 | struct cgit_context { |
193 | struct cgit_query qry; | 195 | struct cgit_query qry; |
194 | struct cgit_config cfg; | 196 | struct cgit_config cfg; |
195 | struct cgit_repo *repo; | 197 | struct cgit_repo *repo; |
196 | struct cgit_page page; | 198 | struct cgit_page page; |
197 | }; | 199 | }; |
198 | 200 | ||
199 | struct cgit_snapshot_format { | 201 | struct cgit_snapshot_format { |
200 | const char *suffix; | 202 | const char *suffix; |
201 | const char *mimetype; | 203 | const char *mimetype; |
202 | write_archive_fn_t write_func; | 204 | write_archive_fn_t write_func; |
203 | int bit; | 205 | int bit; |
204 | }; | 206 | }; |
205 | 207 | ||
206 | extern const char *cgit_version; | 208 | extern const char *cgit_version; |
207 | 209 | ||
208 | extern struct cgit_repolist cgit_repolist; | 210 | extern struct cgit_repolist cgit_repolist; |
209 | extern struct cgit_context ctx; | 211 | extern struct cgit_context ctx; |
210 | extern const struct cgit_snapshot_format cgit_snapshot_formats[]; | 212 | extern const struct cgit_snapshot_format cgit_snapshot_formats[]; |
211 | 213 | ||
212 | extern struct cgit_repo *cgit_add_repo(const char *url); | 214 | extern struct cgit_repo *cgit_add_repo(const char *url); |
213 | extern struct cgit_repo *cgit_get_repoinfo(const char *url); | 215 | extern struct cgit_repo *cgit_get_repoinfo(const char *url); |
214 | extern void cgit_repo_config_cb(const char *name, const char *value); | 216 | extern void cgit_repo_config_cb(const char *name, const char *value); |
215 | 217 | ||
216 | extern int chk_zero(int result, char *msg); | 218 | extern int chk_zero(int result, char *msg); |
217 | extern int chk_positive(int result, char *msg); | 219 | extern int chk_positive(int result, char *msg); |
218 | extern int chk_non_negative(int result, char *msg); | 220 | extern int chk_non_negative(int result, char *msg); |
219 | 221 | ||
220 | extern char *trim_end(const char *str, char c); | 222 | extern char *trim_end(const char *str, char c); |
221 | extern char *strlpart(char *txt, int maxlen); | 223 | extern char *strlpart(char *txt, int maxlen); |
222 | extern char *strrpart(char *txt, int maxlen); | 224 | extern char *strrpart(char *txt, int maxlen); |
223 | 225 | ||
224 | extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); | 226 | extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); |