about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorLars Hjemli2007-05-16 00:58:35 +0200
committerLars Hjemli2007-05-16 00:58:35 +0200
commitf9ff7df613b4ee86fe5914c4ae3400650882c03d (patch)
treec26fde3a4d3485943c275232f18359bebd133f1a
parentChange commit-view to expect h parameter, not id (diff)
downloadcgit-f9ff7df613b4ee86fe5914c4ae3400650882c03d.tar.gz
cgit-f9ff7df613b4ee86fe5914c4ae3400650882c03d.zip
Add support for commitdiff via h parameter
The commitdiff will be generated against the first parent, and the
diff page also gets the benefit of repo.defbranch.

Cleaned up some bad whitespace in cgit.h while at it.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r--cgit.c3
-rw-r--r--cgit.h11
-rw-r--r--ui-diff.c14
3 files changed, 21 insertions, 7 deletions
diff --git a/cgit.c b/cgit.c index 9b4815d..3e7e595 100644 --- a/cgit.c +++ b/cgit.c
@@ -120,7 +120,8 @@ static void cgit_print_repo_page(struct cacheitem *item)
120 } else if (!strcmp(cgit_query_page, "view")) { 120 } else if (!strcmp(cgit_query_page, "view")) {
121 cgit_print_view(cgit_query_sha1, cgit_query_path); 121 cgit_print_view(cgit_query_sha1, cgit_query_path);
122 } else if (!strcmp(cgit_query_page, "diff")) { 122 } else if (!strcmp(cgit_query_page, "diff")) {
123 cgit_print_diff(cgit_query_sha1, cgit_query_sha2, cgit_query_path); 123 cgit_print_diff(cgit_query_head, cgit_query_sha1, cgit_query_sha2,
124 cgit_query_path);
124 } else { 125 } else {
125 cgit_print_error("Invalid request"); 126 cgit_print_error("Invalid request");
126 } 127 }
diff --git a/cgit.h b/cgit.h index ac710a6..764225d 100644 --- a/cgit.h +++ b/cgit.h
@@ -157,7 +157,7 @@ extern int cache_exist(struct cacheitem *item);
157extern int cache_expired(struct cacheitem *item); 157extern int cache_expired(struct cacheitem *item);
158 158
159extern char *cgit_repourl(const char *reponame); 159extern char *cgit_repourl(const char *reponame);
160extern char *cgit_pageurl(const char *reponame, const char *pagename, 160extern char *cgit_pageurl(const char *reponame, const char *pagename,
161 const char *query); 161 const char *query);
162 162
163extern void cgit_print_error(char *msg); 163extern void cgit_print_error(char *msg);
@@ -165,8 +165,8 @@ extern void cgit_print_date(unsigned long secs);
165extern void cgit_print_docstart(char *title, struct cacheitem *item); 165extern void cgit_print_docstart(char *title, struct cacheitem *item);
166extern void cgit_print_docend(); 166extern void cgit_print_docend();
167extern void cgit_print_pageheader(char *title, int show_search); 167extern void cgit_print_pageheader(char *title, int show_search);
168extern void cgit_print_snapshot_start(const char *mimetype, 168extern void cgit_print_snapshot_start(const char *mimetype,
169 const char *filename, 169 const char *filename,
170 struct cacheitem *item); 170 struct cacheitem *item);
171 171
172extern void cgit_print_repolist(struct cacheitem *item); 172extern void cgit_print_repolist(struct cacheitem *item);
@@ -176,8 +176,9 @@ extern void cgit_print_view(const char *hex, char *path);
176extern void cgit_print_blob(struct cacheitem *item, const char *hex, char *path); 176extern void cgit_print_blob(struct cacheitem *item, const char *hex, char *path);
177extern void cgit_print_tree(const char *rev, const char *hex, char *path); 177extern void cgit_print_tree(const char *rev, const char *hex, char *path);
178extern void cgit_print_commit(const char *hex); 178extern void cgit_print_commit(const char *hex);
179extern void cgit_print_diff(const char *old_hex, const char *new_hex, char *path); 179extern void cgit_print_diff(const char *head, const char *old_hex, const char *new_hex,
180extern void cgit_print_snapshot(struct cacheitem *item, const char *hex, 180 char *path);
181extern void cgit_print_snapshot(struct cacheitem *item, const char *hex,
181 const char *format, const char *prefix, 182 const char *format, const char *prefix,
182 const char *filename); 183 const char *filename);
183 184
diff --git a/ui-diff.c b/ui-diff.c index 999b6f3..afe1c90 100644 --- a/ui-diff.c +++ b/ui-diff.c
@@ -66,11 +66,23 @@ static void filepair_cb(struct diff_filepair *pair)
66 html("</tr></td>"); 66 html("</tr></td>");
67} 67}
68 68
69void cgit_print_diff(const char *old_hex, const char *new_hex, char *path) 69void cgit_print_diff(const char *head, const char *old_hex, const char *new_hex, char *path)
70{ 70{
71 unsigned char sha1[20], sha2[20]; 71 unsigned char sha1[20], sha2[20];
72 enum object_type type; 72 enum object_type type;
73 unsigned long size; 73 unsigned long size;
74 struct commit *commit;
75
76 if (head && !old_hex && !new_hex) {
77 get_sha1(head, sha1);
78 commit = lookup_commit_reference(sha1);
79 if (commit && !parse_commit(commit)) {
80 html("<table class='diff'>");
81 cgit_diff_commit(commit, filepair_cb);
82 html("</td></tr></table>");
83 }
84 return;
85 }
74 86
75 get_sha1(old_hex, sha1); 87 get_sha1(old_hex, sha1);
76 get_sha1(new_hex, sha2); 88 get_sha1(new_hex, sha2);