summaryrefslogtreecommitdiffabout
path: root/shared.c
Unidiff
Diffstat (limited to 'shared.c') (more/less context) (show whitespace changes)
-rw-r--r--shared.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/shared.c b/shared.c
index 0fe513f..3d4feea 100644
--- a/shared.c
+++ b/shared.c
@@ -38,6 +38,7 @@ int 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_renamelimit = -1;
41 42
42int cgit_max_msg_len = 60; 43int cgit_max_msg_len = 60;
43int cgit_max_repodesc_len = 60; 44int cgit_max_repodesc_len = 60;
@@ -182,6 +183,8 @@ void cgit_global_config_cb(const char *name, const char *value)
182 cgit_summary_log = atoi(value); 183 cgit_summary_log = atoi(value);
183 else if (!strcmp(name, "agefile")) 184 else if (!strcmp(name, "agefile"))
184 cgit_agefile = xstrdup(value); 185 cgit_agefile = xstrdup(value);
186 else if (!strcmp(name, "renamelimit"))
187 cgit_renamelimit = atoi(value);
185 else if (!strcmp(name, "repo.group")) 188 else if (!strcmp(name, "repo.group"))
186 cgit_repo_group = xstrdup(value); 189 cgit_repo_group = xstrdup(value);
187 else if (!strcmp(name, "repo.url")) 190 else if (!strcmp(name, "repo.url"))
@@ -383,17 +386,25 @@ int cgit_diff_files(const unsigned char *old_sha1,
383 386
384void cgit_diff_tree(const unsigned char *old_sha1, 387void cgit_diff_tree(const unsigned char *old_sha1,
385 const unsigned char *new_sha1, 388 const unsigned char *new_sha1,
386 filepair_fn fn) 389 filepair_fn fn, const char *prefix)
387{ 390{
388 struct diff_options opt; 391 struct diff_options opt;
389 int ret; 392 int ret;
393 int prefixlen;
390 394
391 diff_setup(&opt); 395 diff_setup(&opt);
392 opt.output_format = DIFF_FORMAT_CALLBACK; 396 opt.output_format = DIFF_FORMAT_CALLBACK;
393 opt.detect_rename = 1; 397 opt.detect_rename = 1;
398 opt.rename_limit = cgit_renamelimit;
394 opt.recursive = 1; 399 opt.recursive = 1;
395 opt.format_callback = cgit_diff_tree_cb; 400 opt.format_callback = cgit_diff_tree_cb;
396 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 }
397 diff_setup_done(&opt); 408 diff_setup_done(&opt);
398 409
399 if (old_sha1 && !is_null_sha1(old_sha1)) 410 if (old_sha1 && !is_null_sha1(old_sha1))
@@ -410,5 +421,5 @@ void cgit_diff_commit(struct commit *commit, filepair_fn fn)
410 421
411 if (commit->parents) 422 if (commit->parents)
412 old_sha1 = commit->parents->item->object.sha1; 423 old_sha1 = commit->parents->item->object.sha1;
413 cgit_diff_tree(old_sha1, commit->object.sha1, fn); 424 cgit_diff_tree(old_sha1, commit->object.sha1, fn, NULL);
414} 425}