summaryrefslogtreecommitdiffabout
path: root/cgit.h
authorJohan Herland <johan@herland.net>2010-06-09 23:09:26 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2010-06-19 08:40:22 (UTC)
commit0ff143df7043b7dd87c31c50fa875bc96d1a7779 (patch) (unidiff)
treed1625ba2aafed1ddfebc429921abdbb0d692042f /cgit.h
parent0e34c6d1ef32ea8f69019272fe72dbf2aeaba392 (diff)
downloadcgit-0ff143df7043b7dd87c31c50fa875bc96d1a7779.zip
cgit-0ff143df7043b7dd87c31c50fa875bc96d1a7779.tar.gz
cgit-0ff143df7043b7dd87c31c50fa875bc96d1a7779.tar.bz2
struct cgit_cmd: Differentiate between various usages of ctx.qry.path
For many commands/pages (e.g. 'tree', 'diff', 'plain', etc.), the ctx.qry.path argument is interpreted as a path within the "virtual" project directory structure. However, for some other commands (notably 'refs', and the clone-related commands) ctx.qry.path is used in a different context (as a more or less "real" path within the '.git' directory). This patch differentiates between these two usages of ctx.qry.path, by introducing a new variable - ctx.qry.vpath - which is equal to ctx.qry.path in the former case, and NULL in the latter. This will become useful in future patches when we want various pages and the links between them to preserve existing in-project paths. Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'cgit.h') (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/cgit.h b/cgit.h
index cd4af72..f990b15 100644
--- a/cgit.h
+++ b/cgit.h
@@ -1,299 +1,300 @@
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 <string-list.h>
19#include <xdiff-interface.h> 19#include <xdiff-interface.h>
20#include <xdiff/xdiff.h> 20#include <xdiff/xdiff.h>
21#include <utf8.h> 21#include <utf8.h>
22 22
23 23
24/* 24/*
25 * Dateformats used on misc. pages 25 * Dateformats used on misc. pages
26 */ 26 */
27#define FMT_LONGDATE "%Y-%m-%d %H:%M:%S (%Z)" 27#define FMT_LONGDATE "%Y-%m-%d %H:%M:%S (%Z)"
28#define FMT_SHORTDATE "%Y-%m-%d" 28#define FMT_SHORTDATE "%Y-%m-%d"
29#define FMT_ATOMDATE "%Y-%m-%dT%H:%M:%SZ" 29#define FMT_ATOMDATE "%Y-%m-%dT%H:%M:%SZ"
30 30
31 31
32/* 32/*
33 * Limits used for relative dates 33 * Limits used for relative dates
34 */ 34 */
35#define TM_MIN 60 35#define TM_MIN 60
36#define TM_HOUR (TM_MIN * 60) 36#define TM_HOUR (TM_MIN * 60)
37#define TM_DAY (TM_HOUR * 24) 37#define TM_DAY (TM_HOUR * 24)
38#define TM_WEEK (TM_DAY * 7) 38#define TM_WEEK (TM_DAY * 7)
39#define TM_YEAR (TM_DAY * 365) 39#define TM_YEAR (TM_DAY * 365)
40#define TM_MONTH (TM_YEAR / 12.0) 40#define TM_MONTH (TM_YEAR / 12.0)
41 41
42 42
43/* 43/*
44 * Default encoding 44 * Default encoding
45 */ 45 */
46#define PAGE_ENCODING "UTF-8" 46#define PAGE_ENCODING "UTF-8"
47 47
48typedef void (*configfn)(const char *name, const char *value); 48typedef void (*configfn)(const char *name, const char *value);
49typedef void (*filepair_fn)(struct diff_filepair *pair); 49typedef void (*filepair_fn)(struct diff_filepair *pair);
50typedef void (*linediff_fn)(char *line, int len); 50typedef void (*linediff_fn)(char *line, int len);
51 51
52struct cgit_filter { 52struct cgit_filter {
53 char *cmd; 53 char *cmd;
54 char **argv; 54 char **argv;
55 int old_stdout; 55 int old_stdout;
56 int pipe_fh[2]; 56 int pipe_fh[2];
57 int pid; 57 int pid;
58 int exitstatus; 58 int exitstatus;
59}; 59};
60 60
61struct cgit_repo { 61struct cgit_repo {
62 char *url; 62 char *url;
63 char *name; 63 char *name;
64 char *path; 64 char *path;
65 char *desc; 65 char *desc;
66 char *owner; 66 char *owner;
67 char *defbranch; 67 char *defbranch;
68 char *module_link; 68 char *module_link;
69 char *readme; 69 char *readme;
70 char *section; 70 char *section;
71 char *clone_url; 71 char *clone_url;
72 int snapshots; 72 int snapshots;
73 int enable_log_filecount; 73 int enable_log_filecount;
74 int enable_log_linecount; 74 int enable_log_linecount;
75 int enable_remote_branches; 75 int enable_remote_branches;
76 int max_stats; 76 int max_stats;
77 time_t mtime; 77 time_t mtime;
78 struct cgit_filter *about_filter; 78 struct cgit_filter *about_filter;
79 struct cgit_filter *commit_filter; 79 struct cgit_filter *commit_filter;
80 struct cgit_filter *source_filter; 80 struct cgit_filter *source_filter;
81}; 81};
82 82
83typedef void (*repo_config_fn)(struct cgit_repo *repo, const char *name, 83typedef void (*repo_config_fn)(struct cgit_repo *repo, const char *name,
84 const char *value); 84 const char *value);
85 85
86struct cgit_repolist { 86struct cgit_repolist {
87 int length; 87 int length;
88 int count; 88 int count;
89 struct cgit_repo *repos; 89 struct cgit_repo *repos;
90}; 90};
91 91
92struct commitinfo { 92struct commitinfo {
93 struct commit *commit; 93 struct commit *commit;
94 char *author; 94 char *author;
95 char *author_email; 95 char *author_email;
96 unsigned long author_date; 96 unsigned long author_date;
97 char *committer; 97 char *committer;
98 char *committer_email; 98 char *committer_email;
99 unsigned long committer_date; 99 unsigned long committer_date;
100 char *subject; 100 char *subject;
101 char *msg; 101 char *msg;
102 char *msg_encoding; 102 char *msg_encoding;
103}; 103};
104 104
105struct taginfo { 105struct taginfo {
106 char *tagger; 106 char *tagger;
107 char *tagger_email; 107 char *tagger_email;
108 unsigned long tagger_date; 108 unsigned long tagger_date;
109 char *msg; 109 char *msg;
110}; 110};
111 111
112struct refinfo { 112struct refinfo {
113 const char *refname; 113 const char *refname;
114 struct object *object; 114 struct object *object;
115 union { 115 union {
116 struct taginfo *tag; 116 struct taginfo *tag;
117 struct commitinfo *commit; 117 struct commitinfo *commit;
118 }; 118 };
119}; 119};
120 120
121struct reflist { 121struct reflist {
122 struct refinfo **refs; 122 struct refinfo **refs;
123 int alloc; 123 int alloc;
124 int count; 124 int count;
125}; 125};
126 126
127struct cgit_query { 127struct cgit_query {
128 int has_symref; 128 int has_symref;
129 int has_sha1; 129 int has_sha1;
130 char *raw; 130 char *raw;
131 char *repo; 131 char *repo;
132 char *page; 132 char *page;
133 char *search; 133 char *search;
134 char *grep; 134 char *grep;
135 char *head; 135 char *head;
136 char *sha1; 136 char *sha1;
137 char *sha2; 137 char *sha2;
138 char *path; 138 char *path;
139 char *name; 139 char *name;
140 char *mimetype; 140 char *mimetype;
141 char *url; 141 char *url;
142 char *period; 142 char *period;
143 int ofs; 143 int ofs;
144 int nohead; 144 int nohead;
145 char *sort; 145 char *sort;
146 int showmsg; 146 int showmsg;
147 int ssdiff; 147 int ssdiff;
148 char *vpath;
148}; 149};
149 150
150struct cgit_config { 151struct cgit_config {
151 char *agefile; 152 char *agefile;
152 char *cache_root; 153 char *cache_root;
153 char *clone_prefix; 154 char *clone_prefix;
154 char *css; 155 char *css;
155 char *favicon; 156 char *favicon;
156 char *footer; 157 char *footer;
157 char *head_include; 158 char *head_include;
158 char *header; 159 char *header;
159 char *index_header; 160 char *index_header;
160 char *index_info; 161 char *index_info;
161 char *logo; 162 char *logo;
162 char *logo_link; 163 char *logo_link;
163 char *module_link; 164 char *module_link;
164 char *robots; 165 char *robots;
165 char *root_title; 166 char *root_title;
166 char *root_desc; 167 char *root_desc;
167 char *root_readme; 168 char *root_readme;
168 char *script_name; 169 char *script_name;
169 char *section; 170 char *section;
170 char *virtual_root; 171 char *virtual_root;
171 int cache_size; 172 int cache_size;
172 int cache_dynamic_ttl; 173 int cache_dynamic_ttl;
173 int cache_max_create_time; 174 int cache_max_create_time;
174 int cache_repo_ttl; 175 int cache_repo_ttl;
175 int cache_root_ttl; 176 int cache_root_ttl;
176 int cache_scanrc_ttl; 177 int cache_scanrc_ttl;
177 int cache_static_ttl; 178 int cache_static_ttl;
178 int embedded; 179 int embedded;
179 int enable_filter_overrides; 180 int enable_filter_overrides;
180 int enable_index_links; 181 int enable_index_links;
181 int enable_log_filecount; 182 int enable_log_filecount;
182 int enable_log_linecount; 183 int enable_log_linecount;
183 int enable_remote_branches; 184 int enable_remote_branches;
184 int enable_tree_linenumbers; 185 int enable_tree_linenumbers;
185 int local_time; 186 int local_time;
186 int max_repo_count; 187 int max_repo_count;
187 int max_commit_count; 188 int max_commit_count;
188 int max_lock_attempts; 189 int max_lock_attempts;
189 int max_msg_len; 190 int max_msg_len;
190 int max_repodesc_len; 191 int max_repodesc_len;
191 int max_blob_size; 192 int max_blob_size;
192 int max_stats; 193 int max_stats;
193 int nocache; 194 int nocache;
194 int noplainemail; 195 int noplainemail;
195 int noheader; 196 int noheader;
196 int renamelimit; 197 int renamelimit;
197 int snapshots; 198 int snapshots;
198 int summary_branches; 199 int summary_branches;
199 int summary_log; 200 int summary_log;
200 int summary_tags; 201 int summary_tags;
201 int ssdiff; 202 int ssdiff;
202 struct string_list mimetypes; 203 struct string_list mimetypes;
203 struct cgit_filter *about_filter; 204 struct cgit_filter *about_filter;
204 struct cgit_filter *commit_filter; 205 struct cgit_filter *commit_filter;
205 struct cgit_filter *source_filter; 206 struct cgit_filter *source_filter;
206}; 207};
207 208
208struct cgit_page { 209struct cgit_page {
209 time_t modified; 210 time_t modified;
210 time_t expires; 211 time_t expires;
211 size_t size; 212 size_t size;
212 char *mimetype; 213 char *mimetype;
213 char *charset; 214 char *charset;
214 char *filename; 215 char *filename;
215 char *etag; 216 char *etag;
216 char *title; 217 char *title;
217 int status; 218 int status;
218 char *statusmsg; 219 char *statusmsg;
219}; 220};
220 221
221struct cgit_environment { 222struct cgit_environment {
222 char *cgit_config; 223 char *cgit_config;
223 char *http_host; 224 char *http_host;
224 char *https; 225 char *https;
225 char *no_http; 226 char *no_http;
226 char *path_info; 227 char *path_info;
227 char *query_string; 228 char *query_string;
228 char *request_method; 229 char *request_method;
229 char *script_name; 230 char *script_name;
230 char *server_name; 231 char *server_name;
231 char *server_port; 232 char *server_port;
232}; 233};
233 234
234struct cgit_context { 235struct cgit_context {
235 struct cgit_environment env; 236 struct cgit_environment env;
236 struct cgit_query qry; 237 struct cgit_query qry;
237 struct cgit_config cfg; 238 struct cgit_config cfg;
238 struct cgit_repo *repo; 239 struct cgit_repo *repo;
239 struct cgit_page page; 240 struct cgit_page page;
240}; 241};
241 242
242struct cgit_snapshot_format { 243struct cgit_snapshot_format {
243 const char *suffix; 244 const char *suffix;
244 const char *mimetype; 245 const char *mimetype;
245 write_archive_fn_t write_func; 246 write_archive_fn_t write_func;
246 int bit; 247 int bit;
247}; 248};
248 249
249extern const char *cgit_version; 250extern const char *cgit_version;
250 251
251extern struct cgit_repolist cgit_repolist; 252extern struct cgit_repolist cgit_repolist;
252extern struct cgit_context ctx; 253extern struct cgit_context ctx;
253extern const struct cgit_snapshot_format cgit_snapshot_formats[]; 254extern const struct cgit_snapshot_format cgit_snapshot_formats[];
254 255
255extern struct cgit_repo *cgit_add_repo(const char *url); 256extern struct cgit_repo *cgit_add_repo(const char *url);
256extern struct cgit_repo *cgit_get_repoinfo(const char *url); 257extern struct cgit_repo *cgit_get_repoinfo(const char *url);
257extern void cgit_repo_config_cb(const char *name, const char *value); 258extern void cgit_repo_config_cb(const char *name, const char *value);
258 259
259extern int chk_zero(int result, char *msg); 260extern int chk_zero(int result, char *msg);
260extern int chk_positive(int result, char *msg); 261extern int chk_positive(int result, char *msg);
261extern int chk_non_negative(int result, char *msg); 262extern int chk_non_negative(int result, char *msg);
262 263
263extern char *trim_end(const char *str, char c); 264extern char *trim_end(const char *str, char c);
264extern char *strlpart(char *txt, int maxlen); 265extern char *strlpart(char *txt, int maxlen);
265extern char *strrpart(char *txt, int maxlen); 266extern char *strrpart(char *txt, int maxlen);
266 267
267extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); 268extern void cgit_add_ref(struct reflist *list, struct refinfo *ref);
268extern int cgit_refs_cb(const char *refname, const unsigned char *sha1, 269extern int cgit_refs_cb(const char *refname, const unsigned char *sha1,
269 int flags, void *cb_data); 270 int flags, void *cb_data);
270 271
271extern void *cgit_free_commitinfo(struct commitinfo *info); 272extern void *cgit_free_commitinfo(struct commitinfo *info);
272 273
273extern int cgit_diff_files(const unsigned char *old_sha1, 274extern int cgit_diff_files(const unsigned char *old_sha1,
274 const unsigned char *new_sha1, 275 const unsigned char *new_sha1,
275 unsigned long *old_size, unsigned long *new_size, 276 unsigned long *old_size, unsigned long *new_size,
276 int *binary, linediff_fn fn); 277 int *binary, linediff_fn fn);
277 278
278extern void cgit_diff_tree(const unsigned char *old_sha1, 279extern void cgit_diff_tree(const unsigned char *old_sha1,
279 const unsigned char *new_sha1, 280 const unsigned char *new_sha1,
280 filepair_fn fn, const char *prefix); 281 filepair_fn fn, const char *prefix);
281 282
282extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); 283extern void cgit_diff_commit(struct commit *commit, filepair_fn fn);
283 284
284extern char *fmt(const char *format,...); 285extern char *fmt(const char *format,...);
285 286
286extern struct commitinfo *cgit_parse_commit(struct commit *commit); 287extern struct commitinfo *cgit_parse_commit(struct commit *commit);
287extern struct taginfo *cgit_parse_tag(struct tag *tag); 288extern struct taginfo *cgit_parse_tag(struct tag *tag);
288extern void cgit_parse_url(const char *url); 289extern void cgit_parse_url(const char *url);
289 290
290extern const char *cgit_repobasename(const char *reponame); 291extern const char *cgit_repobasename(const char *reponame);
291 292
292extern int cgit_parse_snapshots_mask(const char *str); 293extern int cgit_parse_snapshots_mask(const char *str);
293 294
294extern int cgit_open_filter(struct cgit_filter *filter); 295extern int cgit_open_filter(struct cgit_filter *filter);
295extern int cgit_close_filter(struct cgit_filter *filter); 296extern int cgit_close_filter(struct cgit_filter *filter);
296 297
297extern int readfile(const char *path, char **buf, size_t *size); 298extern int readfile(const char *path, char **buf, size_t *size);
298 299
299#endif /* CGIT_H */ 300#endif /* CGIT_H */