summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c2
-rw-r--r--cgit.css19
-rw-r--r--cgit.h4
-rw-r--r--shared.c3
-rw-r--r--ui-log.c9
-rw-r--r--ui-shared.c9
-rw-r--r--ui-summary.c2
7 files changed, 39 insertions, 9 deletions
diff --git a/cgit.c b/cgit.c
index cc18ed4..142e416 100644
--- a/cgit.c
+++ b/cgit.c
@@ -73,49 +73,49 @@ static void cgit_print_repo_page(struct cacheitem *item)
73 cgit_query_path, 73 cgit_query_path,
74 cgit_repo->snapshots ); 74 cgit_repo->snapshots );
75 return; 75 return;
76 } 76 }
77 77
78 if (cgit_cmd == CMD_BLOB) { 78 if (cgit_cmd == CMD_BLOB) {
79 cgit_print_blob(item, cgit_query_sha1, cgit_query_path); 79 cgit_print_blob(item, cgit_query_sha1, cgit_query_path);
80 return; 80 return;
81 } 81 }
82 82
83 show_search = (cgit_cmd == CMD_LOG); 83 show_search = (cgit_cmd == CMD_LOG);
84 cgit_print_docstart(title, item); 84 cgit_print_docstart(title, item);
85 if (!cgit_cmd) { 85 if (!cgit_cmd) {
86 cgit_print_pageheader("summary", show_search); 86 cgit_print_pageheader("summary", show_search);
87 cgit_print_summary(); 87 cgit_print_summary();
88 cgit_print_docend(); 88 cgit_print_docend();
89 return; 89 return;
90 } 90 }
91 91
92 cgit_print_pageheader(cgit_query_page, show_search); 92 cgit_print_pageheader(cgit_query_page, show_search);
93 93
94 switch(cgit_cmd) { 94 switch(cgit_cmd) {
95 case CMD_LOG: 95 case CMD_LOG:
96 cgit_print_log(cgit_query_sha1, cgit_query_ofs, 96 cgit_print_log(cgit_query_sha1, cgit_query_ofs,
97 cgit_max_commit_count, cgit_query_search, 97 cgit_max_commit_count, cgit_query_grep, cgit_query_search,
98 cgit_query_path, 1); 98 cgit_query_path, 1);
99 break; 99 break;
100 case CMD_TREE: 100 case CMD_TREE:
101 cgit_print_tree(cgit_query_sha1, cgit_query_path); 101 cgit_print_tree(cgit_query_sha1, cgit_query_path);
102 break; 102 break;
103 case CMD_COMMIT: 103 case CMD_COMMIT:
104 cgit_print_commit(cgit_query_sha1); 104 cgit_print_commit(cgit_query_sha1);
105 break; 105 break;
106 case CMD_REFS: 106 case CMD_REFS:
107 cgit_print_refs(); 107 cgit_print_refs();
108 break; 108 break;
109 case CMD_TAG: 109 case CMD_TAG:
110 cgit_print_tag(cgit_query_sha1); 110 cgit_print_tag(cgit_query_sha1);
111 break; 111 break;
112 case CMD_DIFF: 112 case CMD_DIFF:
113 cgit_print_diff(cgit_query_sha1, cgit_query_sha2, cgit_query_path); 113 cgit_print_diff(cgit_query_sha1, cgit_query_sha2, cgit_query_path);
114 break; 114 break;
115 default: 115 default:
116 cgit_print_error("Invalid request"); 116 cgit_print_error("Invalid request");
117 } 117 }
118 cgit_print_docend(); 118 cgit_print_docend();
119} 119}
120 120
121static void cgit_fill_cache(struct cacheitem *item, int use_cache) 121static void cgit_fill_cache(struct cacheitem *item, int use_cache)
diff --git a/cgit.css b/cgit.css
index b8c3d81..5d47099 100644
--- a/cgit.css
+++ b/cgit.css
@@ -123,57 +123,74 @@ td#crumb {
123 123
124td#crumb a { 124td#crumb a {
125 color: #ccc; 125 color: #ccc;
126 background-color: #666; 126 background-color: #666;
127 padding: 0em 0.5em 0em 0.5em; 127 padding: 0em 0.5em 0em 0.5em;
128} 128}
129 129
130td#crumb a:hover { 130td#crumb a:hover {
131 color: #666; 131 color: #666;
132 background-color: #ccc; 132 background-color: #ccc;
133 text-decoration: none; 133 text-decoration: none;
134} 134}
135 135
136td#search { 136td#search {
137 text-align: right; 137 text-align: right;
138 vertical-align: middle; 138 vertical-align: middle;
139 padding-right: 0.5em; 139 padding-right: 0.5em;
140} 140}
141 141
142td#search form { 142td#search form {
143 margin: 0px; 143 margin: 0px;
144 padding: 0px; 144 padding: 0px;
145} 145}
146 146
147td#search select {
148 font-size: 9pt;
149 padding: 0px;
150 border: solid 1px #333;
151 color: #333;
152 background-color: #fff;
153}
154
147td#search input { 155td#search input {
148 font-size: 9pt; 156 font-size: 9pt;
149 padding: 0px; 157 padding: 0px;
150 width: 10em; 158}
159
160td#search input.txt {
161 width: 8em;
151 border: solid 1px #333; 162 border: solid 1px #333;
152 color: #333; 163 color: #333;
153 background-color: #fff; 164 background-color: #fff;
154} 165}
155 166
167td#search input.btn {
168 border: solid 1px #333;
169 color: #333;
170 background-color: #ccc;
171}
172
156div#summary { 173div#summary {
157 vertical-align: top; 174 vertical-align: top;
158 margin-bottom: 1em; 175 margin-bottom: 1em;
159} 176}
160 177
161table#downloads { 178table#downloads {
162 float: right; 179 float: right;
163 border-collapse: collapse; 180 border-collapse: collapse;
164 border: solid 1px #777; 181 border: solid 1px #777;
165 margin-left: 0.5em; 182 margin-left: 0.5em;
166 margin-bottom: 0.5em; 183 margin-bottom: 0.5em;
167} 184}
168 185
169table#downloads th { 186table#downloads th {
170 background-color: #ccc; 187 background-color: #ccc;
171} 188}
172 189
173td#content { 190td#content {
174 padding: 1em 0.5em; 191 padding: 1em 0.5em;
175} 192}
176 193
177div#blob { 194div#blob {
178 border: solid 1px black; 195 border: solid 1px black;
179} 196}
diff --git a/cgit.h b/cgit.h
index 0baa679..dd83f70 100644
--- a/cgit.h
+++ b/cgit.h
@@ -137,48 +137,49 @@ extern int cgit_snapshots;
137extern int cgit_enable_index_links; 137extern int cgit_enable_index_links;
138extern int cgit_enable_log_filecount; 138extern int cgit_enable_log_filecount;
139extern int cgit_enable_log_linecount; 139extern int cgit_enable_log_linecount;
140extern int cgit_max_lock_attempts; 140extern int cgit_max_lock_attempts;
141extern int cgit_cache_root_ttl; 141extern int cgit_cache_root_ttl;
142extern int cgit_cache_repo_ttl; 142extern int cgit_cache_repo_ttl;
143extern int cgit_cache_dynamic_ttl; 143extern int cgit_cache_dynamic_ttl;
144extern int cgit_cache_static_ttl; 144extern int cgit_cache_static_ttl;
145extern int cgit_cache_max_create_time; 145extern int cgit_cache_max_create_time;
146extern int cgit_summary_log; 146extern int cgit_summary_log;
147extern int cgit_summary_tags; 147extern int cgit_summary_tags;
148extern int cgit_summary_branches; 148extern int cgit_summary_branches;
149 149
150extern int cgit_max_msg_len; 150extern int cgit_max_msg_len;
151extern int cgit_max_repodesc_len; 151extern int cgit_max_repodesc_len;
152extern int cgit_max_commit_count; 152extern int cgit_max_commit_count;
153 153
154extern int cgit_query_has_symref; 154extern int cgit_query_has_symref;
155extern int cgit_query_has_sha1; 155extern int cgit_query_has_sha1;
156 156
157extern char *cgit_querystring; 157extern char *cgit_querystring;
158extern char *cgit_query_repo; 158extern char *cgit_query_repo;
159extern char *cgit_query_page; 159extern char *cgit_query_page;
160extern char *cgit_query_search; 160extern char *cgit_query_search;
161extern char *cgit_query_grep;
161extern char *cgit_query_head; 162extern char *cgit_query_head;
162extern char *cgit_query_sha1; 163extern char *cgit_query_sha1;
163extern char *cgit_query_sha2; 164extern char *cgit_query_sha2;
164extern char *cgit_query_path; 165extern char *cgit_query_path;
165extern char *cgit_query_name; 166extern char *cgit_query_name;
166extern int cgit_query_ofs; 167extern int cgit_query_ofs;
167 168
168extern int htmlfd; 169extern int htmlfd;
169 170
170extern int cgit_get_cmd_index(const char *cmd); 171extern int cgit_get_cmd_index(const char *cmd);
171extern struct repoinfo *cgit_get_repoinfo(const char *url); 172extern struct repoinfo *cgit_get_repoinfo(const char *url);
172extern void cgit_global_config_cb(const char *name, const char *value); 173extern void cgit_global_config_cb(const char *name, const char *value);
173extern void cgit_repo_config_cb(const char *name, const char *value); 174extern void cgit_repo_config_cb(const char *name, const char *value);
174extern void cgit_querystring_cb(const char *name, const char *value); 175extern void cgit_querystring_cb(const char *name, const char *value);
175 176
176extern int chk_zero(int result, char *msg); 177extern int chk_zero(int result, char *msg);
177extern int chk_positive(int result, char *msg); 178extern int chk_positive(int result, char *msg);
178extern int chk_non_negative(int result, char *msg); 179extern int chk_non_negative(int result, char *msg);
179 180
180extern int hextoint(char c); 181extern int hextoint(char c);
181extern char *trim_end(const char *str, char c); 182extern char *trim_end(const char *str, char c);
182 183
183extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); 184extern void cgit_add_ref(struct reflist *list, struct refinfo *ref);
184extern int cgit_refs_cb(const char *refname, const unsigned char *sha1, 185extern int cgit_refs_cb(const char *refname, const unsigned char *sha1,
@@ -239,39 +240,40 @@ extern void cgit_commit_link(char *name, char *title, char *class, char *head,
239 char *rev); 240 char *rev);
240extern void cgit_refs_link(char *name, char *title, char *class, char *head, 241extern void cgit_refs_link(char *name, char *title, char *class, char *head,
241 char *rev, char *path); 242 char *rev, char *path);
242extern void cgit_snapshot_link(char *name, char *title, char *class, 243extern void cgit_snapshot_link(char *name, char *title, char *class,
243 char *head, char *rev, char *archivename); 244 char *head, char *rev, char *archivename);
244extern void cgit_diff_link(char *name, char *title, char *class, char *head, 245extern void cgit_diff_link(char *name, char *title, char *class, char *head,
245 char *new_rev, char *old_rev, char *path); 246 char *new_rev, char *old_rev, char *path);
246 247
247extern void cgit_object_link(struct object *obj); 248extern void cgit_object_link(struct object *obj);
248 249
249extern void cgit_print_error(char *msg); 250extern void cgit_print_error(char *msg);
250extern void cgit_print_date(time_t secs, char *format); 251extern void cgit_print_date(time_t secs, char *format);
251extern void cgit_print_age(time_t t, time_t max_relative, char *format); 252extern void cgit_print_age(time_t t, time_t max_relative, char *format);
252extern void cgit_print_docstart(char *title, struct cacheitem *item); 253extern void cgit_print_docstart(char *title, struct cacheitem *item);
253extern void cgit_print_docend(); 254extern void cgit_print_docend();
254extern void cgit_print_pageheader(char *title, int show_search); 255extern void cgit_print_pageheader(char *title, int show_search);
255extern void cgit_print_snapshot_start(const char *mimetype, 256extern void cgit_print_snapshot_start(const char *mimetype,
256 const char *filename, 257 const char *filename,
257 struct cacheitem *item); 258 struct cacheitem *item);
258extern void cgit_print_branches(int maxcount); 259extern void cgit_print_branches(int maxcount);
259extern void cgit_print_tags(int maxcount); 260extern void cgit_print_tags(int maxcount);
260 261
261extern void cgit_print_repolist(struct cacheitem *item); 262extern void cgit_print_repolist(struct cacheitem *item);
262extern void cgit_print_summary(); 263extern void cgit_print_summary();
263extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *path, int pager); 264extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep,
265 char *pattern, char *path, int pager);
264extern void cgit_print_blob(struct cacheitem *item, const char *hex, char *path); 266extern void cgit_print_blob(struct cacheitem *item, const char *hex, char *path);
265extern void cgit_print_tree(const char *rev, char *path); 267extern void cgit_print_tree(const char *rev, char *path);
266extern void cgit_print_commit(char *hex); 268extern void cgit_print_commit(char *hex);
267extern void cgit_print_refs(); 269extern void cgit_print_refs();
268extern void cgit_print_tag(char *revname); 270extern void cgit_print_tag(char *revname);
269extern void cgit_print_diff(const char *new_hex, const char *old_hex, const char *prefix); 271extern void cgit_print_diff(const char *new_hex, const char *old_hex, const char *prefix);
270extern void cgit_print_snapshot(struct cacheitem *item, const char *head, 272extern void cgit_print_snapshot(struct cacheitem *item, const char *head,
271 const char *hex, const char *prefix, 273 const char *hex, const char *prefix,
272 const char *filename, int snapshot); 274 const char *filename, int snapshot);
273extern void cgit_print_snapshot_links(const char *repo, const char *head, 275extern void cgit_print_snapshot_links(const char *repo, const char *head,
274 const char *hex, int snapshots); 276 const char *hex, int snapshots);
275extern int cgit_parse_snapshots_mask(const char *str); 277extern int cgit_parse_snapshots_mask(const char *str);
276 278
277#endif /* CGIT_H */ 279#endif /* CGIT_H */
diff --git a/shared.c b/shared.c
index 7eb2b0e..4fab1c9 100644
--- a/shared.c
+++ b/shared.c
@@ -33,48 +33,49 @@ int cgit_enable_log_filecount = 0;
33int cgit_enable_log_linecount = 0; 33int cgit_enable_log_linecount = 0;
34int cgit_max_lock_attempts = 5; 34int cgit_max_lock_attempts = 5;
35int cgit_cache_root_ttl = 5; 35int cgit_cache_root_ttl = 5;
36int cgit_cache_repo_ttl = 5; 36int cgit_cache_repo_ttl = 5;
37int cgit_cache_dynamic_ttl = 5; 37int cgit_cache_dynamic_ttl = 5;
38int cgit_cache_static_ttl = -1; 38int cgit_cache_static_ttl = -1;
39int cgit_cache_max_create_time = 5; 39int cgit_cache_max_create_time = 5;
40int cgit_summary_log = 0; 40int cgit_summary_log = 0;
41int cgit_summary_tags = 0; 41int cgit_summary_tags = 0;
42int cgit_summary_branches = 0; 42int cgit_summary_branches = 0;
43int cgit_renamelimit = -1; 43int cgit_renamelimit = -1;
44 44
45int cgit_max_msg_len = 60; 45int cgit_max_msg_len = 60;
46int cgit_max_repodesc_len = 60; 46int cgit_max_repodesc_len = 60;
47int cgit_max_commit_count = 50; 47int cgit_max_commit_count = 50;
48 48
49int cgit_query_has_symref = 0; 49int cgit_query_has_symref = 0;
50int cgit_query_has_sha1 = 0; 50int cgit_query_has_sha1 = 0;
51 51
52char *cgit_querystring = NULL; 52char *cgit_querystring = NULL;
53char *cgit_query_repo = NULL; 53char *cgit_query_repo = NULL;
54char *cgit_query_page = NULL; 54char *cgit_query_page = NULL;
55char *cgit_query_head = NULL; 55char *cgit_query_head = NULL;
56char *cgit_query_search = NULL; 56char *cgit_query_search = NULL;
57char *cgit_query_grep = NULL;
57char *cgit_query_sha1 = NULL; 58char *cgit_query_sha1 = NULL;
58char *cgit_query_sha2 = NULL; 59char *cgit_query_sha2 = NULL;
59char *cgit_query_path = NULL; 60char *cgit_query_path = NULL;
60char *cgit_query_name = NULL; 61char *cgit_query_name = NULL;
61int cgit_query_ofs = 0; 62int cgit_query_ofs = 0;
62 63
63int htmlfd = 0; 64int htmlfd = 0;
64 65
65 66
66int cgit_get_cmd_index(const char *cmd) 67int cgit_get_cmd_index(const char *cmd)
67{ 68{
68 static char *cmds[] = {"log", "commit", "diff", "tree", "blob", 69 static char *cmds[] = {"log", "commit", "diff", "tree", "blob",
69 "snapshot", "tag", "refs", NULL}; 70 "snapshot", "tag", "refs", NULL};
70 int i; 71 int i;
71 72
72 for(i = 0; cmds[i]; i++) 73 for(i = 0; cmds[i]; i++)
73 if (!strcmp(cmd, cmds[i])) 74 if (!strcmp(cmd, cmds[i]))
74 return i + 1; 75 return i + 1;
75 return 0; 76 return 0;
76} 77}
77 78
78int chk_zero(int result, char *msg) 79int chk_zero(int result, char *msg)
79{ 80{
80 if (result != 0) 81 if (result != 0)
@@ -211,48 +212,50 @@ void cgit_global_config_cb(const char *name, const char *value)
211 cgit_repo->enable_log_filecount = cgit_enable_log_filecount * atoi(value); 212 cgit_repo->enable_log_filecount = cgit_enable_log_filecount * atoi(value);
212 else if (cgit_repo && !strcmp(name, "repo.enable-log-linecount")) 213 else if (cgit_repo && !strcmp(name, "repo.enable-log-linecount"))
213 cgit_repo->enable_log_linecount = cgit_enable_log_linecount * atoi(value); 214 cgit_repo->enable_log_linecount = cgit_enable_log_linecount * atoi(value);
214 else if (cgit_repo && !strcmp(name, "repo.module-link")) 215 else if (cgit_repo && !strcmp(name, "repo.module-link"))
215 cgit_repo->module_link= xstrdup(value); 216 cgit_repo->module_link= xstrdup(value);
216 else if (cgit_repo && !strcmp(name, "repo.readme") && value != NULL) { 217 else if (cgit_repo && !strcmp(name, "repo.readme") && value != NULL) {
217 if (*value == '/') 218 if (*value == '/')
218 cgit_repo->readme = xstrdup(value); 219 cgit_repo->readme = xstrdup(value);
219 else 220 else
220 cgit_repo->readme = xstrdup(fmt("%s/%s", cgit_repo->path, value)); 221 cgit_repo->readme = xstrdup(fmt("%s/%s", cgit_repo->path, value));
221 } else if (!strcmp(name, "include")) 222 } else if (!strcmp(name, "include"))
222 cgit_read_config(value, cgit_global_config_cb); 223 cgit_read_config(value, cgit_global_config_cb);
223} 224}
224 225
225void cgit_querystring_cb(const char *name, const char *value) 226void cgit_querystring_cb(const char *name, const char *value)
226{ 227{
227 if (!strcmp(name,"r")) { 228 if (!strcmp(name,"r")) {
228 cgit_query_repo = xstrdup(value); 229 cgit_query_repo = xstrdup(value);
229 cgit_repo = cgit_get_repoinfo(value); 230 cgit_repo = cgit_get_repoinfo(value);
230 } else if (!strcmp(name, "p")) { 231 } else if (!strcmp(name, "p")) {
231 cgit_query_page = xstrdup(value); 232 cgit_query_page = xstrdup(value);
232 cgit_cmd = cgit_get_cmd_index(value); 233 cgit_cmd = cgit_get_cmd_index(value);
233 } else if (!strcmp(name, "url")) { 234 } else if (!strcmp(name, "url")) {
234 cgit_parse_url(value); 235 cgit_parse_url(value);
236 } else if (!strcmp(name, "qt")) {
237 cgit_query_grep = xstrdup(value);
235 } else if (!strcmp(name, "q")) { 238 } else if (!strcmp(name, "q")) {
236 cgit_query_search = xstrdup(value); 239 cgit_query_search = xstrdup(value);
237 } else if (!strcmp(name, "h")) { 240 } else if (!strcmp(name, "h")) {
238 cgit_query_head = xstrdup(value); 241 cgit_query_head = xstrdup(value);
239 cgit_query_has_symref = 1; 242 cgit_query_has_symref = 1;
240 } else if (!strcmp(name, "id")) { 243 } else if (!strcmp(name, "id")) {
241 cgit_query_sha1 = xstrdup(value); 244 cgit_query_sha1 = xstrdup(value);
242 cgit_query_has_sha1 = 1; 245 cgit_query_has_sha1 = 1;
243 } else if (!strcmp(name, "id2")) { 246 } else if (!strcmp(name, "id2")) {
244 cgit_query_sha2 = xstrdup(value); 247 cgit_query_sha2 = xstrdup(value);
245 cgit_query_has_sha1 = 1; 248 cgit_query_has_sha1 = 1;
246 } else if (!strcmp(name, "ofs")) { 249 } else if (!strcmp(name, "ofs")) {
247 cgit_query_ofs = atoi(value); 250 cgit_query_ofs = atoi(value);
248 } else if (!strcmp(name, "path")) { 251 } else if (!strcmp(name, "path")) {
249 cgit_query_path = trim_end(value, '/'); 252 cgit_query_path = trim_end(value, '/');
250 } else if (!strcmp(name, "name")) { 253 } else if (!strcmp(name, "name")) {
251 cgit_query_name = xstrdup(value); 254 cgit_query_name = xstrdup(value);
252 } 255 }
253} 256}
254 257
255void *cgit_free_commitinfo(struct commitinfo *info) 258void *cgit_free_commitinfo(struct commitinfo *info)
256{ 259{
257 free(info->author); 260 free(info->author);
258 free(info->author_email); 261 free(info->author_email);
diff --git a/ui-log.c b/ui-log.c
index d38e40a..e7f7d6f 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -30,61 +30,64 @@ void print_commit(struct commit *commit)
30 info = cgit_parse_commit(commit); 30 info = cgit_parse_commit(commit);
31 html("<tr><td>"); 31 html("<tr><td>");
32 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE); 32 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE);
33 html("</td><td>"); 33 html("</td><td>");
34 cgit_commit_link(info->subject, NULL, NULL, cgit_query_head, 34 cgit_commit_link(info->subject, NULL, NULL, cgit_query_head,
35 sha1_to_hex(commit->object.sha1)); 35 sha1_to_hex(commit->object.sha1));
36 if (cgit_repo->enable_log_filecount) { 36 if (cgit_repo->enable_log_filecount) {
37 files = 0; 37 files = 0;
38 lines = 0; 38 lines = 0;
39 cgit_diff_commit(commit, inspect_files); 39 cgit_diff_commit(commit, inspect_files);
40 html("</td><td class='right'>"); 40 html("</td><td class='right'>");
41 htmlf("%d", files); 41 htmlf("%d", files);
42 if (cgit_repo->enable_log_linecount) { 42 if (cgit_repo->enable_log_linecount) {
43 html("</td><td class='right'>"); 43 html("</td><td class='right'>");
44 htmlf("%d", lines); 44 htmlf("%d", lines);
45 } 45 }
46 } 46 }
47 html("</td><td>"); 47 html("</td><td>");
48 html_txt(info->author); 48 html_txt(info->author);
49 html("</td></tr>\n"); 49 html("</td></tr>\n");
50 cgit_free_commitinfo(info); 50 cgit_free_commitinfo(info);
51} 51}
52 52
53 53
54void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *path, int pager) 54void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern, char *path, int pager)
55{ 55{
56 struct rev_info rev; 56 struct rev_info rev;
57 struct commit *commit; 57 struct commit *commit;
58 const char *argv[] = {NULL, tip, NULL, NULL, NULL}; 58 const char *argv[] = {NULL, tip, NULL, NULL, NULL};
59 int argc = 2; 59 int argc = 2;
60 int i; 60 int i;
61 61
62 if (!tip) 62 if (!tip)
63 argv[1] = cgit_query_head; 63 argv[1] = cgit_query_head;
64 64
65 if (grep) 65 if (grep && pattern && (!strcmp(grep, "grep") ||
66 argv[argc++] = fmt("--grep=%s", grep); 66 !strcmp(grep, "author") ||
67 !strcmp(grep, "committer")))
68 argv[argc++] = fmt("--%s=%s", grep, pattern);
69
67 if (path) { 70 if (path) {
68 argv[argc++] = "--"; 71 argv[argc++] = "--";
69 argv[argc++] = path; 72 argv[argc++] = path;
70 } 73 }
71 init_revisions(&rev, NULL); 74 init_revisions(&rev, NULL);
72 rev.abbrev = DEFAULT_ABBREV; 75 rev.abbrev = DEFAULT_ABBREV;
73 rev.commit_format = CMIT_FMT_DEFAULT; 76 rev.commit_format = CMIT_FMT_DEFAULT;
74 rev.verbose_header = 1; 77 rev.verbose_header = 1;
75 rev.show_root_diff = 0; 78 rev.show_root_diff = 0;
76 setup_revisions(argc, argv, &rev, NULL); 79 setup_revisions(argc, argv, &rev, NULL);
77 if (rev.grep_filter) { 80 if (rev.grep_filter) {
78 rev.grep_filter->regflags |= REG_ICASE; 81 rev.grep_filter->regflags |= REG_ICASE;
79 compile_grep_patterns(rev.grep_filter); 82 compile_grep_patterns(rev.grep_filter);
80 } 83 }
81 prepare_revision_walk(&rev); 84 prepare_revision_walk(&rev);
82 85
83 html("<table class='list nowrap'>"); 86 html("<table class='list nowrap'>");
84 html("<tr class='nohover'><th class='left'>Age</th>" 87 html("<tr class='nohover'><th class='left'>Age</th>"
85 "<th class='left'>Message</th>"); 88 "<th class='left'>Message</th>");
86 89
87 if (cgit_repo->enable_log_filecount) { 90 if (cgit_repo->enable_log_filecount) {
88 html("<th class='left'>Files</th>"); 91 html("<th class='left'>Files</th>");
89 if (cgit_repo->enable_log_linecount) 92 if (cgit_repo->enable_log_linecount)
90 html("<th class='left'>Lines</th>"); 93 html("<th class='left'>Lines</th>");
diff --git a/ui-shared.c b/ui-shared.c
index e4bb98f..45105dc 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -396,44 +396,49 @@ void cgit_print_pageheader(char *title, int show_search)
396 cgit_diff_link("diff", NULL, NULL, cgit_query_head, 396 cgit_diff_link("diff", NULL, NULL, cgit_query_head,
397 cgit_query_sha1, cgit_query_sha2, 397 cgit_query_sha1, cgit_query_sha2,
398 cgit_query_path); 398 cgit_query_path);
399 } else { 399 } else {
400 html_txt("Index of repositories"); 400 html_txt("Index of repositories");
401 } 401 }
402 html("</td>"); 402 html("</td>");
403 html("<td id='search'>"); 403 html("<td id='search'>");
404 if (show_search) { 404 if (show_search) {
405 html("<form method='get' action='"); 405 html("<form method='get' action='");
406 html_attr(cgit_currurl()); 406 html_attr(cgit_currurl());
407 html("'>"); 407 html("'>");
408 if (!cgit_virtual_root) { 408 if (!cgit_virtual_root) {
409 if (cgit_query_repo) 409 if (cgit_query_repo)
410 html_hidden("r", cgit_query_repo); 410 html_hidden("r", cgit_query_repo);
411 if (cgit_query_page) 411 if (cgit_query_page)
412 html_hidden("p", cgit_query_page); 412 html_hidden("p", cgit_query_page);
413 } 413 }
414 if (cgit_query_head) 414 if (cgit_query_head)
415 html_hidden("h", cgit_query_head); 415 html_hidden("h", cgit_query_head);
416 if (cgit_query_sha1) 416 if (cgit_query_sha1)
417 html_hidden("id", cgit_query_sha1); 417 html_hidden("id", cgit_query_sha1);
418 if (cgit_query_sha2) 418 if (cgit_query_sha2)
419 html_hidden("id2", cgit_query_sha2); 419 html_hidden("id2", cgit_query_sha2);
420 html("<input type='text' name='q' value='"); 420 html("<select name='qt'>");
421 html_option("grep", "log msg", cgit_query_grep);
422 html_option("author", "author", cgit_query_grep);
423 html_option("committer", "committer", cgit_query_grep);
424 html("</select>");
425 html("<input class='txt' type='text' name='q' value='");
421 html_attr(cgit_query_search); 426 html_attr(cgit_query_search);
422 html("'/></form>"); 427 html("'/><input class='btn' type='submit' value='...'/></form>");
423 } 428 }
424 html("</td></tr>"); 429 html("</td></tr>");
425 html("<tr><td id='content' colspan='2'>"); 430 html("<tr><td id='content' colspan='2'>");
426} 431}
427 432
428void cgit_print_snapshot_start(const char *mimetype, const char *filename, 433void cgit_print_snapshot_start(const char *mimetype, const char *filename,
429 struct cacheitem *item) 434 struct cacheitem *item)
430{ 435{
431 htmlf("Content-Type: %s\n", mimetype); 436 htmlf("Content-Type: %s\n", mimetype);
432 htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename); 437 htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename);
433 htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); 438 htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime));
434 htmlf("Expires: %s\n", http_date(item->st.st_mtime + 439 htmlf("Expires: %s\n", http_date(item->st.st_mtime +
435 ttl_seconds(item->ttl))); 440 ttl_seconds(item->ttl)));
436 html("\n"); 441 html("\n");
437} 442}
438 443
439/* vim:set sw=8: */ 444/* vim:set sw=8: */
diff --git a/ui-summary.c b/ui-summary.c
index 178e959..04a466a 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -215,33 +215,33 @@ void cgit_print_tags(int maxcount)
215 print_refs_link("tags"); 215 print_refs_link("tags");
216} 216}
217 217
218static void cgit_print_archives() 218static void cgit_print_archives()
219{ 219{
220 header = 0; 220 header = 0;
221 for_each_ref(cgit_print_archive_cb, NULL); 221 for_each_ref(cgit_print_archive_cb, NULL);
222 if (header) 222 if (header)
223 html("</table>"); 223 html("</table>");
224} 224}
225 225
226void cgit_print_summary() 226void cgit_print_summary()
227{ 227{
228 html("<div id='summary'>"); 228 html("<div id='summary'>");
229 cgit_print_archives(); 229 cgit_print_archives();
230 html("<h2>"); 230 html("<h2>");
231 html_txt(cgit_repo->name); 231 html_txt(cgit_repo->name);
232 html(" - "); 232 html(" - ");
233 html_txt(cgit_repo->desc); 233 html_txt(cgit_repo->desc);
234 html("</h2>"); 234 html("</h2>");
235 if (cgit_repo->readme) 235 if (cgit_repo->readme)
236 html_include(cgit_repo->readme); 236 html_include(cgit_repo->readme);
237 html("</div>"); 237 html("</div>");
238 if (cgit_summary_log > 0) 238 if (cgit_summary_log > 0)
239 cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, NULL, 0); 239 cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, NULL, NULL, 0);
240 html("<table class='list nowrap'>"); 240 html("<table class='list nowrap'>");
241 if (cgit_summary_log > 0) 241 if (cgit_summary_log > 0)
242 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>"); 242 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
243 cgit_print_branches(cgit_summary_branches); 243 cgit_print_branches(cgit_summary_branches);
244 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>"); 244 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
245 cgit_print_tags(cgit_summary_tags); 245 cgit_print_tags(cgit_summary_tags);
246 html("</table>"); 246 html("</table>");
247} 247}