1
0
mirror of https://github.com/git/git.git synced 2025-03-15 16:32:26 +00:00

sort_ref_dir(): simplify logic

Use the more usual indexing idiom for clarity.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael Haggerty 2012-04-10 07:30:25 +02:00 committed by Junio C Hamano
parent d3177275ed
commit 81a79d8e27

21
refs.c
View File

@ -227,11 +227,13 @@ static int is_dup_ref(const struct ref_entry *ref1, const struct ref_entry *ref2
} }
/* /*
* Sort the entries in dir (if they are not already sorted). * Sort the entries in dir (if they are not already sorted)
* and remove any duplicate entries.
*/ */
static void sort_ref_dir(struct ref_dir *dir) static void sort_ref_dir(struct ref_dir *dir)
{ {
int i, j; int i, j;
struct ref_entry *last = NULL;
/* /*
* This check also prevents passing a zero-length array to qsort(), * This check also prevents passing a zero-length array to qsort(),
@ -242,16 +244,15 @@ static void sort_ref_dir(struct ref_dir *dir)
qsort(dir->entries, dir->nr, sizeof(*dir->entries), ref_entry_cmp); qsort(dir->entries, dir->nr, sizeof(*dir->entries), ref_entry_cmp);
/* Remove any duplicates from the ref_dir */ /* Remove any duplicates: */
i = 0; for (i = 0, j = 0; j < dir->nr; j++) {
for (j = 1; j < dir->nr; j++) { struct ref_entry *entry = dir->entries[j];
if (is_dup_ref(dir->entries[i], dir->entries[j])) { if (last && is_dup_ref(last, entry))
free_ref_entry(dir->entries[j]); free_ref_entry(entry);
continue; else
last = dir->entries[i++] = entry;
} }
dir->entries[++i] = dir->entries[j]; dir->sorted = dir->nr = i;
}
dir->sorted = dir->nr = i + 1;
} }
#define DO_FOR_EACH_INCLUDE_BROKEN 01 #define DO_FOR_EACH_INCLUDE_BROKEN 01