)]}'
{
  "commit": "9072103f3b3cf64dd12ad2949836ab98f62dabf1",
  "tree": "7081abbefb5f7132b63716d35bfbaf2f223f58b1",
  "parents": [
    "b4c3a5da0d764d62406d9f82a0e7c058062e91b3"
  ],
  "author": {
    "name": "Thomas Wolf",
    "email": "twolf@apache.org",
    "time": "Fri Aug 11 21:40:13 2023 +0200"
  },
  "committer": {
    "name": "Matthias Sohn",
    "email": "matthias.sohn@sap.com",
    "time": "Sun Sep 03 00:16:26 2023 +0200"
  },
  "message": "Checkout: better directory handling\n\nWhen checking out a file into the working tree ensure that all parent\ndirectories of the file below the working tree root are actually\ndirectories and do exist before we try to create the file.\n\nWhen multiple files are to be checked out (or even a whole tree), this\nmay check the same directories over and over again. Asking the file\nsystem every time for file attributes is a potentially expensive\noperation. As a remedy, introduce an in-memory cache of directory\nstates for a particular check-out operation.\n\nApply the same fix also in the ResolveMerger, which may also check out\nfiles, and also in the PatchApplier. In PatchApplier, also validate\npaths.\n\nChange-Id: Ie12864c54c9f901a2ccee7caddec73027f353111\nSigned-off-by: Thomas Wolf \u003ctwolf@apache.org\u003e\nSigned-off-by: Matthias Sohn \u003cmatthias.sohn@sap.com\u003e\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "802fa15465d12ff4887068fae2045b8d6d9e108e",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/dotgit.patch"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "03cacbaeed3e78f77c004762bc3d17e7775f6a96",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/dotgit2.patch"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b38f87f9e373d7b3bf2e9d77d1d1f2d2ba8ac4e6",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/symlinks/.gitattributes"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a275c8593fa9186d7a560c652b6bbd444d5b4cc2",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/symlinks/dirtest.patch"
    },
    {
      "type": "modify",
      "old_id": "8e84dfa31860be55ebf865d58c7585f969779a41",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheEntryTest.java",
      "new_id": "01d1e0282dbb7f11ada1dff5641fedfb84b6c435",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheEntryTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e3bc85a512602b830e56f9691b6381f62eaa5fdb",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/InvalidPathCheckoutTest.java"
    },
    {
      "type": "modify",
      "old_id": "e2637257c5220f54bd26a36b532d793d93a6f683",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/patch/PatchApplierTest.java",
      "new_id": "92d47c296677246de6b6562eaa5aefd88eab7294",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/patch/PatchApplierTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "490c45b5582c89325aedb9f2d45750cae97ceb45",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/symlinks/DirectoryTest.java"
    },
    {
      "type": "modify",
      "old_id": "75697fd88a882eebb6fb1f50973acb6fc2b8f086",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/.settings/.api_filters",
      "new_id": "35a3a0aebafeeb677fb43692b3921140eb09fc8d",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/.settings/.api_filters"
    },
    {
      "type": "modify",
      "old_id": "bc8144f1c9a71e2664de5e3eafea1465cac1c380",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties",
      "new_id": "3ac1fde6f0f6559eee833c970fc96fa8bd17ac6e",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties"
    },
    {
      "type": "modify",
      "old_id": "7319ff4b2f0d646a3f0584730a36ceb48830dd24",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java",
      "new_id": "8edae5a580fe80d750b1bfa5836f94582aa549e3",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java"
    },
    {
      "type": "modify",
      "old_id": "17036a9cd328741a03bbb20c19f44e09f812d018",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/api/StashApplyCommand.java",
      "new_id": "e4157286f1158992a0280901045a9cc57d9f4009",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/api/StashApplyCommand.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "accf732dc7265429056dd57d765fd96f0eeb133a",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/dircache/Checkout.java"
    },
    {
      "type": "modify",
      "old_id": "1fb81b71e9381dec1a152284468ba8269d0a2b10",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java",
      "new_id": "d54df8d20e66b9b94c712f9486e37a03c2592f2f",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java"
    },
    {
      "type": "modify",
      "old_id": "518e0b7d9b76e4ce3091c993b04f9371e059459f",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java",
      "new_id": "3b5cc3d1f5244034e4583eed9f9e5116f0852bd9",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "073bf7a0ca4eb42d1844d7a4756f8cac7a5f9da8",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/lib/FileModeCache.java"
    },
    {
      "type": "modify",
      "old_id": "e56513d4e936c856bf81c6130be1aa503dfc2efb",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java",
      "new_id": "04c17be392767f24dd316067c09f78e0d4970fbf",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java"
    },
    {
      "type": "modify",
      "old_id": "da698d6bf675eb16e91f1f704cbd26aec7d37a48",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java",
      "new_id": "04300a9765ea4098451a8a84f0d12a241a36aec8",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java"
    }
  ]
}
