diff options
author | Lars Hjemli <hjemli@gmail.com> | 2007-10-01 18:42:19 (JST) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-10-01 18:42:19 (JST) |
commit | f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae (patch) | |
tree | 086e1afad5762c5b6bb09672b58f2c491ffbbc20 | |
parent | 98fcf7227c8dda520c864ea8a51012934115258f (diff) | |
download | cgit-f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae.zip cgit-f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae.tar.gz |
Add prefix parameter to cgit_diff_tree()
This paramter can be used to restrict a diff to the specified path prefix.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.h | 2 | ||||
-rw-r--r-- | shared.c | 11 | ||||
-rw-r--r-- | ui-diff.c | 3 |
3 files changed, 11 insertions, 5 deletions
@@ -170,7 +170,7 @@ extern int cgit_diff_files(const unsigned char *old_sha1, | |||
170 | 170 | ||
171 | extern void cgit_diff_tree(const unsigned char *old_sha1, | 171 | extern void cgit_diff_tree(const unsigned char *old_sha1, |
172 | const unsigned char *new_sha1, | 172 | const unsigned char *new_sha1, |
173 | filepair_fn fn); | 173 | filepair_fn fn, const char *prefix); |
174 | 174 | ||
175 | extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); | 175 | extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); |
176 | 176 | ||
@@ -386,10 +386,11 @@ int cgit_diff_files(const unsigned char *old_sha1, | |||
386 | 386 | ||
387 | void cgit_diff_tree(const unsigned char *old_sha1, | 387 | void cgit_diff_tree(const unsigned char *old_sha1, |
388 | const unsigned char *new_sha1, | 388 | const unsigned char *new_sha1, |
389 | filepair_fn fn) | 389 | filepair_fn fn, const char *prefix) |
390 | { | 390 | { |
391 | struct diff_options opt; | 391 | struct diff_options opt; |
392 | int ret; | 392 | int ret; |
393 | int prefixlen; | ||
393 | 394 | ||
394 | diff_setup(&opt); | 395 | diff_setup(&opt); |
395 | opt.output_format = DIFF_FORMAT_CALLBACK; | 396 | opt.output_format = DIFF_FORMAT_CALLBACK; |
@@ -398,6 +399,12 @@ void cgit_diff_tree(const unsigned char *old_sha1, | |||
398 | opt.recursive = 1; | 399 | opt.recursive = 1; |
399 | opt.format_callback = cgit_diff_tree_cb; | 400 | opt.format_callback = cgit_diff_tree_cb; |
400 | opt.format_callback_data = fn; | 401 | opt.format_callback_data = fn; |
402 | if (prefix) { | ||
403 | opt.nr_paths = 1; | ||
404 | opt.paths = &prefix; | ||
405 | prefixlen = strlen(prefix); | ||
406 | opt.pathlens = &prefixlen; | ||
407 | } | ||
401 | diff_setup_done(&opt); | 408 | diff_setup_done(&opt); |
402 | 409 | ||
403 | if (old_sha1 && !is_null_sha1(old_sha1)) | 410 | if (old_sha1 && !is_null_sha1(old_sha1)) |
@@ -414,5 +421,5 @@ void cgit_diff_commit(struct commit *commit, filepair_fn fn) | |||
414 | 421 | ||
415 | if (commit->parents) | 422 | if (commit->parents) |
416 | old_sha1 = commit->parents->item->object.sha1; | 423 | old_sha1 = commit->parents->item->object.sha1; |
417 | cgit_diff_tree(old_sha1, commit->object.sha1, fn); | 424 | cgit_diff_tree(old_sha1, commit->object.sha1, fn, NULL); |
418 | } | 425 | } |
@@ -131,10 +131,9 @@ void cgit_print_diff(const char *new_rev, const char *old_rev) | |||
131 | if (!commit2 || parse_commit(commit2)) | 131 | if (!commit2 || parse_commit(commit2)) |
132 | cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(sha2))); | 132 | cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(sha2))); |
133 | } | 133 | } |
134 | |||
135 | html("<table class='diff'>"); | 134 | html("<table class='diff'>"); |
136 | html("<tr><td>"); | 135 | html("<tr><td>"); |
137 | cgit_diff_tree(sha2, sha1, filepair_cb); | 136 | cgit_diff_tree(sha2, sha1, filepair_cb, NULL); |
138 | html("</td></tr>"); | 137 | html("</td></tr>"); |
139 | html("</table>"); | 138 | html("</table>"); |
140 | } | 139 | } |