diffcore-rename.c: move code around to prepare for the next patch

No actual code changes, just move hash_filespec up and outdent part of
find_identical_files.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Karsten Blees 2013-11-14 20:19:04 +01:00 committed by Junio C Hamano
parent 29d8a834b5
commit 48f6407ffe
1 changed files with 47 additions and 47 deletions

View File

@ -248,6 +248,18 @@ struct file_similarity {
struct file_similarity *next; struct file_similarity *next;
}; };


static unsigned int hash_filespec(struct diff_filespec *filespec)
{
unsigned int hash;
if (!filespec->sha1_valid) {
if (diff_populate_filespec(filespec, 0))
return 0;
hash_sha1_file(filespec->data, filespec->size, "blob", filespec->sha1);
}
memcpy(&hash, filespec->sha1, sizeof(hash));
return hash;
}

static int find_identical_files(struct file_similarity *src, static int find_identical_files(struct file_similarity *src,
struct file_similarity *dst, struct file_similarity *dst,
struct diff_options *options) struct diff_options *options)
@ -258,46 +270,46 @@ static int find_identical_files(struct file_similarity *src,
* Walk over all the destinations ... * Walk over all the destinations ...
*/ */
do { do {
struct diff_filespec *target = dst->filespec; struct diff_filespec *target = dst->filespec;
struct file_similarity *p, *best; struct file_similarity *p, *best;
int i = 100, best_score = -1; int i = 100, best_score = -1;


/* /*
* .. to find the best source match * .. to find the best source match
*/ */
best = NULL; best = NULL;
for (p = src; p; p = p->next) { for (p = src; p; p = p->next) {
int score; int score;
struct diff_filespec *source = p->filespec; struct diff_filespec *source = p->filespec;


/* False hash collision? */ /* False hash collision? */
if (hashcmp(source->sha1, target->sha1)) if (hashcmp(source->sha1, target->sha1))
continue;
/* Non-regular files? If so, the modes must match! */
if (!S_ISREG(source->mode) || !S_ISREG(target->mode)) {
if (source->mode != target->mode)
continue; continue;
/* Non-regular files? If so, the modes must match! */ }
if (!S_ISREG(source->mode) || !S_ISREG(target->mode)) { /* Give higher scores to sources that haven't been used already */
if (source->mode != target->mode) score = !source->rename_used;
continue; if (source->rename_used && options->detect_rename != DIFF_DETECT_COPY)
} continue;
/* Give higher scores to sources that haven't been used already */ score += basename_same(source, target);
score = !source->rename_used; if (score > best_score) {
if (source->rename_used && options->detect_rename != DIFF_DETECT_COPY) best = p;
continue; best_score = score;
score += basename_same(source, target); if (score == 2)
if (score > best_score) {
best = p;
best_score = score;
if (score == 2)
break;
}

/* Too many identical alternatives? Pick one */
if (!--i)
break; break;
} }
if (best) {
record_rename_pair(dst->index, best->index, MAX_SCORE); /* Too many identical alternatives? Pick one */
renames++; if (!--i)
} break;
}
if (best) {
record_rename_pair(dst->index, best->index, MAX_SCORE);
renames++;
}
} while ((dst = dst->next) != NULL); } while ((dst = dst->next) != NULL);
return renames; return renames;
} }
@ -343,18 +355,6 @@ static int find_same_files(void *ptr, void *data)
return ret; return ret;
} }


static unsigned int hash_filespec(struct diff_filespec *filespec)
{
unsigned int hash;
if (!filespec->sha1_valid) {
if (diff_populate_filespec(filespec, 0))
return 0;
hash_sha1_file(filespec->data, filespec->size, "blob", filespec->sha1);
}
memcpy(&hash, filespec->sha1, sizeof(hash));
return hash;
}

static void insert_file_table(struct hash_table *table, int src_dst, int index, struct diff_filespec *filespec) static void insert_file_table(struct hash_table *table, int src_dst, int index, struct diff_filespec *filespec)
{ {
void **pos; void **pos;