{"push_id":676033865,"size":58,"distinct_size":13,"ref":"refs/heads/jk/meta-make-wip","head":"2ceb7bc7db206d39b30a5b0838d90ff7902e1b09","before":"4172d48490d40fb2b5ca9139c7c22965f7fe2bce","commits":[{"sha":"55fe6f51f41f254d3d87994d18bff04664aa013b","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"dir.c: optionally compute sha-1 of a .gitignore file\n\nThis is not used anywhere yet. But the goal is to compare quickly if a\n.gitignore file has changed when we have the SHA-1 of both old (cached\nsomewhere) and new (from index or a tree) versions.\n\nHelped-by: Junio C Hamano <gitster@pobox.com>\nHelped-by: Torsten Bögershausen <tboegi@web.de>\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/55fe6f51f41f254d3d87994d18bff04664aa013b"},{"sha":"0dcb8d7fe0ec2687d4a6ae201ae72907d862437c","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: record .gitignore information and dir hierarchy\n\nThe idea is if we can capture all input and (non-rescursive) output of\nread_directory_recursive(), and can verify later that all the input is\nthe same, then the second r_d_r() should produce the same output as in\nthe first run.\n\nThe requirement for this to work is stat info of a directory MUST\nchange if an entry is added to or removed from that directory (and\nshould not change often otherwise). If your OS and filesystem do not\nmeet this requirement, untracked cache is not for you. Most file\nsystems on *nix should be fine. On Windows, NTFS is fine while FAT may\nnot be [1] even though FAT on Linux seems to be fine.\n\nThe list of input of r_d_r() is in the big comment block in dir.h. In\nshort, the output of a directory (not counting subdirs) mainly depends\non stat info of the directory in question, all .gitignore leading to\nit and the check_only flag when r_d_r() is called recursively. This\npatch records all this info (and the output) as r_d_r() runs.\n\nTwo hash_sha1_file() are required for $GIT_DIR/info/exclude and\ncore.excludesfile unless their stat data matches. hash_sha1_file() is\nonly needed when .gitignore files in the worktree are modified,\notherwise their SHA-1 in index is used (see the previous patch).\n\nWe could store stat data for .gitignore files so we don't have to\nrehash them if their content is different from index, but I think\n.gitignore files are rarely modified, so not worth extra cache data\n(and hashing penalty read-cache.c:verify_hdr(), as we will be storing\nthis as an index extension).\n\nThe implication is, if you change .gitignore, you better add it to the\nindex soon or you lose all the benefit of untracked cache because a\nmodified .gitignore invalidates all subdirs recursively. This is\nespecially bad for .gitignore at root.\n\nThis cached output is about untracked files only, not ignored files\nbecause the number of tracked files is usually small, so small cache\noverhead, while the number of ignored files could go really high\n(e.g. *.o files mixing with source code).\n\n[1] \"Description of NTFS date and time stamps for files and folders\"\n    http://support.microsoft.com/kb/299648\n\nHelped-by: Torsten Bögershausen <tboegi@web.de>\nHelped-by: David Turner <dturner@twopensource.com>\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/0dcb8d7fe0ec2687d4a6ae201ae72907d862437c"},{"sha":"ccad261f07900b55029f3fd42a9ec8f17229808f","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: initial untracked cache validation\n\nMake sure the starting conditions and all global exclude files are\ngood to go. If not, either disable untracked cache completely, or wipe\nout the cache and start fresh.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/ccad261f07900b55029f3fd42a9ec8f17229808f"},{"sha":"5ebf79ad4b308c678bd9623dd906c01bb0ab7e0f","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: invalidate dirs recursively if .gitignore changes\n\nIt's easy to see that if an existing .gitignore changes, its SHA-1\nwould be different and invalidate_gitignore() is called.\n\nIf .gitignore is removed, add_excludes() will treat it like an empty\n.gitignore, which again should invalidate the cached directory data.\n\nif .gitignore is added, lookup_untracked() already fills initial\n.gitignore SHA-1 as \"empty file\", so again invalidate_gitignore() is\ncalled.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/5ebf79ad4b308c678bd9623dd906c01bb0ab7e0f"},{"sha":"cf7c61484f77f6212b52c7e9fdce7bfbbb4eb854","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: make a wrapper around {open,read,close}dir()\n\nThis allows us to feed different info to read_directory_recursive()\nbased on untracked cache in the next patch.\n\nHelped-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/cf7c61484f77f6212b52c7e9fdce7bfbbb4eb854"},{"sha":"91a2288b5f63fba82e912dca475154d5b9dd233a","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: record/validate dir mtime and reuse cached output\n\nThe main readdir loop in read_directory_recursive() is replaced with a\nnew one that checks if cached results of a directory is still valid.\n\nIf a file is added or removed from the index, the containing directory\nis invalidated (but not its subdirs). If directory's mtime is changed,\nthe same happens. If a .gitignore is updated, the containing directory\nand all subdirs are invalidated recursively. If dir_struct#flags or\nother conditions change, the cache is ignored.\n\nIf a directory is invalidated, we opendir/readdir/closedir and run the\nexclude machinery on that directory listing as usual. If untracked\ncache is also enabled, we'll update the cache along the way. If a\ndirectory is validated, we simply pull the untracked listing out from\nthe cache. The cache also records the list of direct subdirs that we\nhave to recurse in. Fully excluded directories are seen as \"untracked\nfiles\".\n\nIn the best case when no dirs are invalidated, read_directory()\nbecomes a series of\n\n  stat(dir), open(.gitignore), fstat(), read(), close() and optionally\n  hash_sha1_file()\n\nFor comparison, standard read_directory() is a sequence of\n\n  opendir(), readdir(), open(.gitignore), fstat(), read(), close(), the\n  expensive last_exclude_matching() and closedir().\n\nWe already try not to open(.gitignore) if we know it does not exist,\nso open/fstat/read/close sequence does not apply to every\ndirectory. The sequence could be reduced further, as noted in\nprep_exclude() in another patch. So in theory, the entire best-case\nread_directory sequence could be reduced to a series of stat() and\nnothing else.\n\nThis is not a silver bullet approach. When you compile a C file, for\nexample, the old .o file is removed and a new one with the same name\ncreated, effectively invalidating the containing directory's cache\n(but not its subdirectories). If your build process touches every\ndirectory, this cache adds extra overhead for nothing, so it's a good\nidea to separate generated files from tracked files.. Editors may use\nthe same strategy for saving files. And of course you're out of luck\nrunning your repo on an unsupported filesystem and/or operating system.\n\nHelped-by: Eric Sunshine <sunshine@sunshineco.com>\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/91a2288b5f63fba82e912dca475154d5b9dd233a"},{"sha":"26cb0182b8b2e119f469750b3511fac4624f6667","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: mark what dirs should be recursed/saved\n\nIf we redo this thing in a functional style, we would have one struct\nuntracked_dir as input tree and another as output. The input is used\nfor verification. The output is a brand new tree, reflecting current\nworktree.\n\nBut that means recreate a lot of dir nodes even if a lot could be\nshared between input and output trees in good cases. So we go with the\nmessy but efficient way, combining both input and output trees into\none. We need a way to know which node in this combined tree belongs to\nthe output. This is the purpose of this \"recurse\" flag.\n\n\"valid\" bit can't be used for this because it's about data of the node\nexcept the subdirs. When we invalidate a directory, we want to keep\ncached data of the subdirs intact even though we don't really know\nwhat subdir still exists (yet). Then we check worktree to see what\nactual subdir remains on disk. Those will have 'recurse' bit set\nagain. If cached data for those are still valid, we may be able to\navoid computing exclude files for them. Those subdirs that are deleted\nwill have 'recurse' remained clear and their 'valid' bits do not\nmatter.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/26cb0182b8b2e119f469750b3511fac4624f6667"},{"sha":"27b099ae8742f014700edba92036db288750e44a","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: don't open non-existent .gitignore\n\nThis cuts down a signficant number of open(.gitignore) because most\ndirectories usually don't have .gitignore files.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/27b099ae8742f014700edba92036db288750e44a"},{"sha":"be0d9d532326a81d761913e3ec9e2e7c62eeca7b","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"ewah: add convenient wrapper ewah_serialize_strbuf()\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/be0d9d532326a81d761913e3ec9e2e7c62eeca7b"},{"sha":"83c094ad0dd2104adbbec034f802dceb1d052981","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: save to an index extension\n\nHelped-by: Stefan Beller <sbeller@google.com>\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/83c094ad0dd2104adbbec034f802dceb1d052981"},{"sha":"f9e6c649589e0940ccb82821107fb658277ed86b","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: load from UNTR index extension\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/f9e6c649589e0940ccb82821107fb658277ed86b"},{"sha":"e931371a8f1164185486a1f5fdaaa708b4a6217c","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: invalidate at index addition or removal\n\nIdeally we should implement untracked_cache_remove_from_index() and\nuntracked_cache_add_to_index() so that they update untracked cache\nright away instead of invalidating it and wait for read_directory()\nnext time to deal with it. But that may need some more work in\nunpack-trees.c. So stay simple as the first step.\n\nThe new call in add_index_entry_with_check() may look strange because\nnew calls usually stay close to cache_tree_invalidate_path(). We do it\na bit later than c_t_i_p() in this function because if it's about\nreplacing the entry with the same name, we don't care (but cache-tree\ndoes).\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/e931371a8f1164185486a1f5fdaaa708b4a6217c"},{"sha":"2bb4cda1987afe6911a1c193283213babda328d2","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"read-cache.c: split racy stat test to a separate function\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/2bb4cda1987afe6911a1c193283213babda328d2"},{"sha":"ed4efab1b17e883b761b4482c40c04a4529be8f9","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: avoid racy timestamps\n\nWhen a directory is updated within the same second that its timestamp\nis last saved, we cannot realize the directory has been updated by\nchecking timestamps. Assume the worst (something is update). See\n29e4d36 (Racy GIT - 2005-12-20) for more information.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/ed4efab1b17e883b761b4482c40c04a4529be8f9"},{"sha":"c9ccb5d327bd9259ca6cceb9d87df9eb2cba2e9d","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: print stats with $GIT_TRACE_UNTRACKED_STATS\n\nThis could be used to verify correct behavior in tests\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/c9ccb5d327bd9259ca6cceb9d87df9eb2cba2e9d"},{"sha":"1bbb3dba3fbf733db45f073ddafe89f5972c516a","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked cache: mark index dirty if untracked cache is updated\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/1bbb3dba3fbf733db45f073ddafe89f5972c516a"},{"sha":"76e6b090a0b9b1e83b8e467d1b64f250f66c3f54","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"untracked-cache: temporarily disable with $GIT_DISABLE_UNTRACKED_CACHE\n\nThis can be used to double check if results with untracked cache are\ncorrectly, compared to vanilla version. Untracked cache remains in\nindex, but not used.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/76e6b090a0b9b1e83b8e467d1b64f250f66c3f54"},{"sha":"226c051adb0f64772f807287e130a6a546b95fbd","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"status: enable untracked cache\n\nupdate_index_if_able() is moved down so that the updated untracked\ncache could be written out.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/226c051adb0f64772f807287e130a6a546b95fbd"},{"sha":"9e5972413b4873dc143c4046c6e74eb608ace32b","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"update-index: manually enable or disable untracked cache\n\nOverall time saving on \"git status\" is about 40% in the best case\nscenario, removing ..collect_untracked() as the most time consuming\nfunction. read and refresh index operations are now at the top (which\nshould drop when index-helper and/or watchman support is added). More\nnumbers and analysis below.\n\nwebkit.git\n==========\n\n169k files. 6k dirs. Lots of test data (i.e. not touched most of the\ntime)\n\nBase status\n-----------\n\nIndex version 4 in split index mode and cache-tree populated. No\nuntracked cache. It shows how time is consumed by \"git status\". The\nsame settings are used for other repos below.\n\n18:28:10.199679 builtin/commit.c:1394   performance: 0.000000451 s: cmd_status:setup\n18:28:10.474847 read-cache.c:1407       performance: 0.274873831 s: read_index\n18:28:10.475295 read-cache.c:1407       performance: 0.000000656 s: read_index\n18:28:10.728443 preload-index.c:131     performance: 0.253147487 s: read_index_preload\n18:28:10.741422 read-cache.c:1254       performance: 0.012868340 s: refresh_index\n18:28:10.752300 wt-status.c:623         performance: 0.010421357 s: wt_status_collect_changes_worktree\n18:28:10.762069 wt-status.c:629         performance: 0.009644748 s: wt_status_collect_changes_index\n18:28:11.601019 wt-status.c:632         performance: 0.838859547 s: wt_status_collect_untracked\n18:28:11.605939 builtin/commit.c:1421   performance: 0.004835004 s: cmd_status:update_index\n18:28:11.606580 trace.c:415             performance: 1.407878388 s: git command: 'git' 'status'\n\nPopulating status\n-----------------\n\nThis is after enabling untracked cache and the cache is still empty.\nWe see a slight increase in .._collect_untracked() and update_index\n(because new cache has to be written to $GIT_DIR/index).\n\n18:28:18.915213 builtin/commit.c:1394   performance: 0.000000326 s: cmd_status:setup\n18:28:19.197364 read-cache.c:1407       performance: 0.281901416 s: read_index\n18:28:19.197754 read-cache.c:1407       performance: 0.000000546 s: read_index\n18:28:19.451355 preload-index.c:131     performance: 0.253599607 s: read_index_preload\n18:28:19.464400 read-cache.c:1254       performance: 0.012935336 s: refresh_index\n18:28:19.475115 wt-status.c:623         performance: 0.010236920 s: wt_status_collect_changes_worktree\n18:28:19.486022 wt-status.c:629         performance: 0.010801685 s: wt_status_collect_changes_index\n18:28:20.362660 wt-status.c:632         performance: 0.876551366 s: wt_status_collect_untracked\n18:28:20.396199 builtin/commit.c:1421   performance: 0.033447969 s: cmd_status:update_index\n18:28:20.396939 trace.c:415             performance: 1.482695902 s: git command: 'git' 'status'\n\nPopulated status\n----------------\n\nAfter the cache is populated, wt_status_collect_untracked() drops 82%\nfrom 0.838s to 0.144s. Overall time drops 45%. Top offenders are now\nread_index() and read_index_preload().\n\n18:28:20.408605 builtin/commit.c:1394   performance: 0.000000457 s: cmd_status:setup\n18:28:20.692864 read-cache.c:1407       performance: 0.283980458 s: read_index\n18:28:20.693273 read-cache.c:1407       performance: 0.000000661 s: read_index\n18:28:20.958814 preload-index.c:131     performance: 0.265540254 s: read_index_preload\n18:28:20.972375 read-cache.c:1254       performance: 0.013437429 s: refresh_index\n18:28:20.983959 wt-status.c:623         performance: 0.011146646 s: wt_status_collect_changes_worktree\n18:28:20.993948 wt-status.c:629         performance: 0.009879094 s: wt_status_collect_changes_index\n18:28:21.138125 wt-status.c:632         performance: 0.144084737 s: wt_status_collect_untracked\n18:28:21.173678 builtin/commit.c:1421   performance: 0.035463949 s: cmd_status:update_index\n18:28:21.174251 trace.c:415             performance: 0.766707355 s: git command: 'git' 'status'\n\ngentoo-x86.git\n==============\n\nThis repository is a strange one with a balanced, wide and shallow\nworktree (about 100k files and 23k dirs) and no .gitignore in\nworktree. .._collect_untracked() time drops 88%, total time drops 56%.\n\nBase status\n-----------\n18:20:40.828642 builtin/commit.c:1394   performance: 0.000000496 s: cmd_status:setup\n18:20:41.027233 read-cache.c:1407       performance: 0.198130532 s: read_index\n18:20:41.027670 read-cache.c:1407       performance: 0.000000581 s: read_index\n18:20:41.171716 preload-index.c:131     performance: 0.144045594 s: read_index_preload\n18:20:41.179171 read-cache.c:1254       performance: 0.007320424 s: refresh_index\n18:20:41.185785 wt-status.c:623         performance: 0.006144638 s: wt_status_collect_changes_worktree\n18:20:41.192701 wt-status.c:629         performance: 0.006780184 s: wt_status_collect_changes_index\n18:20:41.991723 wt-status.c:632         performance: 0.798927029 s: wt_status_collect_untracked\n18:20:41.994664 builtin/commit.c:1421   performance: 0.002852772 s: cmd_status:update_index\n18:20:41.995458 trace.c:415             performance: 1.168427502 s: git command: 'git' 'status'\nPopulating status\n-----------------\n18:20:48.968848 builtin/commit.c:1394   performance: 0.000000380 s: cmd_status:setup\n18:20:49.172918 read-cache.c:1407       performance: 0.203734214 s: read_index\n18:20:49.173341 read-cache.c:1407       performance: 0.000000562 s: read_index\n18:20:49.320013 preload-index.c:131     performance: 0.146671391 s: read_index_preload\n18:20:49.328039 read-cache.c:1254       performance: 0.007921957 s: refresh_index\n18:20:49.334680 wt-status.c:623         performance: 0.006172020 s: wt_status_collect_changes_worktree\n18:20:49.342526 wt-status.c:629         performance: 0.007731746 s: wt_status_collect_changes_index\n18:20:50.257510 wt-status.c:632         performance: 0.914864222 s: wt_status_collect_untracked\n18:20:50.338371 builtin/commit.c:1421   performance: 0.080776477 s: cmd_status:update_index\n18:20:50.338900 trace.c:415             performance: 1.371462446 s: git command: 'git' 'status'\nPopulated status\n----------------\n18:20:50.351160 builtin/commit.c:1394   performance: 0.000000571 s: cmd_status:setup\n18:20:50.577358 read-cache.c:1407       performance: 0.225917338 s: read_index\n18:20:50.577794 read-cache.c:1407       performance: 0.000000617 s: read_index\n18:20:50.734140 preload-index.c:131     performance: 0.156345564 s: read_index_preload\n18:20:50.745717 read-cache.c:1254       performance: 0.011463075 s: refresh_index\n18:20:50.755176 wt-status.c:623         performance: 0.008877929 s: wt_status_collect_changes_worktree\n18:20:50.763768 wt-status.c:629         performance: 0.008471633 s: wt_status_collect_changes_index\n18:20:50.854885 wt-status.c:632         performance: 0.090988721 s: wt_status_collect_untracked\n18:20:50.857765 builtin/commit.c:1421   performance: 0.002789097 s: cmd_status:update_index\n18:20:50.858411 trace.c:415             performance: 0.508647673 s: git command: 'git' 'status'\n\nlinux-2.6\n=========\n\nReference repo. Not too big. .._collect_status() drops 84%. Total time\ndrops 42%.\n\nBase status\n-----------\n18:34:09.870122 builtin/commit.c:1394   performance: 0.000000385 s: cmd_status:setup\n18:34:09.943218 read-cache.c:1407       performance: 0.072871177 s: read_index\n18:34:09.943614 read-cache.c:1407       performance: 0.000000491 s: read_index\n18:34:10.004364 preload-index.c:131     performance: 0.060748102 s: read_index_preload\n18:34:10.008190 read-cache.c:1254       performance: 0.003714285 s: refresh_index\n18:34:10.012087 wt-status.c:623         performance: 0.002775446 s: wt_status_collect_changes_worktree\n18:34:10.016054 wt-status.c:629         performance: 0.003862140 s: wt_status_collect_changes_index\n18:34:10.214747 wt-status.c:632         performance: 0.198604837 s: wt_status_collect_untracked\n18:34:10.216102 builtin/commit.c:1421   performance: 0.001244166 s: cmd_status:update_index\n18:34:10.216817 trace.c:415             performance: 0.347670735 s: git command: 'git' 'status'\nPopulating status\n-----------------\n18:34:16.595102 builtin/commit.c:1394   performance: 0.000000456 s: cmd_status:setup\n18:34:16.666600 read-cache.c:1407       performance: 0.070992413 s: read_index\n18:34:16.667012 read-cache.c:1407       performance: 0.000000606 s: read_index\n18:34:16.729375 preload-index.c:131     performance: 0.062362492 s: read_index_preload\n18:34:16.732565 read-cache.c:1254       performance: 0.003075517 s: refresh_index\n18:34:16.736148 wt-status.c:623         performance: 0.002422201 s: wt_status_collect_changes_worktree\n18:34:16.739990 wt-status.c:629         performance: 0.003746618 s: wt_status_collect_changes_index\n18:34:16.948505 wt-status.c:632         performance: 0.208426710 s: wt_status_collect_untracked\n18:34:16.961744 builtin/commit.c:1421   performance: 0.013151887 s: cmd_status:update_index\n18:34:16.962233 trace.c:415             performance: 0.368537535 s: git command: 'git' 'status'\nPopulated status\n----------------\n18:34:16.970026 builtin/commit.c:1394   performance: 0.000000631 s: cmd_status:setup\n18:34:17.046235 read-cache.c:1407       performance: 0.075904673 s: read_index\n18:34:17.046644 read-cache.c:1407       performance: 0.000000681 s: read_index\n18:34:17.113564 preload-index.c:131     performance: 0.066920253 s: read_index_preload\n18:34:17.117281 read-cache.c:1254       performance: 0.003604055 s: refresh_index\n18:34:17.121115 wt-status.c:623         performance: 0.002508345 s: wt_status_collect_changes_worktree\n18:34:17.125089 wt-status.c:629         performance: 0.003871636 s: wt_status_collect_changes_index\n18:34:17.156089 wt-status.c:632         performance: 0.030895703 s: wt_status_collect_untracked\n18:34:17.169861 builtin/commit.c:1421   performance: 0.013686404 s: cmd_status:update_index\n18:34:17.170391 trace.c:415             performance: 0.201474531 s: git command: 'git' 'status'\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/9e5972413b4873dc143c4046c6e74eb608ace32b"},{"sha":"f64cb88d3521b64b2db9353d14148328063745dc","author":{"email":"024f400cd820cb2ddbe54c7fecfd01e45f30bb96@gmail.com","name":"Nguyễn Thái Ngọc Duy"},"message":"update-index: test the system before enabling untracked cache\n\nHelped-by: Eric Sunshine <sunshine@sunshineco.com>\nHelped-by: Junio C Hamano <gitster@pobox.com>\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>","distinct":false,"url":"https://api.github.com/repos/peff/git/commits/f64cb88d3521b64b2db9353d14148328063745dc"}]}