)]}'
{
  "commit": "190a65f9db8db9d87d54351429f7879fcb4ad608",
  "tree": "69147479da50321ae236a5910783c6d7a62e365f",
  "parents": [
    "cff4e9138d8df45e3b6199171092ee781cdadaeb"
  ],
  "author": {
    "name": "Derrick Stolee",
    "email": "dstolee@microsoft.com",
    "time": "Fri Dec 13 18:09:53 2019 +0000"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri Dec 13 12:01:02 2019 -0800"
  },
  "message": "sparse-checkout: respect core.ignoreCase in cone mode\n\nWhen a user uses the sparse-checkout feature in cone mode, they\nadd patterns using \"git sparse-checkout set \u003cdir1\u003e \u003cdir2\u003e ...\"\nor by using \"--stdin\" to provide the directories line-by-line over\nstdin. This behaviour naturally looks a lot like the way a user\nwould type \"git add \u003cdir1\u003e \u003cdir2\u003e ...\"\n\nIf core.ignoreCase is enabled, then \"git add\" will match the input\nusing a case-insensitive match. Do the same for the sparse-checkout\nfeature.\n\nPerform case-insensitive checks while updating the skip-worktree\nbits during unpack_trees(). This is done by changing the hash\nalgorithm and hashmap comparison methods to optionally use case-\ninsensitive methods.\n\nWhen this is enabled, there is a small performance cost in the\nhashing algorithm. To tease out the worst possible case, the\nfollowing was run on a repo with a deep directory structure:\n\n\tgit ls-tree -d -r --name-only HEAD |\n\t\tgit sparse-checkout set --stdin\n\nThe \u0027set\u0027 command was timed with core.ignoreCase disabled or\nenabled. For the repo with a deep history, the numbers were\n\n\tcore.ignoreCase\u003dfalse: 62s\n\tcore.ignoreCase\u003dtrue:  74s (+19.3%)\n\nFor reproducibility, the equivalent test on the Linux kernel\nrepository had these numbers:\n\n\tcore.ignoreCase\u003dfalse: 3.1s\n\tcore.ignoreCase\u003dtrue:  3.6s (+16%)\n\nNow, this is not an entirely fair comparison, as most users\nwill define their sparse cone using more shallow directories,\nand the performance improvement from eb42feca97 (\"unpack-trees:\nhash less in cone mode\" 2019-11-21) can remove most of the\nhash cost. For a more realistic test, drop the \"-r\" from the\nls-tree command to store only the first-level directories.\nIn that case, the Linux kernel repository takes 0.2-0.25s in\neach case, and the deep repository takes one second, plus or\nminus 0.05s, in each case.\n\nThus, we _can_ demonstrate a cost to this change, but it is\nunlikely to matter to any reasonable sparse-checkout cone.\n\nSigned-off-by: Derrick Stolee \u003cdstolee@microsoft.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b97528567330f50a91d1c86f72f6b4df991d848c",
      "old_mode": 33188,
      "old_path": "Documentation/git-sparse-checkout.txt",
      "new_id": "9c3c66cc37b3a49be9f9466cbe2d1cf7486ffb8c",
      "new_mode": 33188,
      "new_path": "Documentation/git-sparse-checkout.txt"
    },
    {
      "type": "modify",
      "old_id": "a542d617a5fe25b2ec0d7b80c4dc172387ef7302",
      "old_mode": 33188,
      "old_path": "builtin/sparse-checkout.c",
      "new_id": "5d62f7a66d9b345b09fea90d0f0376df3161cfcb",
      "new_mode": 33188,
      "new_path": "builtin/sparse-checkout.c"
    },
    {
      "type": "modify",
      "old_id": "2ef92a50a046062f4584143de6138deb9a8a0db7",
      "old_mode": 33188,
      "old_path": "dir.c",
      "new_id": "22d08e61c296a0ca2676c705422b9b50c292650c",
      "new_mode": 33188,
      "new_path": "dir.c"
    },
    {
      "type": "modify",
      "old_id": "d5e289252633d9090b4ef5f0caaff7101bb785f2",
      "old_mode": 33261,
      "old_path": "t/t1091-sparse-checkout-builtin.sh",
      "new_id": "cee98a1c8a80d2ba8be2e5fef57b43b14fc56869",
      "new_mode": 33261,
      "new_path": "t/t1091-sparse-checkout-builtin.sh"
    }
  ]
}
