author | Lars Hjemli <hjemli@gmail.com> | 2007-10-01 09:42:19 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-10-01 09:42:19 (UTC) |
commit | f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae (patch) (unidiff) | |
tree | 086e1afad5762c5b6bb09672b58f2c491ffbbc20 | |
parent | 98fcf7227c8dda520c864ea8a51012934115258f (diff) | |
download | cgit-f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae.zip cgit-f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae.tar.gz cgit-f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae.tar.bz2 |
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
@@ -169,9 +169,9 @@ extern int cgit_diff_files(const unsigned char *old_sha1, | |||
169 | linediff_fn fn); | 169 | linediff_fn fn); |
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 | ||
177 | extern char *fmt(const char *format,...); | 177 | extern char *fmt(const char *format,...); |
@@ -385,20 +385,27 @@ int cgit_diff_files(const unsigned char *old_sha1, | |||
385 | } | 385 | } |
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; |
396 | opt.detect_rename = 1; | 397 | opt.detect_rename = 1; |
397 | opt.rename_limit = cgit_renamelimit; | 398 | opt.rename_limit = cgit_renamelimit; |
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)) |
404 | ret = diff_tree_sha1(old_sha1, new_sha1, "", &opt); | 411 | ret = diff_tree_sha1(old_sha1, new_sha1, "", &opt); |
@@ -413,6 +420,6 @@ void cgit_diff_commit(struct commit *commit, filepair_fn fn) | |||
413 | unsigned char *old_sha1 = NULL; | 420 | unsigned char *old_sha1 = NULL; |
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 | } |
@@ -130,11 +130,10 @@ void cgit_print_diff(const char *new_rev, const char *old_rev) | |||
130 | commit2 = lookup_commit_reference(sha2); | 130 | commit2 = lookup_commit_reference(sha2); |
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 | } |