summaryrefslogtreecommitdiffabout
path: root/cgit.h
authorLars Hjemli <hjemli@gmail.com>2009-07-31 15:42:57 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2009-07-31 15:42:57 (UTC)
commitf35db1cd2b75aac6952aa07713e44ca01fd89727 (patch) (unidiff)
treeaffc8325bf67ae51044c809c0b693cbe55dd097a /cgit.h
parent46b7abed99e957008c01c02cf612aa526ba92f04 (diff)
downloadcgit-f35db1cd2b75aac6952aa07713e44ca01fd89727.zip
cgit-f35db1cd2b75aac6952aa07713e44ca01fd89727.tar.gz
cgit-f35db1cd2b75aac6952aa07713e44ca01fd89727.tar.bz2
ui-commit: add support for 'commit-filter' option
This new option specifies a filter which is executed on the commit message, i.e. the commit message is written to the filters STDIN and the filters STDOUT is included verbatim as the commit message. This can be used to implement commit linking by creating a simple shell script in e.g. /usr/bin/cgit-commit-filter.sh like this: #/bin/sh sed -re 's|\b([0-9a-fA-F]{6,40})\b|<a href="./?id=\1">\1</a>|g' 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 f9cf0df..438301d 100644
--- a/cgit.h
+++ b/cgit.h
@@ -1,265 +1,266 @@
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 <xdiff-interface.h> 18#include <xdiff-interface.h>
19#include <xdiff/xdiff.h> 19#include <xdiff/xdiff.h>
20#include <utf8.h> 20#include <utf8.h>
21 21
22 22
23/* 23/*
24 * Dateformats used on misc. pages 24 * Dateformats used on misc. pages
25 */ 25 */
26#define FMT_LONGDATE "%Y-%m-%d %H:%M:%S (%Z)" 26#define FMT_LONGDATE "%Y-%m-%d %H:%M:%S (%Z)"
27#define FMT_SHORTDATE "%Y-%m-%d" 27#define FMT_SHORTDATE "%Y-%m-%d"
28#define FMT_ATOMDATE "%Y-%m-%dT%H:%M:%SZ" 28#define FMT_ATOMDATE "%Y-%m-%dT%H:%M:%SZ"
29 29
30 30
31/* 31/*
32 * Limits used for relative dates 32 * Limits used for relative dates
33 */ 33 */
34#define TM_MIN 60 34#define TM_MIN 60
35#define TM_HOUR (TM_MIN * 60) 35#define TM_HOUR (TM_MIN * 60)
36#define TM_DAY (TM_HOUR * 24) 36#define TM_DAY (TM_HOUR * 24)
37#define TM_WEEK (TM_DAY * 7) 37#define TM_WEEK (TM_DAY * 7)
38#define TM_YEAR (TM_DAY * 365) 38#define TM_YEAR (TM_DAY * 365)
39#define TM_MONTH (TM_YEAR / 12.0) 39#define TM_MONTH (TM_YEAR / 12.0)
40 40
41 41
42/* 42/*
43 * Default encoding 43 * Default encoding
44 */ 44 */
45#define PAGE_ENCODING "UTF-8" 45#define PAGE_ENCODING "UTF-8"
46 46
47typedef void (*configfn)(const char *name, const char *value); 47typedef void (*configfn)(const char *name, const char *value);
48typedef void (*filepair_fn)(struct diff_filepair *pair); 48typedef void (*filepair_fn)(struct diff_filepair *pair);
49typedef void (*linediff_fn)(char *line, int len); 49typedef void (*linediff_fn)(char *line, int len);
50 50
51struct cgit_repo { 51struct cgit_repo {
52 char *url; 52 char *url;
53 char *name; 53 char *name;
54 char *path; 54 char *path;
55 char *desc; 55 char *desc;
56 char *owner; 56 char *owner;
57 char *defbranch; 57 char *defbranch;
58 char *group; 58 char *group;
59 char *module_link; 59 char *module_link;
60 char *readme; 60 char *readme;
61 char *clone_url; 61 char *clone_url;
62 int snapshots; 62 int snapshots;
63 int enable_log_filecount; 63 int enable_log_filecount;
64 int enable_log_linecount; 64 int enable_log_linecount;
65 int max_stats; 65 int max_stats;
66 time_t mtime; 66 time_t mtime;
67}; 67};
68 68
69struct cgit_repolist { 69struct cgit_repolist {
70 int length; 70 int length;
71 int count; 71 int count;
72 struct cgit_repo *repos; 72 struct cgit_repo *repos;
73}; 73};
74 74
75struct commitinfo { 75struct commitinfo {
76 struct commit *commit; 76 struct commit *commit;
77 char *author; 77 char *author;
78 char *author_email; 78 char *author_email;
79 unsigned long author_date; 79 unsigned long author_date;
80 char *committer; 80 char *committer;
81 char *committer_email; 81 char *committer_email;
82 unsigned long committer_date; 82 unsigned long committer_date;
83 char *subject; 83 char *subject;
84 char *msg; 84 char *msg;
85 char *msg_encoding; 85 char *msg_encoding;
86}; 86};
87 87
88struct taginfo { 88struct taginfo {
89 char *tagger; 89 char *tagger;
90 char *tagger_email; 90 char *tagger_email;
91 unsigned long tagger_date; 91 unsigned long tagger_date;
92 char *msg; 92 char *msg;
93}; 93};
94 94
95struct refinfo { 95struct refinfo {
96 const char *refname; 96 const char *refname;
97 struct object *object; 97 struct object *object;
98 union { 98 union {
99 struct taginfo *tag; 99 struct taginfo *tag;
100 struct commitinfo *commit; 100 struct commitinfo *commit;
101 }; 101 };
102}; 102};
103 103
104struct reflist { 104struct reflist {
105 struct refinfo **refs; 105 struct refinfo **refs;
106 int alloc; 106 int alloc;
107 int count; 107 int count;
108}; 108};
109 109
110struct cgit_query { 110struct cgit_query {
111 int has_symref; 111 int has_symref;
112 int has_sha1; 112 int has_sha1;
113 char *raw; 113 char *raw;
114 char *repo; 114 char *repo;
115 char *page; 115 char *page;
116 char *search; 116 char *search;
117 char *grep; 117 char *grep;
118 char *head; 118 char *head;
119 char *sha1; 119 char *sha1;
120 char *sha2; 120 char *sha2;
121 char *path; 121 char *path;
122 char *name; 122 char *name;
123 char *mimetype; 123 char *mimetype;
124 char *url; 124 char *url;
125 char *period; 125 char *period;
126 int ofs; 126 int ofs;
127 int nohead; 127 int nohead;
128 char *sort; 128 char *sort;
129 int showmsg; 129 int showmsg;
130}; 130};
131 131
132struct cgit_filter { 132struct cgit_filter {
133 char *cmd; 133 char *cmd;
134 char **argv; 134 char **argv;
135 int old_stdout; 135 int old_stdout;
136 int pipe_fh[2]; 136 int pipe_fh[2];
137 int pid; 137 int pid;
138 int exitstatus; 138 int exitstatus;
139}; 139};
140 140
141struct cgit_config { 141struct cgit_config {
142 char *agefile; 142 char *agefile;
143 char *cache_root; 143 char *cache_root;
144 char *clone_prefix; 144 char *clone_prefix;
145 char *css; 145 char *css;
146 char *favicon; 146 char *favicon;
147 char *footer; 147 char *footer;
148 char *head_include; 148 char *head_include;
149 char *header; 149 char *header;
150 char *index_header; 150 char *index_header;
151 char *index_info; 151 char *index_info;
152 char *logo; 152 char *logo;
153 char *logo_link; 153 char *logo_link;
154 char *module_link; 154 char *module_link;
155 char *repo_group; 155 char *repo_group;
156 char *robots; 156 char *robots;
157 char *root_title; 157 char *root_title;
158 char *root_desc; 158 char *root_desc;
159 char *root_readme; 159 char *root_readme;
160 char *script_name; 160 char *script_name;
161 char *virtual_root; 161 char *virtual_root;
162 int cache_size; 162 int cache_size;
163 int cache_dynamic_ttl; 163 int cache_dynamic_ttl;
164 int cache_max_create_time; 164 int cache_max_create_time;
165 int cache_repo_ttl; 165 int cache_repo_ttl;
166 int cache_root_ttl; 166 int cache_root_ttl;
167 int cache_static_ttl; 167 int cache_static_ttl;
168 int embedded; 168 int embedded;
169 int enable_index_links; 169 int enable_index_links;
170 int enable_log_filecount; 170 int enable_log_filecount;
171 int enable_log_linecount; 171 int enable_log_linecount;
172 int local_time; 172 int local_time;
173 int max_repo_count; 173 int max_repo_count;
174 int max_commit_count; 174 int max_commit_count;
175 int max_lock_attempts; 175 int max_lock_attempts;
176 int max_msg_len; 176 int max_msg_len;
177 int max_repodesc_len; 177 int max_repodesc_len;
178 int max_stats; 178 int max_stats;
179 int nocache; 179 int nocache;
180 int noheader; 180 int noheader;
181 int renamelimit; 181 int renamelimit;
182 int snapshots; 182 int snapshots;
183 int summary_branches; 183 int summary_branches;
184 int summary_log; 184 int summary_log;
185 int summary_tags; 185 int summary_tags;
186 struct cgit_filter *commit_filter;
186 struct cgit_filter *source_filter; 187 struct cgit_filter *source_filter;
187}; 188};
188 189
189struct cgit_page { 190struct cgit_page {
190 time_t modified; 191 time_t modified;
191 time_t expires; 192 time_t expires;
192 size_t size; 193 size_t size;
193 char *mimetype; 194 char *mimetype;
194 char *charset; 195 char *charset;
195 char *filename; 196 char *filename;
196 char *etag; 197 char *etag;
197 char *title; 198 char *title;
198 int status; 199 int status;
199 char *statusmsg; 200 char *statusmsg;
200}; 201};
201 202
202struct cgit_context { 203struct cgit_context {
203 struct cgit_query qry; 204 struct cgit_query qry;
204 struct cgit_config cfg; 205 struct cgit_config cfg;
205 struct cgit_repo *repo; 206 struct cgit_repo *repo;
206 struct cgit_page page; 207 struct cgit_page page;
207}; 208};
208 209
209struct cgit_snapshot_format { 210struct cgit_snapshot_format {
210 const char *suffix; 211 const char *suffix;
211 const char *mimetype; 212 const char *mimetype;
212 write_archive_fn_t write_func; 213 write_archive_fn_t write_func;
213 int bit; 214 int bit;
214}; 215};
215 216
216extern const char *cgit_version; 217extern const char *cgit_version;
217 218
218extern struct cgit_repolist cgit_repolist; 219extern struct cgit_repolist cgit_repolist;
219extern struct cgit_context ctx; 220extern struct cgit_context ctx;
220extern const struct cgit_snapshot_format cgit_snapshot_formats[]; 221extern const struct cgit_snapshot_format cgit_snapshot_formats[];
221 222
222extern struct cgit_repo *cgit_add_repo(const char *url); 223extern struct cgit_repo *cgit_add_repo(const char *url);
223extern struct cgit_repo *cgit_get_repoinfo(const char *url); 224extern struct cgit_repo *cgit_get_repoinfo(const char *url);
224extern void cgit_repo_config_cb(const char *name, const char *value); 225extern void cgit_repo_config_cb(const char *name, const char *value);
225 226
226extern int chk_zero(int result, char *msg); 227extern int chk_zero(int result, char *msg);
227extern int chk_positive(int result, char *msg); 228extern int chk_positive(int result, char *msg);
228extern int chk_non_negative(int result, char *msg); 229extern int chk_non_negative(int result, char *msg);
229 230
230extern char *trim_end(const char *str, char c); 231extern char *trim_end(const char *str, char c);
231extern char *strlpart(char *txt, int maxlen); 232extern char *strlpart(char *txt, int maxlen);
232extern char *strrpart(char *txt, int maxlen); 233extern char *strrpart(char *txt, int maxlen);
233 234
234extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); 235extern void cgit_add_ref(struct reflist *list, struct refinfo *ref);
235extern int cgit_refs_cb(const char *refname, const unsigned char *sha1, 236extern int cgit_refs_cb(const char *refname, const unsigned char *sha1,
236 int flags, void *cb_data); 237 int flags, void *cb_data);
237 238
238extern void *cgit_free_commitinfo(struct commitinfo *info); 239extern void *cgit_free_commitinfo(struct commitinfo *info);
239 240
240extern int cgit_diff_files(const unsigned char *old_sha1, 241extern int cgit_diff_files(const unsigned char *old_sha1,
241 const unsigned char *new_sha1, 242 const unsigned char *new_sha1,
242 unsigned long *old_size, unsigned long *new_size, 243 unsigned long *old_size, unsigned long *new_size,
243 int *binary, linediff_fn fn); 244 int *binary, linediff_fn fn);
244 245
245extern void cgit_diff_tree(const unsigned char *old_sha1, 246extern void cgit_diff_tree(const unsigned char *old_sha1,
246 const unsigned char *new_sha1, 247 const unsigned char *new_sha1,
247 filepair_fn fn, const char *prefix); 248 filepair_fn fn, const char *prefix);
248 249
249extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); 250extern void cgit_diff_commit(struct commit *commit, filepair_fn fn);
250 251
251extern char *fmt(const char *format,...); 252extern char *fmt(const char *format,...);
252 253
253extern struct commitinfo *cgit_parse_commit(struct commit *commit); 254extern struct commitinfo *cgit_parse_commit(struct commit *commit);
254extern struct taginfo *cgit_parse_tag(struct tag *tag); 255extern struct taginfo *cgit_parse_tag(struct tag *tag);
255extern void cgit_parse_url(const char *url); 256extern void cgit_parse_url(const char *url);
256 257
257extern const char *cgit_repobasename(const char *reponame); 258extern const char *cgit_repobasename(const char *reponame);
258 259
259extern int cgit_parse_snapshots_mask(const char *str); 260extern int cgit_parse_snapshots_mask(const char *str);
260 261
261extern int cgit_open_filter(struct cgit_filter *filter); 262extern int cgit_open_filter(struct cgit_filter *filter);
262extern int cgit_close_filter(struct cgit_filter *filter); 263extern int cgit_close_filter(struct cgit_filter *filter);
263 264
264 265
265#endif /* CGIT_H */ 266#endif /* CGIT_H */