]> git.ipfire.org Git - thirdparty/git.git/commitdiff
patience diff: remove unnecessary string comparisons
authorPhillip Wood <phillip.wood@dunelm.org.uk>
Tue, 4 May 2021 09:25:44 +0000 (09:25 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 5 May 2021 09:56:48 +0000 (18:56 +0900)
xdl_prepare_env() calls xdl_classify_record() which arranges for the
hashes of non-matching lines to be different so lines can be tested
for equality by comparing just their hashes.

This reduces the time taken to calculate the diff of v2.28.0 to
v2.29.0 by ~3-4%.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
xdiff/xpatience.c

index 3c5601b602a24cb6cd6e063466369b1a90a14f9f..0329911f766f0e8a0b18180de2283bea5fd25039 100644 (file)
@@ -90,7 +90,7 @@ static void insert_record(xpparam_t const *xpp, int line, struct hashmap *map,
 {
        xrecord_t **records = pass == 1 ?
                map->env->xdf1.recs : map->env->xdf2.recs;
-       xrecord_t *record = records[line - 1], *other;
+       xrecord_t *record = records[line - 1];
        /*
         * After xdl_prepare_env() (or more precisely, due to
         * xdl_classify_record()), the "ha" member of the records (AKA lines)
@@ -104,11 +104,7 @@ static void insert_record(xpparam_t const *xpp, int line, struct hashmap *map,
        int index = (int)((record->ha << 1) % map->alloc);
 
        while (map->entries[index].line1) {
-               other = map->env->xdf1.recs[map->entries[index].line1 - 1];
-               if (map->entries[index].hash != record->ha ||
-                               !xdl_recmatch(record->ptr, record->size,
-                                       other->ptr, other->size,
-                                       map->xpp->flags)) {
+               if (map->entries[index].hash != record->ha) {
                        if (++index >= map->alloc)
                                index = 0;
                        continue;
@@ -253,8 +249,7 @@ static int match(struct hashmap *map, int line1, int line2)
 {
        xrecord_t *record1 = map->env->xdf1.recs[line1 - 1];
        xrecord_t *record2 = map->env->xdf2.recs[line2 - 1];
-       return xdl_recmatch(record1->ptr, record1->size,
-               record2->ptr, record2->size, map->xpp->flags);
+       return record1->ha == record2->ha;
 }
 
 static int patience_diff(mmfile_t *file1, mmfile_t *file2,