Avoid sorting if references are added to ref_cache in order
[gitweb.git] / refs.c
diff --git a/refs.c b/refs.c
index 09322fede0841e7954e3e4cb7d3d0b1f673555d7..98f6425907e02dcd0ec49dccf213e64d65ded19e 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -208,6 +208,12 @@ static void add_entry_to_dir(struct ref_dir *dir, struct ref_entry *entry)
 {
        ALLOC_GROW(dir->entries, dir->nr + 1, dir->alloc);
        dir->entries[dir->nr++] = entry;
+       /* optimize for the case that entries are added in order */
+       if (dir->nr == 1 ||
+           (dir->nr == dir->sorted + 1 &&
+            strcmp(dir->entries[dir->nr - 2]->name,
+                   dir->entries[dir->nr - 1]->name) < 0))
+               dir->sorted = dir->nr;
 }
 
 /*