summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c15
-rw-r--r--cgit.h1
-rw-r--r--cgitrc.5.txt21
3 files changed, 26 insertions, 11 deletions
diff --git a/cgit.c b/cgit.c
index 167b5dd..f1ea03c 100644
--- a/cgit.c
+++ b/cgit.c
@@ -21,158 +21,161 @@ void add_mimetype(const char *name, const char *value)
21{ 21{
22 struct string_list_item *item; 22 struct string_list_item *item;
23 23
24 item = string_list_insert(xstrdup(name), &ctx.cfg.mimetypes); 24 item = string_list_insert(xstrdup(name), &ctx.cfg.mimetypes);
25 item->util = xstrdup(value); 25 item->util = xstrdup(value);
26} 26}
27 27
28struct cgit_filter *new_filter(const char *cmd, int extra_args) 28struct cgit_filter *new_filter(const char *cmd, int extra_args)
29{ 29{
30 struct cgit_filter *f; 30 struct cgit_filter *f;
31 31
32 if (!cmd || !cmd[0]) 32 if (!cmd || !cmd[0])
33 return NULL; 33 return NULL;
34 34
35 f = xmalloc(sizeof(struct cgit_filter)); 35 f = xmalloc(sizeof(struct cgit_filter));
36 f->cmd = xstrdup(cmd); 36 f->cmd = xstrdup(cmd);
37 f->argv = xmalloc((2 + extra_args) * sizeof(char *)); 37 f->argv = xmalloc((2 + extra_args) * sizeof(char *));
38 f->argv[0] = f->cmd; 38 f->argv[0] = f->cmd;
39 f->argv[1] = NULL; 39 f->argv[1] = NULL;
40 return f; 40 return f;
41} 41}
42 42
43static void process_cached_repolist(const char *path); 43static void process_cached_repolist(const char *path);
44 44
45void repo_config(struct cgit_repo *repo, const char *name, const char *value) 45void repo_config(struct cgit_repo *repo, const char *name, const char *value)
46{ 46{
47 if (!strcmp(name, "name")) 47 if (!strcmp(name, "name"))
48 repo->name = xstrdup(value); 48 repo->name = xstrdup(value);
49 else if (!strcmp(name, "clone-url")) 49 else if (!strcmp(name, "clone-url"))
50 repo->clone_url = xstrdup(value); 50 repo->clone_url = xstrdup(value);
51 else if (!strcmp(name, "desc")) 51 else if (!strcmp(name, "desc"))
52 repo->desc = xstrdup(value); 52 repo->desc = xstrdup(value);
53 else if (!strcmp(name, "owner")) 53 else if (!strcmp(name, "owner"))
54 repo->owner = xstrdup(value); 54 repo->owner = xstrdup(value);
55 else if (!strcmp(name, "defbranch")) 55 else if (!strcmp(name, "defbranch"))
56 repo->defbranch = xstrdup(value); 56 repo->defbranch = xstrdup(value);
57 else if (!strcmp(name, "snapshots")) 57 else if (!strcmp(name, "snapshots"))
58 repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value); 58 repo->snapshots = ctx.cfg.snapshots & cgit_parse_snapshots_mask(value);
59 else if (!strcmp(name, "enable-log-filecount")) 59 else if (!strcmp(name, "enable-log-filecount"))
60 repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value); 60 repo->enable_log_filecount = ctx.cfg.enable_log_filecount * atoi(value);
61 else if (!strcmp(name, "enable-log-linecount")) 61 else if (!strcmp(name, "enable-log-linecount"))
62 repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value); 62 repo->enable_log_linecount = ctx.cfg.enable_log_linecount * atoi(value);
63 else if (!strcmp(name, "max-stats")) 63 else if (!strcmp(name, "max-stats"))
64 repo->max_stats = cgit_find_stats_period(value, NULL); 64 repo->max_stats = cgit_find_stats_period(value, NULL);
65 else if (!strcmp(name, "module-link")) 65 else if (!strcmp(name, "module-link"))
66 repo->module_link= xstrdup(value); 66 repo->module_link= xstrdup(value);
67 else if (!strcmp(name, "section")) 67 else if (!strcmp(name, "section"))
68 repo->section = xstrdup(value); 68 repo->section = xstrdup(value);
69 else if (!strcmp(name, "about-filter"))
70 repo->about_filter = new_filter(value, 0);
71 else if (!strcmp(name, "commit-filter"))
72 repo->commit_filter = new_filter(value, 0);
73 else if (!strcmp(name, "source-filter"))
74 repo->source_filter = new_filter(value, 1);
75 else if (!strcmp(name, "readme") && value != NULL) { 69 else if (!strcmp(name, "readme") && value != NULL) {
76 if (*value == '/') 70 if (*value == '/')
77 ctx.repo->readme = xstrdup(value); 71 ctx.repo->readme = xstrdup(value);
78 else 72 else
79 ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value)); 73 ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value));
74 } else if (ctx.cfg.enable_filter_overrides) {
75 if (!strcmp(name, "about-filter"))
76 repo->about_filter = new_filter(value, 0);
77 else if (!strcmp(name, "commit-filter"))
78 repo->commit_filter = new_filter(value, 0);
79 else if (!strcmp(name, "source-filter"))
80 repo->source_filter = new_filter(value, 1);
80 } 81 }
81} 82}
82 83
83void config_cb(const char *name, const char *value) 84void config_cb(const char *name, const char *value)
84{ 85{
85 if (!strcmp(name, "section") || !strcmp(name, "repo.group")) 86 if (!strcmp(name, "section") || !strcmp(name, "repo.group"))
86 ctx.cfg.section = xstrdup(value); 87 ctx.cfg.section = xstrdup(value);
87 else if (!strcmp(name, "repo.url")) 88 else if (!strcmp(name, "repo.url"))
88 ctx.repo = cgit_add_repo(value); 89 ctx.repo = cgit_add_repo(value);
89 else if (ctx.repo && !strcmp(name, "repo.path")) 90 else if (ctx.repo && !strcmp(name, "repo.path"))
90 ctx.repo->path = trim_end(value, '/'); 91 ctx.repo->path = trim_end(value, '/');
91 else if (ctx.repo && !prefixcmp(name, "repo.")) 92 else if (ctx.repo && !prefixcmp(name, "repo."))
92 repo_config(ctx.repo, name + 5, value); 93 repo_config(ctx.repo, name + 5, value);
93 else if (!strcmp(name, "root-title")) 94 else if (!strcmp(name, "root-title"))
94 ctx.cfg.root_title = xstrdup(value); 95 ctx.cfg.root_title = xstrdup(value);
95 else if (!strcmp(name, "root-desc")) 96 else if (!strcmp(name, "root-desc"))
96 ctx.cfg.root_desc = xstrdup(value); 97 ctx.cfg.root_desc = xstrdup(value);
97 else if (!strcmp(name, "root-readme")) 98 else if (!strcmp(name, "root-readme"))
98 ctx.cfg.root_readme = xstrdup(value); 99 ctx.cfg.root_readme = xstrdup(value);
99 else if (!strcmp(name, "css")) 100 else if (!strcmp(name, "css"))
100 ctx.cfg.css = xstrdup(value); 101 ctx.cfg.css = xstrdup(value);
101 else if (!strcmp(name, "favicon")) 102 else if (!strcmp(name, "favicon"))
102 ctx.cfg.favicon = xstrdup(value); 103 ctx.cfg.favicon = xstrdup(value);
103 else if (!strcmp(name, "footer")) 104 else if (!strcmp(name, "footer"))
104 ctx.cfg.footer = xstrdup(value); 105 ctx.cfg.footer = xstrdup(value);
105 else if (!strcmp(name, "head-include")) 106 else if (!strcmp(name, "head-include"))
106 ctx.cfg.head_include = xstrdup(value); 107 ctx.cfg.head_include = xstrdup(value);
107 else if (!strcmp(name, "header")) 108 else if (!strcmp(name, "header"))
108 ctx.cfg.header = xstrdup(value); 109 ctx.cfg.header = xstrdup(value);
109 else if (!strcmp(name, "logo")) 110 else if (!strcmp(name, "logo"))
110 ctx.cfg.logo = xstrdup(value); 111 ctx.cfg.logo = xstrdup(value);
111 else if (!strcmp(name, "index-header")) 112 else if (!strcmp(name, "index-header"))
112 ctx.cfg.index_header = xstrdup(value); 113 ctx.cfg.index_header = xstrdup(value);
113 else if (!strcmp(name, "index-info")) 114 else if (!strcmp(name, "index-info"))
114 ctx.cfg.index_info = xstrdup(value); 115 ctx.cfg.index_info = xstrdup(value);
115 else if (!strcmp(name, "logo-link")) 116 else if (!strcmp(name, "logo-link"))
116 ctx.cfg.logo_link = xstrdup(value); 117 ctx.cfg.logo_link = xstrdup(value);
117 else if (!strcmp(name, "module-link")) 118 else if (!strcmp(name, "module-link"))
118 ctx.cfg.module_link = xstrdup(value); 119 ctx.cfg.module_link = xstrdup(value);
119 else if (!strcmp(name, "virtual-root")) { 120 else if (!strcmp(name, "virtual-root")) {
120 ctx.cfg.virtual_root = trim_end(value, '/'); 121 ctx.cfg.virtual_root = trim_end(value, '/');
121 if (!ctx.cfg.virtual_root && (!strcmp(value, "/"))) 122 if (!ctx.cfg.virtual_root && (!strcmp(value, "/")))
122 ctx.cfg.virtual_root = ""; 123 ctx.cfg.virtual_root = "";
123 } else if (!strcmp(name, "nocache")) 124 } else if (!strcmp(name, "nocache"))
124 ctx.cfg.nocache = atoi(value); 125 ctx.cfg.nocache = atoi(value);
125 else if (!strcmp(name, "noplainemail")) 126 else if (!strcmp(name, "noplainemail"))
126 ctx.cfg.noplainemail = atoi(value); 127 ctx.cfg.noplainemail = atoi(value);
127 else if (!strcmp(name, "noheader")) 128 else if (!strcmp(name, "noheader"))
128 ctx.cfg.noheader = atoi(value); 129 ctx.cfg.noheader = atoi(value);
129 else if (!strcmp(name, "snapshots")) 130 else if (!strcmp(name, "snapshots"))
130 ctx.cfg.snapshots = cgit_parse_snapshots_mask(value); 131 ctx.cfg.snapshots = cgit_parse_snapshots_mask(value);
132 else if (!strcmp(name, "enable-filter-overrides"))
133 ctx.cfg.enable_filter_overrides = atoi(value);
131 else if (!strcmp(name, "enable-index-links")) 134 else if (!strcmp(name, "enable-index-links"))
132 ctx.cfg.enable_index_links = atoi(value); 135 ctx.cfg.enable_index_links = atoi(value);
133 else if (!strcmp(name, "enable-log-filecount")) 136 else if (!strcmp(name, "enable-log-filecount"))
134 ctx.cfg.enable_log_filecount = atoi(value); 137 ctx.cfg.enable_log_filecount = atoi(value);
135 else if (!strcmp(name, "enable-log-linecount")) 138 else if (!strcmp(name, "enable-log-linecount"))
136 ctx.cfg.enable_log_linecount = atoi(value); 139 ctx.cfg.enable_log_linecount = atoi(value);
137 else if (!strcmp(name, "max-stats")) 140 else if (!strcmp(name, "max-stats"))
138 ctx.cfg.max_stats = cgit_find_stats_period(value, NULL); 141 ctx.cfg.max_stats = cgit_find_stats_period(value, NULL);
139 else if (!strcmp(name, "cache-size")) 142 else if (!strcmp(name, "cache-size"))
140 ctx.cfg.cache_size = atoi(value); 143 ctx.cfg.cache_size = atoi(value);
141 else if (!strcmp(name, "cache-root")) 144 else if (!strcmp(name, "cache-root"))
142 ctx.cfg.cache_root = xstrdup(value); 145 ctx.cfg.cache_root = xstrdup(value);
143 else if (!strcmp(name, "cache-root-ttl")) 146 else if (!strcmp(name, "cache-root-ttl"))
144 ctx.cfg.cache_root_ttl = atoi(value); 147 ctx.cfg.cache_root_ttl = atoi(value);
145 else if (!strcmp(name, "cache-repo-ttl")) 148 else if (!strcmp(name, "cache-repo-ttl"))
146 ctx.cfg.cache_repo_ttl = atoi(value); 149 ctx.cfg.cache_repo_ttl = atoi(value);
147 else if (!strcmp(name, "cache-scanrc-ttl")) 150 else if (!strcmp(name, "cache-scanrc-ttl"))
148 ctx.cfg.cache_scanrc_ttl = atoi(value); 151 ctx.cfg.cache_scanrc_ttl = atoi(value);
149 else if (!strcmp(name, "cache-static-ttl")) 152 else if (!strcmp(name, "cache-static-ttl"))
150 ctx.cfg.cache_static_ttl = atoi(value); 153 ctx.cfg.cache_static_ttl = atoi(value);
151 else if (!strcmp(name, "cache-dynamic-ttl")) 154 else if (!strcmp(name, "cache-dynamic-ttl"))
152 ctx.cfg.cache_dynamic_ttl = atoi(value); 155 ctx.cfg.cache_dynamic_ttl = atoi(value);
153 else if (!strcmp(name, "about-filter")) 156 else if (!strcmp(name, "about-filter"))
154 ctx.cfg.about_filter = new_filter(value, 0); 157 ctx.cfg.about_filter = new_filter(value, 0);
155 else if (!strcmp(name, "commit-filter")) 158 else if (!strcmp(name, "commit-filter"))
156 ctx.cfg.commit_filter = new_filter(value, 0); 159 ctx.cfg.commit_filter = new_filter(value, 0);
157 else if (!strcmp(name, "embedded")) 160 else if (!strcmp(name, "embedded"))
158 ctx.cfg.embedded = atoi(value); 161 ctx.cfg.embedded = atoi(value);
159 else if (!strcmp(name, "max-message-length")) 162 else if (!strcmp(name, "max-message-length"))
160 ctx.cfg.max_msg_len = atoi(value); 163 ctx.cfg.max_msg_len = atoi(value);
161 else if (!strcmp(name, "max-repodesc-length")) 164 else if (!strcmp(name, "max-repodesc-length"))
162 ctx.cfg.max_repodesc_len = atoi(value); 165 ctx.cfg.max_repodesc_len = atoi(value);
163 else if (!strcmp(name, "max-repo-count")) 166 else if (!strcmp(name, "max-repo-count"))
164 ctx.cfg.max_repo_count = atoi(value); 167 ctx.cfg.max_repo_count = atoi(value);
165 else if (!strcmp(name, "max-commit-count")) 168 else if (!strcmp(name, "max-commit-count"))
166 ctx.cfg.max_commit_count = atoi(value); 169 ctx.cfg.max_commit_count = atoi(value);
167 else if (!strcmp(name, "scan-path")) 170 else if (!strcmp(name, "scan-path"))
168 if (!ctx.cfg.nocache && ctx.cfg.cache_size) 171 if (!ctx.cfg.nocache && ctx.cfg.cache_size)
169 process_cached_repolist(value); 172 process_cached_repolist(value);
170 else 173 else
171 scan_tree(value, repo_config); 174 scan_tree(value, repo_config);
172 else if (!strcmp(name, "source-filter")) 175 else if (!strcmp(name, "source-filter"))
173 ctx.cfg.source_filter = new_filter(value, 1); 176 ctx.cfg.source_filter = new_filter(value, 1);
174 else if (!strcmp(name, "summary-log")) 177 else if (!strcmp(name, "summary-log"))
175 ctx.cfg.summary_log = atoi(value); 178 ctx.cfg.summary_log = atoi(value);
176 else if (!strcmp(name, "summary-branches")) 179 else if (!strcmp(name, "summary-branches"))
177 ctx.cfg.summary_branches = atoi(value); 180 ctx.cfg.summary_branches = atoi(value);
178 else if (!strcmp(name, "summary-tags")) 181 else if (!strcmp(name, "summary-tags"))
diff --git a/cgit.h b/cgit.h
index 3359be9..ef109aa 100644
--- a/cgit.h
+++ b/cgit.h
@@ -129,96 +129,97 @@ struct cgit_query {
129 char *raw; 129 char *raw;
130 char *repo; 130 char *repo;
131 char *page; 131 char *page;
132 char *search; 132 char *search;
133 char *grep; 133 char *grep;
134 char *head; 134 char *head;
135 char *sha1; 135 char *sha1;
136 char *sha2; 136 char *sha2;
137 char *path; 137 char *path;
138 char *name; 138 char *name;
139 char *mimetype; 139 char *mimetype;
140 char *url; 140 char *url;
141 char *period; 141 char *period;
142 int ofs; 142 int ofs;
143 int nohead; 143 int nohead;
144 char *sort; 144 char *sort;
145 int showmsg; 145 int showmsg;
146}; 146};
147 147
148struct cgit_config { 148struct cgit_config {
149 char *agefile; 149 char *agefile;
150 char *cache_root; 150 char *cache_root;
151 char *clone_prefix; 151 char *clone_prefix;
152 char *css; 152 char *css;
153 char *favicon; 153 char *favicon;
154 char *footer; 154 char *footer;
155 char *head_include; 155 char *head_include;
156 char *header; 156 char *header;
157 char *index_header; 157 char *index_header;
158 char *index_info; 158 char *index_info;
159 char *logo; 159 char *logo;
160 char *logo_link; 160 char *logo_link;
161 char *module_link; 161 char *module_link;
162 char *robots; 162 char *robots;
163 char *root_title; 163 char *root_title;
164 char *root_desc; 164 char *root_desc;
165 char *root_readme; 165 char *root_readme;
166 char *script_name; 166 char *script_name;
167 char *section; 167 char *section;
168 char *virtual_root; 168 char *virtual_root;
169 int cache_size; 169 int cache_size;
170 int cache_dynamic_ttl; 170 int cache_dynamic_ttl;
171 int cache_max_create_time; 171 int cache_max_create_time;
172 int cache_repo_ttl; 172 int cache_repo_ttl;
173 int cache_root_ttl; 173 int cache_root_ttl;
174 int cache_scanrc_ttl; 174 int cache_scanrc_ttl;
175 int cache_static_ttl; 175 int cache_static_ttl;
176 int embedded; 176 int embedded;
177 int enable_filter_overrides;
177 int enable_index_links; 178 int enable_index_links;
178 int enable_log_filecount; 179 int enable_log_filecount;
179 int enable_log_linecount; 180 int enable_log_linecount;
180 int local_time; 181 int local_time;
181 int max_repo_count; 182 int max_repo_count;
182 int max_commit_count; 183 int max_commit_count;
183 int max_lock_attempts; 184 int max_lock_attempts;
184 int max_msg_len; 185 int max_msg_len;
185 int max_repodesc_len; 186 int max_repodesc_len;
186 int max_stats; 187 int max_stats;
187 int nocache; 188 int nocache;
188 int noplainemail; 189 int noplainemail;
189 int noheader; 190 int noheader;
190 int renamelimit; 191 int renamelimit;
191 int snapshots; 192 int snapshots;
192 int summary_branches; 193 int summary_branches;
193 int summary_log; 194 int summary_log;
194 int summary_tags; 195 int summary_tags;
195 struct string_list mimetypes; 196 struct string_list mimetypes;
196 struct cgit_filter *about_filter; 197 struct cgit_filter *about_filter;
197 struct cgit_filter *commit_filter; 198 struct cgit_filter *commit_filter;
198 struct cgit_filter *source_filter; 199 struct cgit_filter *source_filter;
199}; 200};
200 201
201struct cgit_page { 202struct cgit_page {
202 time_t modified; 203 time_t modified;
203 time_t expires; 204 time_t expires;
204 size_t size; 205 size_t size;
205 char *mimetype; 206 char *mimetype;
206 char *charset; 207 char *charset;
207 char *filename; 208 char *filename;
208 char *etag; 209 char *etag;
209 char *title; 210 char *title;
210 int status; 211 int status;
211 char *statusmsg; 212 char *statusmsg;
212}; 213};
213 214
214struct cgit_environment { 215struct cgit_environment {
215 char *cgit_config; 216 char *cgit_config;
216 char *http_host; 217 char *http_host;
217 char *https; 218 char *https;
218 char *no_http; 219 char *no_http;
219 char *path_info; 220 char *path_info;
220 char *query_string; 221 char *query_string;
221 char *request_method; 222 char *request_method;
222 char *script_name; 223 char *script_name;
223 char *server_name; 224 char *server_name;
224 char *server_port; 225 char *server_port;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 46df291..617b7c3 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -43,96 +43,100 @@ cache-root::
43 43
44cache-dynamic-ttl:: 44cache-dynamic-ttl::
45 Number which specifies the time-to-live, in minutes, for the cached 45 Number which specifies the time-to-live, in minutes, for the cached
46 version of repository pages accessed without a fixed SHA1. Default 46 version of repository pages accessed without a fixed SHA1. Default
47 value: "5". 47 value: "5".
48 48
49cache-repo-ttl:: 49cache-repo-ttl::
50 Number which specifies the time-to-live, in minutes, for the cached 50 Number which specifies the time-to-live, in minutes, for the cached
51 version of the repository summary page. Default value: "5". 51 version of the repository summary page. Default value: "5".
52 52
53cache-root-ttl:: 53cache-root-ttl::
54 Number which specifies the time-to-live, in minutes, for the cached 54 Number which specifies the time-to-live, in minutes, for the cached
55 version of the repository index page. Default value: "5". 55 version of the repository index page. Default value: "5".
56 56
57cache-scanrc-ttl:: 57cache-scanrc-ttl::
58 Number which specifies the time-to-live, in minutes, for the result 58 Number which specifies the time-to-live, in minutes, for the result
59 of scanning a path for git repositories. Default value: "15". 59 of scanning a path for git repositories. Default value: "15".
60 60
61cache-size:: 61cache-size::
62 The maximum number of entries in the cgit cache. Default value: "0" 62 The maximum number of entries in the cgit cache. Default value: "0"
63 (i.e. caching is disabled). 63 (i.e. caching is disabled).
64 64
65cache-static-ttl:: 65cache-static-ttl::
66 Number which specifies the time-to-live, in minutes, for the cached 66 Number which specifies the time-to-live, in minutes, for the cached
67 version of repository pages accessed with a fixed SHA1. Default value: 67 version of repository pages accessed with a fixed SHA1. Default value:
68 "5". 68 "5".
69 69
70clone-prefix:: 70clone-prefix::
71 Space-separated list of common prefixes which, when combined with a 71 Space-separated list of common prefixes which, when combined with a
72 repository url, generates valid clone urls for the repository. This 72 repository url, generates valid clone urls for the repository. This
73 setting is only used if `repo.clone-url` is unspecified. Default value: 73 setting is only used if `repo.clone-url` is unspecified. Default value:
74 none. 74 none.
75 75
76commit-filter:: 76commit-filter::
77 Specifies a command which will be invoked to format commit messages. 77 Specifies a command which will be invoked to format commit messages.
78 The command will get the message on its STDIN, and the STDOUT from the 78 The command will get the message on its STDIN, and the STDOUT from the
79 command will be included verbatim as the commit message, i.e. this can 79 command will be included verbatim as the commit message, i.e. this can
80 be used to implement bugtracker integration. Default value: none. 80 be used to implement bugtracker integration. Default value: none.
81 81
82css:: 82css::
83 Url which specifies the css document to include in all cgit pages. 83 Url which specifies the css document to include in all cgit pages.
84 Default value: "/cgit.css". 84 Default value: "/cgit.css".
85 85
86embedded:: 86embedded::
87 Flag which, when set to "1", will make cgit generate a html fragment 87 Flag which, when set to "1", will make cgit generate a html fragment
88 suitable for embedding in other html pages. Default value: none. See 88 suitable for embedding in other html pages. Default value: none. See
89 also: "noheader". 89 also: "noheader".
90 90
91enable-filter-overrides::
92 Flag which, when set to "1", allows all filter settings to be
93 overridden in repository-specific cgitrc files. Default value: none.
94
91enable-index-links:: 95enable-index-links::
92 Flag which, when set to "1", will make cgit generate extra links for 96 Flag which, when set to "1", will make cgit generate extra links for
93 each repo in the repository index (specifically, to the "summary", 97 each repo in the repository index (specifically, to the "summary",
94 "commit" and "tree" pages). Default value: "0". 98 "commit" and "tree" pages). Default value: "0".
95 99
96enable-log-filecount:: 100enable-log-filecount::
97 Flag which, when set to "1", will make cgit print the number of 101 Flag which, when set to "1", will make cgit print the number of
98 modified files for each commit on the repository log page. Default 102 modified files for each commit on the repository log page. Default
99 value: "0". 103 value: "0".
100 104
101enable-log-linecount:: 105enable-log-linecount::
102 Flag which, when set to "1", will make cgit print the number of added 106 Flag which, when set to "1", will make cgit print the number of added
103 and removed lines for each commit on the repository log page. Default 107 and removed lines for each commit on the repository log page. Default
104 value: "0". 108 value: "0".
105 109
106favicon:: 110favicon::
107 Url used as link to a shortcut icon for cgit. If specified, it is 111 Url used as link to a shortcut icon for cgit. If specified, it is
108 suggested to use the value "/favicon.ico" since certain browsers will 112 suggested to use the value "/favicon.ico" since certain browsers will
109 ignore other values. Default value: none. 113 ignore other values. Default value: none.
110 114
111footer:: 115footer::
112 The content of the file specified with this option will be included 116 The content of the file specified with this option will be included
113 verbatim at the bottom of all pages (i.e. it replaces the standard 117 verbatim at the bottom of all pages (i.e. it replaces the standard
114 "generated by..." message. Default value: none. 118 "generated by..." message. Default value: none.
115 119
116head-include:: 120head-include::
117 The content of the file specified with this option will be included 121 The content of the file specified with this option will be included
118 verbatim in the html HEAD section on all pages. Default value: none. 122 verbatim in the html HEAD section on all pages. Default value: none.
119 123
120header:: 124header::
121 The content of the file specified with this option will be included 125 The content of the file specified with this option will be included
122 verbatim at the top of all pages. Default value: none. 126 verbatim at the top of all pages. Default value: none.
123 127
124include:: 128include::
125 Name of a configfile to include before the rest of the current config- 129 Name of a configfile to include before the rest of the current config-
126 file is parsed. Default value: none. 130 file is parsed. Default value: none.
127 131
128index-header:: 132index-header::
129 The content of the file specified with this option will be included 133 The content of the file specified with this option will be included
130 verbatim above the repository index. This setting is deprecated, and 134 verbatim above the repository index. This setting is deprecated, and
131 will not be supported by cgit-1.0 (use root-readme instead). Default 135 will not be supported by cgit-1.0 (use root-readme instead). Default
132 value: none. 136 value: none.
133 137
134index-info:: 138index-info::
135 The content of the file specified with this option will be included 139 The content of the file specified with this option will be included
136 verbatim below the heading on the repository index page. This setting 140 verbatim below the heading on the repository index page. This setting
137 is deprecated, and will not be supported by cgit-1.0 (use root-desc 141 is deprecated, and will not be supported by cgit-1.0 (use root-desc
138 instead). Default value: none. 142 instead). Default value: none.
@@ -221,164 +225,171 @@ root-title::
221 "Git Repository Browser". 225 "Git Repository Browser".
222 226
223scan-path:: 227scan-path::
224 A path which will be scanned for repositories. If caching is enabled, 228 A path which will be scanned for repositories. If caching is enabled,
225 the result will be cached as a cgitrc include-file in the cache 229 the result will be cached as a cgitrc include-file in the cache
226 directory. Default value: none. See also: cache-scanrc-ttl. 230 directory. Default value: none. See also: cache-scanrc-ttl.
227 231
228section:: 232section::
229 The name of the current repository section - all repositories defined 233 The name of the current repository section - all repositories defined
230 after this option will inherit the current section name. Default value: 234 after this option will inherit the current section name. Default value:
231 none. 235 none.
232 236
233snapshots:: 237snapshots::
234 Text which specifies the default set of snapshot formats generated by 238 Text which specifies the default set of snapshot formats generated by
235 cgit. The value is a space-separated list of zero or more of the 239 cgit. The value is a space-separated list of zero or more of the
236 values "tar", "tar.gz", "tar.bz2" and "zip". Default value: none. 240 values "tar", "tar.gz", "tar.bz2" and "zip". Default value: none.
237 241
238source-filter:: 242source-filter::
239 Specifies a command which will be invoked to format plaintext blobs 243 Specifies a command which will be invoked to format plaintext blobs
240 in the tree view. The command will get the blob content on its STDIN 244 in the tree view. The command will get the blob content on its STDIN
241 and the name of the blob as its only command line argument. The STDOUT 245 and the name of the blob as its only command line argument. The STDOUT
242 from the command will be included verbatim as the blob contents, i.e. 246 from the command will be included verbatim as the blob contents, i.e.
243 this can be used to implement e.g. syntax highlighting. Default value: 247 this can be used to implement e.g. syntax highlighting. Default value:
244 none. 248 none.
245 249
246summary-branches:: 250summary-branches::
247 Specifies the number of branches to display in the repository "summary" 251 Specifies the number of branches to display in the repository "summary"
248 view. Default value: "10". 252 view. Default value: "10".
249 253
250summary-log:: 254summary-log::
251 Specifies the number of log entries to display in the repository 255 Specifies the number of log entries to display in the repository
252 "summary" view. Default value: "10". 256 "summary" view. Default value: "10".
253 257
254summary-tags:: 258summary-tags::
255 Specifies the number of tags to display in the repository "summary" 259 Specifies the number of tags to display in the repository "summary"
256 view. Default value: "10". 260 view. Default value: "10".
257 261
258virtual-root:: 262virtual-root::
259 Url which, if specified, will be used as root for all cgit links. It 263 Url which, if specified, will be used as root for all cgit links. It
260 will also cause cgit to generate 'virtual urls', i.e. urls like 264 will also cause cgit to generate 'virtual urls', i.e. urls like
261 '/cgit/tree/README' as opposed to '?r=cgit&p=tree&path=README'. Default 265 '/cgit/tree/README' as opposed to '?r=cgit&p=tree&path=README'. Default
262 value: none. 266 value: none.
263 NOTE: cgit has recently learned how to use PATH_INFO to achieve the 267 NOTE: cgit has recently learned how to use PATH_INFO to achieve the
264 same kind of virtual urls, so this option will probably be deprecated. 268 same kind of virtual urls, so this option will probably be deprecated.
265 269
266REPOSITORY SETTINGS 270REPOSITORY SETTINGS
267------------------- 271-------------------
268repo.about-filter:: 272repo.about-filter::
269 Override the default about-filter. Default value: <about-filter>. 273 Override the default about-filter. Default value: none. See also:
274 "enable-filter-overrides".
270 275
271repo.clone-url:: 276repo.clone-url::
272 A list of space-separated urls which can be used to clone this repo. 277 A list of space-separated urls which can be used to clone this repo.
273 Default value: none. 278 Default value: none.
274 279
275repo.commit-filter:: 280repo.commit-filter::
276 Override the default commit-filter. Default value: <commit-filter>. 281 Override the default commit-filter. Default value: none. See also:
282 "enable-filter-overrides".
277 283
278repo.defbranch:: 284repo.defbranch::
279 The name of the default branch for this repository. If no such branch 285 The name of the default branch for this repository. If no such branch
280 exists in the repository, the first branch name (when sorted) is used 286 exists in the repository, the first branch name (when sorted) is used
281 as default instead. Default value: "master". 287 as default instead. Default value: "master".
282 288
283repo.desc:: 289repo.desc::
284 The value to show as repository description. Default value: none. 290 The value to show as repository description. Default value: none.
285 291
286repo.enable-log-filecount:: 292repo.enable-log-filecount::
287 A flag which can be used to disable the global setting 293 A flag which can be used to disable the global setting
288 `enable-log-filecount'. Default value: none. 294 `enable-log-filecount'. Default value: none.
289 295
290repo.enable-log-linecount:: 296repo.enable-log-linecount::
291 A flag which can be used to disable the global setting 297 A flag which can be used to disable the global setting
292 `enable-log-linecount'. Default value: none. 298 `enable-log-linecount'. Default value: none.
293 299
294repo.max-stats:: 300repo.max-stats::
295 Override the default maximum statistics period. Valid values are equal 301 Override the default maximum statistics period. Valid values are equal
296 to the values specified for the global "max-stats" setting. Default 302 to the values specified for the global "max-stats" setting. Default
297 value: none. 303 value: none.
298 304
299repo.name:: 305repo.name::
300 The value to show as repository name. Default value: <repo.url>. 306 The value to show as repository name. Default value: <repo.url>.
301 307
302repo.owner:: 308repo.owner::
303 A value used to identify the owner of the repository. Default value: 309 A value used to identify the owner of the repository. Default value:
304 none. 310 none.
305 311
306repo.path:: 312repo.path::
307 An absolute path to the repository directory. For non-bare repositories 313 An absolute path to the repository directory. For non-bare repositories
308 this is the .git-directory. Default value: none. 314 this is the .git-directory. Default value: none.
309 315
310repo.readme:: 316repo.readme::
311 A path (relative to <repo.path>) which specifies a file to include 317 A path (relative to <repo.path>) which specifies a file to include
312 verbatim as the "About" page for this repo. Default value: none. 318 verbatim as the "About" page for this repo. Default value: none.
313 319
314repo.snapshots:: 320repo.snapshots::
315 A mask of allowed snapshot-formats for this repo, restricted by the 321 A mask of allowed snapshot-formats for this repo, restricted by the
316 "snapshots" global setting. Default value: <snapshots>. 322 "snapshots" global setting. Default value: <snapshots>.
317 323
318repo.section:: 324repo.section::
319 Override the current section name for this repository. Default value: 325 Override the current section name for this repository. Default value:
320 none. 326 none.
321 327
322repo.source-filter:: 328repo.source-filter::
323 Override the default source-filter. Default value: <source-filter>. 329 Override the default source-filter. Default value: none. See also:
330 "enable-filter-overrides".
324 331
325repo.url:: 332repo.url::
326 The relative url used to access the repository. This must be the first 333 The relative url used to access the repository. This must be the first
327 setting specified for each repo. Default value: none. 334 setting specified for each repo. Default value: none.
328 335
329 336
330REPOSITORY-SPECIFIC CGITRC FILE 337REPOSITORY-SPECIFIC CGITRC FILE
331------------------------------- 338-------------------------------
332When the option "scan-path" is used to auto-discover git repositories, cgit 339When the option "scan-path" is used to auto-discover git repositories, cgit
333will try to parse the file "cgitrc" within any found repository. Such a 340will try to parse the file "cgitrc" within any found repository. Such a
334repo-specific config file may contain any of the repo-specific options 341repo-specific config file may contain any of the repo-specific options
335described above, except "repo.url" and "repo.path". Also, in a repo-specific 342described above, except "repo.url" and "repo.path". Additionally, the "filter"
336config file, the "repo." prefix is dropped from the config option names. 343options are only acknowledged in repo-specific config files when
344"enable-filter-overrides" is set to "1".
345
346Note: the "repo." prefix is dropped from the option names in repo-specific
347config files, e.g. "repo.desc" becomes "desc".
337 348
338 349
339EXAMPLE CGITRC FILE 350EXAMPLE CGITRC FILE
340------------------- 351-------------------
341 352
342.... 353....
343# Enable caching of up to 1000 output entriess 354# Enable caching of up to 1000 output entriess
344cache-size=1000 355cache-size=1000
345 356
346 357
347# Specify some default clone prefixes 358# Specify some default clone prefixes
348clone-prefix=git://foobar.com ssh://foobar.com/pub/git http://foobar.com/git 359clone-prefix=git://foobar.com ssh://foobar.com/pub/git http://foobar.com/git
349 360
350# Specify the css url 361# Specify the css url
351css=/css/cgit.css 362css=/css/cgit.css
352 363
353 364
354# Show extra links for each repository on the index page 365# Show extra links for each repository on the index page
355enable-index-links=1 366enable-index-links=1
356 367
357 368
358# Show number of affected files per commit on the log pages 369# Show number of affected files per commit on the log pages
359enable-log-filecount=1 370enable-log-filecount=1
360 371
361 372
362# Show number of added/removed lines per commit on the log pages 373# Show number of added/removed lines per commit on the log pages
363enable-log-linecount=1 374enable-log-linecount=1
364 375
365 376
366# Add a cgit favicon 377# Add a cgit favicon
367favicon=/favicon.ico 378favicon=/favicon.ico
368 379
369 380
370# Use a custom logo 381# Use a custom logo
371logo=/img/mylogo.png 382logo=/img/mylogo.png
372 383
373 384
374# Enable statistics per week, month and quarter 385# Enable statistics per week, month and quarter
375max-stats=quarter 386max-stats=quarter
376 387
377 388
378# Set the title and heading of the repository index page 389# Set the title and heading of the repository index page
379root-title=foobar.com git repositories 390root-title=foobar.com git repositories
380 391
381 392
382# Set a subheading for the repository index page 393# Set a subheading for the repository index page
383root-desc=tracking the foobar development 394root-desc=tracking the foobar development
384 395