projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'fix' into maint
[git.git]
/
diffcore-rename.c
diff --git
a/diffcore-rename.c
b/diffcore-rename.c
index
092cf68
..
ffd126a
100644
(file)
--- a/
diffcore-rename.c
+++ b/
diffcore-rename.c
@@
-176,8
+176,10
@@
static int estimate_similarity(struct diff_filespec *src,
/* A delta that has a lot of literal additions would have
* big delta_size no matter what else it does.
*/
/* A delta that has a lot of literal additions would have
* big delta_size no matter what else it does.
*/
- if (base_size * (MAX_SCORE-minimum_score) < delta_size * MAX_SCORE)
+ if (base_size * (MAX_SCORE-minimum_score) < delta_size * MAX_SCORE) {
+ free(delta);
return 0;
return 0;
+ }
/* Estimate the edit size by interpreting delta. */
if (count_delta(delta, delta_size, &src_copied, &literal_added)) {
/* Estimate the edit size by interpreting delta. */
if (count_delta(delta, delta_size, &src_copied, &literal_added)) {
@@
-249,8
+251,11
@@
static int compute_stays(struct diff_queue_struct *q,
return 1;
}
return 1;
}
-void diffcore_rename(
int detect_rename, int minimum_score
)
+void diffcore_rename(
struct diff_options *options
)
{
{
+ int detect_rename = options->detect_rename;
+ int minimum_score = options->rename_score;
+ int rename_limit = options->rename_limit;
struct diff_queue_struct *q = &diff_queued_diff;
struct diff_queue_struct outq;
struct diff_score *mx;
struct diff_queue_struct *q = &diff_queued_diff;
struct diff_queue_struct outq;
struct diff_score *mx;
@@
-279,7
+284,8
@@
void diffcore_rename(int detect_rename, int minimum_score)
else if (detect_rename == DIFF_DETECT_COPY)
register_rename_src(p->one, 1);
}
else if (detect_rename == DIFF_DETECT_COPY)
register_rename_src(p->one, 1);
}
- if (rename_dst_nr == 0)
+ if (rename_dst_nr == 0 || rename_src_nr == 0 ||
+ (0 < rename_limit && rename_limit < rename_dst_nr))
goto cleanup; /* nothing to do */
/* We really want to cull the candidates list early
goto cleanup; /* nothing to do */
/* We really want to cull the candidates list early
@@
-303,6
+309,9
@@
void diffcore_rename(int detect_rename, int minimum_score)
if (rename_count == rename_dst_nr)
goto cleanup;
if (rename_count == rename_dst_nr)
goto cleanup;
+ if (minimum_score == MAX_SCORE)
+ goto cleanup;
+
num_create = (rename_dst_nr - rename_count);
num_src = rename_src_nr;
mx = xmalloc(sizeof(*mx) * num_create * num_src);
num_create = (rename_dst_nr - rename_count);
num_src = rename_src_nr;
mx = xmalloc(sizeof(*mx) * num_create * num_src);