]> git.proxmox.com Git - libgit2.git/blobdiff - src/xdiff/xpatience.c
New upstream version 1.4.3+dfsg.1
[libgit2.git] / src / xdiff / xpatience.c
index 53b7d5fd17fb5ea67bdc226c9484de9afcdf6999..c5d48e80aefb33eddb4dbe4e359f2c598a5483d7 100644 (file)
@@ -20,8 +20,6 @@
  *
  */
 #include "xinclude.h"
-#include "xtypes.h"
-#include "xdiff.h"
 
 /*
  * The basic idea of patience diff is to find lines that are unique in
@@ -78,7 +76,7 @@ struct hashmap {
 
 static int is_anchor(xpparam_t const *xpp, const char *line)
 {
-       unsigned long i;
+       int i;
        for (i = 0; i < xpp->anchors_nr; i++) {
                if (!strncmp(line, xpp->anchors[i], strlen(xpp->anchors[i])))
                        return 1;
@@ -92,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)
@@ -106,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;
@@ -217,9 +211,6 @@ static struct entry *find_longest_common_sequence(struct hashmap *map)
         */
        int anchor_i = -1;
 
-       if (!sequence)
-               return NULL;
-
        for (entry = map->first; entry; entry = entry->next) {
                if (!entry->line2 || entry->line2 == NON_UNIQUE)
                        continue;
@@ -258,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,
@@ -294,9 +284,6 @@ static int walk_common_sequence(struct hashmap *map, struct entry *first,
 
                /* Recurse */
                if (next1 > line1 || next2 > line2) {
-                       struct hashmap submap;
-
-                       memset(&submap, 0, sizeof(submap));
                        if (patience_diff(map->file1, map->file2,
                                        map->xpp, map->env,
                                        line1, next1 - line1,
@@ -323,6 +310,8 @@ static int fall_back_to_classic_diff(struct hashmap *map,
                int line1, int count1, int line2, int count2)
 {
        xpparam_t xpp;
+
+       memset(&xpp, 0, sizeof(xpp));
        xpp.flags = map->xpp->flags & ~XDF_DIFF_ALGORITHM_MASK;
 
        return xdl_fall_back_diff(map->env, &xpp,