"ls-files -o" and "ls-files -k" both traverse the working tree down to find either all untracked paths or those that will be "killed" (removed from the working tree to make room) when the paths recorded in the index are checked out.
It is necessary to traverse the working tree fully when enumerating all the "other" paths, but when we are only interested in "killed" paths, we can take advantage of the fact that paths that do not overlap with entries in the index can never be killed. The first one is an independent clean-up. No public API in the working tree traversal takes alternate in-core index, so there is no reason to explicitly use the_index and index_* functions from the in-core index API. The second one is rerolled from the "something like this" patch I sent earlier, but corrects the "we see a directory, it is not in the index, but a file in it is" case. And the third one adds a testcase that illustrates why the earlier "something like this" patch is not sufficient. These are designed to apply on top of v1.8.3, and needs a bit of conflict resolution for the upcoming v1.8.4 codebase; I'll queue them in 'pu' for now. Note that t3010, especially after merged to 'pu', will use many different ways to create a test file. Some redirect "date" into it, some redirect ":" into it, some "touch" it, and some just redirect with no command. date >file1 : >file2 touch file3 >file4 We should consolidate them all to just do ">file4" after making sure the contents do not matter (we kind of know it already, as "date" will output string that is not repeatable). Use of "touch" for anything other than updating the timestamp is especially bad, as it is misleading. Junio C Hamano (3): dir.c: use the cache_* macro to access the current index ls-files -k: a directory only can be killed if the index has a non-directory t3010: update to demonstrate "ls-files -k" optimization pitfalls builtin/ls-files.c | 2 ++ dir.c | 40 +++++++++++++++++++++++++++++-------- dir.h | 3 ++- t/t3010-ls-files-killed-modified.sh | 12 ++++++++--- 4 files changed, 45 insertions(+), 12 deletions(-) -- 1.8.4-rc3-232-ga8053f8 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html