• Show log

    Commit

  • Hash : 35786cb7
    Author : John Wiegley
    Date : 2011-02-02T19:00:26

    Use Git's own tree entry sorting algorithm
    
    If plain strcmp is used, as this code did before, the final sorting may
    end up different from what git-add would do (for example, 'boost'
    appearing before 'boost-build.jam', because Git sorts as if it were
    spelled 'boost/').
    
    If the sorting is incorrect like this, Git 1.7.4 insists that unmodified
    files have been modified.  For example, my test repository has these
    four entries:
    
    drwxr-xr-x  199 johnw  wheel   6766 Feb  2 17:21 boost
    -rw-r--r--    1 johnw  wheel    849 Feb  2 17:22 boost-build.jam
    -rw-r--r--    1 johnw  wheel    989 Feb  2 17:21 boost.css
    -rw-r--r--    1 johnw  wheel   6308 Feb  2 17:21 boost.png
    
    Here is the output from git-ls-tree for these files, in a commit tree
    created using git-add and git-commit:
    
    100644 blob 8b8775433aef73e9e12609610ae2e35cf1e7ec2c    boost-build.jam
    100644 blob 986c4050fa96d825a1311c8e871cdcc9a3e0d2c3    boost.css
    100644 blob b4d51fcd5c9149fd77f5ca6ed2b6b1b70e8fe24f    boost.png
    040000 tree 46537eeaa4d577010f19b1c9e940cae9a670ff5c    boost
    
    Here is the output for the same commit produced using libgit2:
    
    040000 tree c27c0fd1436f28a6ba99acd0a6c17d178ed58288	boost
    100644 blob 8b8775433aef73e9e12609610ae2e35cf1e7ec2c	boost-build.jam
    100644 blob 986c4050fa96d825a1311c8e871cdcc9a3e0d2c3	boost.css
    100644 blob b4d51fcd5c9149fd77f5ca6ed2b6b1b70e8fe24f	boost.png
    
    Due to this reordering, git-status claims the three blobs are always
    modified, no matter what I do using git-read-tree or git-reset or
    git-checkout to update the index.