summaryrefslogtreecommitdiff
path: root/read-cache.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2007-04-11 14:39:12 -0700
committerJunio C Hamano <junkio@cox.net>2007-04-11 17:21:12 -0700
commit1833a925484675b328d5df04ffca62efa7a0a012 (patch)
tree2a913b9476ca39265468ea138d2549c0e73f171e /read-cache.c
parentf35a6d3bce79c2995bbf0a3bd9fcad29e54a8d3c (diff)
downloadgit-1833a925484675b328d5df04ffca62efa7a0a012.tar.gz
Fix thinko in subproject entry sorting
This fixes a total thinko in my original series: subprojects do *not* sort like directories, because the index is sorted purely by full pathname, and since a subproject shows up in the index as a normal NUL-terminated string, it never has the issues with sorting with the '/' at the end. So if you have a subproject "proj" and a file "proj.c", the subproject sorts alphabetically before the file in the index (and must thus also sort that way in a tree object, since trees sort as the index). In contrast, it you have two files "proj/file" and "proj.c", the "proj.c" will sort alphabetically before "proj/file" in the index. The index itself, of course, does not actually contain an entry "proj/", but in the *tree* that gets written out, the tree entry "proj" will sort after the file entry "proj.c", which is the only real magic sorting rule. In other words: the magic sorting rule only affects tree entries, and *only* affects tree entries that point to other trees (ie are of the type S_IFDIR). Anyway, that thinko just means that we should remove the special case to make S_ISDIRLNK entries sort like S_ISDIR entries. They don't. They sort like normal files. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'read-cache.c')
-rw-r--r--read-cache.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/read-cache.c b/read-cache.c
index f458f50458..b8b6d11dba 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -277,9 +277,9 @@ int base_name_compare(const char *name1, int len1, int mode1,
return cmp;
c1 = name1[len];
c2 = name2[len];
- if (!c1 && (S_ISDIR(mode1) || S_ISDIRLNK(mode1)))
+ if (!c1 && S_ISDIR(mode1))
c1 = '/';
- if (!c2 && (S_ISDIR(mode2) || S_ISDIRLNK(mode2)))
+ if (!c2 && S_ISDIR(mode2))
c2 = '/';
return (c1 < c2) ? -1 : (c1 > c2) ? 1 : 0;
}