Skip to content

Commit 8832987

Browse files
committed
Merge branch 'jc/diff-b-m' (early part) into pu
* 'jc/diff-b-m' (early part): diffcore-rename: allow easier debugging diffcore-rename.c: add locate_rename_src() diffcore-break: allow debugging
2 parents 4e3f7ba + 52ea296 commit 8832987

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

diffcore-break.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ void diffcore_break(int break_score)
166166

167167
DIFF_QUEUE_CLEAR(&outq);
168168

169+
diff_debug_queue("begin breaking", q);
169170
for (i = 0; i < q->nr; i++) {
170171
struct diff_filepair *p = q->queue[i];
171172
int score;
@@ -220,6 +221,7 @@ void diffcore_break(int break_score)
220221
free(q->queue);
221222
*q = outq;
222223

224+
diff_debug_queue("end breaking", q);
223225
return;
224226
}
225227

@@ -266,6 +268,7 @@ void diffcore_merge_broken(void)
266268

267269
DIFF_QUEUE_CLEAR(&outq);
268270

271+
diff_debug_queue("begin merge broken", q);
269272
for (i = 0; i < q->nr; i++) {
270273
struct diff_filepair *p = q->queue[i];
271274
if (!p)
@@ -298,6 +301,7 @@ void diffcore_merge_broken(void)
298301
}
299302
free(q->queue);
300303
*q = outq;
304+
diff_debug_queue("end merge broken", q);
301305

302306
return;
303307
}

diffcore-rename.c

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,10 @@ static struct diff_rename_src {
7373
} *rename_src;
7474
static int rename_src_nr, rename_src_alloc;
7575

76-
static struct diff_rename_src *register_rename_src(struct diff_filepair *p)
76+
static struct diff_rename_src *locate_rename_src(struct diff_filespec *one,
77+
int insert_ok)
7778
{
7879
int first, last;
79-
struct diff_filespec *one = p->one;
80-
unsigned short score = p->score;
8180

8281
first = 0;
8382
last = rename_src_nr;
@@ -94,17 +93,30 @@ static struct diff_rename_src *register_rename_src(struct diff_filepair *p)
9493
first = next+1;
9594
}
9695

96+
if (!insert_ok)
97+
return NULL;
98+
9799
/* insert to make it at "first" */
98100
ALLOC_GROW(rename_src, rename_src_nr + 1, rename_src_alloc);
99101
rename_src_nr++;
100102
if (first < rename_src_nr)
101103
memmove(rename_src + first + 1, rename_src + first,
102104
(rename_src_nr - first - 1) * sizeof(*rename_src));
103-
rename_src[first].p = p;
104-
rename_src[first].score = score;
105105
return &(rename_src[first]);
106106
}
107107

108+
static struct diff_rename_src *register_rename_src(struct diff_filepair *p)
109+
{
110+
struct diff_filespec *one = p->one;
111+
struct diff_rename_src *src;
112+
113+
src = locate_rename_src(one, 1);
114+
115+
src->p = p;
116+
src->score = p->score;
117+
return src;
118+
}
119+
108120
static int basename_same(struct diff_filespec *src, struct diff_filespec *dst)
109121
{
110122
int src_len = strlen(src->path), dst_len = strlen(dst->path);
@@ -584,9 +596,12 @@ void diffcore_rename(struct diff_options *options)
584596
free(mx);
585597

586598
cleanup:
587-
/* At this point, we have found some renames and copies and they
599+
/*
600+
* At this point, we have found some renames and copies and they
588601
* are recorded in rename_dst. The original list is still in *q.
589602
*/
603+
diff_debug_queue("begin turning a/d into renames", q);
604+
590605
DIFF_QUEUE_CLEAR(&outq);
591606
for (i = 0; i < q->nr; i++) {
592607
struct diff_filepair *p = q->queue[i];
@@ -599,8 +614,9 @@ void diffcore_rename(struct diff_options *options)
599614
/*
600615
* Creation
601616
*
602-
* We would output this create record if it has
603-
* not been turned into a rename/copy already.
617+
* Did the content come from somewhere else?
618+
* If so, show that as a rename. Otherwise
619+
* show it as a creation (i.e. as-is).
604620
*/
605621
struct diff_rename_dst *dst = locate_rename_dst(p->two);
606622
if (dst && dst->pair) {
@@ -658,11 +674,10 @@ void diffcore_rename(struct diff_options *options)
658674
if (pair_to_free)
659675
diff_free_filepair(pair_to_free);
660676
}
661-
diff_debug_queue("done copying original", &outq);
662677

663678
free(q->queue);
664679
*q = outq;
665-
diff_debug_queue("done collapsing", q);
680+
diff_debug_queue("end turning a/d into renames", q);
666681

667682
for (i = 0; i < rename_dst_nr; i++)
668683
free_filespec(rename_dst[i].two);

0 commit comments

Comments
 (0)