summaryrefslogtreecommitdiff
path: root/merge-ort.c
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2020-12-14 16:21:33 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-12-14 16:45:59 (GMT)
commit965a7bc21c6bb11fb15eb798fd472ec9deb5e3fa (patch)
treef540e7f1b272d25024ca64bdc52bd779363377ae /merge-ort.c
parentf39d05ca2637dfcbf0498824d06e7854427936a5 (diff)
downloadgit-965a7bc21c6bb11fb15eb798fd472ec9deb5e3fa.zip
git-965a7bc21c6bb11fb15eb798fd472ec9deb5e3fa.tar.gz
git-965a7bc21c6bb11fb15eb798fd472ec9deb5e3fa.tar.bz2
merge-ort: implement compare_pairs() and collect_renames()
Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'merge-ort.c')
-rw-r--r--merge-ort.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/merge-ort.c b/merge-ort.c
index 66f84d3..10550c5 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -652,7 +652,10 @@ static int process_renames(struct merge_options *opt,
static int compare_pairs(const void *a_, const void *b_)
{
- die("Not yet implemented.");
+ const struct diff_filepair *a = *((const struct diff_filepair **)a_);
+ const struct diff_filepair *b = *((const struct diff_filepair **)b_);
+
+ return strcmp(a->one->path, b->one->path);
}
/* Call diffcore_rename() to compute which files have changed on given side */
@@ -698,7 +701,35 @@ static int collect_renames(struct merge_options *opt,
struct diff_queue_struct *result,
unsigned side_index)
{
- die("Not yet implemented.");
+ int i, clean = 1;
+ struct diff_queue_struct *side_pairs;
+ struct rename_info *renames = &opt->priv->renames;
+
+ side_pairs = &renames->pairs[side_index];
+
+ for (i = 0; i < side_pairs->nr; ++i) {
+ struct diff_filepair *p = side_pairs->queue[i];
+
+ if (p->status != 'R') {
+ diff_free_filepair(p);
+ continue;
+ }
+
+ /*
+ * p->score comes back from diffcore_rename_extended() with
+ * the similarity of the renamed file. The similarity is
+ * was used to determine that the two files were related
+ * and are a rename, which we have already used, but beyond
+ * that we have no use for the similarity. So p->score is
+ * now irrelevant. However, process_renames() will need to
+ * know which side of the merge this rename was associated
+ * with, so overwrite p->score with that value.
+ */
+ p->score = side_index;
+ result->queue[result->nr++] = p;
+ }
+
+ return clean;
}
static int detect_and_process_renames(struct merge_options *opt,