]> git.ipfire.org Git - thirdparty/git.git/blobdiff - diffcore-rename.c
Merge branch 'js/update-index-ignore-removal-for-skip-worktree'
[thirdparty/git.git] / diffcore-rename.c
index 71aa240a68d991754ed0f7aba76d26a2a1955898..531d7adeafe0e218de2a56a9dbb8b4156d2d4921 100644 (file)
@@ -274,23 +274,19 @@ static int find_identical_files(struct hashmap *srcs,
                                struct diff_options *options)
 {
        int renames = 0;
-       struct hashmap_entry *ent;
        struct diff_filespec *target = rename_dst[dst_index].two;
        struct file_similarity *p, *best = NULL;
        int i = 100, best_score = -1;
+       unsigned int hash = hash_filespec(options->repo, target);
 
        /*
         * Find the best source match for specified destination.
         */
-       ent = hashmap_get_from_hash(srcs,
-                                 hash_filespec(options->repo, target),
-                                 NULL);
-       for (; ent; ent = hashmap_get_next(srcs, ent)) {
+       p = hashmap_get_entry_from_hash(srcs, hash, NULL,
+                                       struct file_similarity, entry);
+       hashmap_for_each_entry_from(srcs, p, entry) {
                int score;
-               struct diff_filespec *source;
-
-               p = container_of(ent, struct file_similarity, entry);
-               source = p->filespec;
+               struct diff_filespec *source = p->filespec;
 
                /* False hash collision? */
                if (!oideq(&source->oid, &target->oid))
@@ -362,7 +358,7 @@ static int find_exact_renames(struct diff_options *options)
                renames += find_identical_files(&file_table, i, options);
 
        /* Free the hash data structure and entries */
-       hashmap_free(&file_table, 1);
+       hashmap_free_entries(&file_table, struct file_similarity, entry);
 
        return renames;
 }
@@ -588,7 +584,7 @@ void diffcore_rename(struct diff_options *options)
        stop_progress(&progress);
 
        /* cost matrix sorted by most to least similar pair */
-       QSORT(mx, dst_cnt * NUM_CANDIDATE_PER_DST, score_compare);
+       STABLE_QSORT(mx, dst_cnt * NUM_CANDIDATE_PER_DST, score_compare);
 
        rename_count += find_renames(mx, dst_cnt, minimum_score, 0);
        if (detect_rename == DIFF_DETECT_COPY)