)]}'
{
  "commit": "170244d05977491271a1cc234583d2e5ba75145d",
  "tree": "e420e5141114ea2baedbbebf48d6676b5d71737b",
  "parents": [
    "4d6671b4cec3b3822c75089f3a8aa16c39d49307"
  ],
  "author": {
    "name": "Thomas Wolf",
    "email": "twolf@apache.org",
    "time": "Fri Aug 11 21:40:13 2023 +0200"
  },
  "committer": {
    "name": "Chao Wang",
    "email": "soul2zimate@gmail.com",
    "time": "Sun Oct 22 19:58:31 2023 +0800"
  },
  "message": "Checkout: better directory handling\n\nThis backports the upstream security fix to downstream stable-5.13 branch.\n(cherry picked from commit 9072103f3b3cf64dd12ad2949836ab98f62dabf1)\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": "modify",
      "old_id": "54e4a09ee52d28c81647a55e180ee2103594a957",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java",
      "new_id": "d91ef64688f8bf73551ce6e3180e5191c7b67c6a",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java"
    },
    {
      "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": "867310b60c8fd3ee27e9efdc40a3111f124added",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java",
      "new_id": "71f4ecbcab243de96df291157b990d466f65909b",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java"
    },
    {
      "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": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "05d4cea54b3fb82c69a855b8bf7265059894d83d",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/symlinks/DirectoryTest.java"
    },
    {
      "type": "modify",
      "old_id": "f9b0595080617d0447c03ee3ddc4aa61f329dbee",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties",
      "new_id": "62a2f0d8c739df89498fc66368b1c90363ae94e7",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties"
    },
    {
      "type": "modify",
      "old_id": "583767af3f7d98dcc63f5e8f586dcdbebf534646",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java",
      "new_id": "58b339a2379fcd8b41303cdfccf8b52960a4a9d7",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java"
    },
    {
      "type": "modify",
      "old_id": "847ab0a9a85d379c7d76b79cf4f5d4739268a150",
      "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": "1004d3e50fe587a84a5d258779e46ba21f944d1e",
      "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": "e1e596ab9d26b35b93710bfd21ec3bc11861d6a8",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/dircache/Checkout.java"
    },
    {
      "type": "modify",
      "old_id": "c904a782dbe60df092729fcec191c19e7a3ca8a4",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java",
      "new_id": "3d94547017fa6c368302e9d6ca41de0db7cf4d36",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java"
    },
    {
      "type": "modify",
      "old_id": "446d35078f41db990c1005ff00ac5cda60498eda",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java",
      "new_id": "28604917a5d6530a8f12e2a517ec626c8c1e37ef",
      "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": "349d1270f29cd0eea1d3e37e9f647cb5495dc91d",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/lib/FileModeCache.java"
    },
    {
      "type": "modify",
      "old_id": "77676628679f0545693b2e9ff505d92054c987b2",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java",
      "new_id": "72065fbc57298c1b9830d4adb36e8df3e5aed003",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java"
    }
  ]
}
