)]}'
{
  "commit": "f26ab4ebee52b6a595859690087a276658ea425b",
  "tree": "cd19fb03c3e54f8e54f1c3fa13b02ae7c5019c89",
  "parents": [
    "72bba7bd53389407037ef63a14bab6aa5e6bc3ef"
  ],
  "author": {
    "name": "Thomas Wolf",
    "email": "thomas.wolf@paranor.ch",
    "time": "Sun Feb 13 23:30:36 2022 +0100"
  },
  "committer": {
    "name": "Matthias Sohn",
    "email": "matthias.sohn@sap.com",
    "time": "Mon Mar 07 18:45:25 2022 +0100"
  },
  "message": "[checkout] Use .gitattributes from the commit to be checked out\n\nJGit used only one set of attributes constructed from the global and\ninfo attributes, plus the attributes from working tree, index, and\nHEAD.\n\nThese attributes must be used to determine whether the working tree is\ndirty.\n\nBut for actually checking out a file, one must use the attributes from\nglobal, info, and *the commit to be checked out*. Otherwise one may not\npick up definitions that are only in the .gitattributes of the commit\nto be checked out or that are changed in that commit with respect to\nthe attributes currently in HEAD, the index, or the working tree.\n\nMaintain in TreeWalk different Attributes per tree, and add operations\nto determine EOL handling and smudge filters per tree.\n\nUse the new methods in DirCacheCheckout and ResolveMerger. Note that\nmerging in JGit actually used the attributes from the base, not those\nfrom ours, which looks dubious at least. It now uses those from ours,\nand for checking out the ones from theirs.\n\nThe canBeContentMerged() determination was also done from the base\nattributes, and is newly done from the ours attributes. Possibly this\nshould take into account all three attributes, and only if all three\nagree the item can be content merged, a content merge should be\nattempted? (What if the binary/text setting changes between base, ours,\nor theirs?)\n\nAlso note that JGit attempts to perform content merges on non-binary\nLFS files; there it used the filter attribute from base, too, even for\nthe ours and theirs versions. Newly it takes the filter attribute from\nthe correct tree. I\u0027m not convinced doing content merges on potentially\nhuge files like LFS files is really a good idea.\n\nAdd tests in FilterCommandsTest and LfsGitTest to verify the behavior.\n\nOpen question: using index and working tree as fallback for the\nattributes of ours (assuming it is HEAD) is OK. But does it also make\nsense for base and theirs in merging?\n\nBug: 578707\nChange-Id: I0bf433e9e3eb28479b6272e17c0666e175e67d08\nSigned-off-by: Thomas Wolf \u003cthomas.wolf@paranor.ch\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8964310e417f9f7827f0009075095747f8952853",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/LfsGitTest.java",
      "new_id": "3e83c8ef49d9e39d7ea92b4874150343afddadb7",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.lfs.test/tst/org/eclipse/jgit/lfs/LfsGitTest.java"
    },
    {
      "type": "modify",
      "old_id": "36f94fbd204a8a2d9c70829a9fd5595dcab7f407",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FilterCommandsTest.java",
      "new_id": "89d31c3e8f8bace1f938be87b663c4bb5c2d8ab2",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FilterCommandsTest.java"
    },
    {
      "type": "modify",
      "old_id": "e026e31dc5b20b805692bbf382d61894a09da862",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/.settings/.api_filters",
      "new_id": "00b89a4b3d5fb755b5f5310b9be2e551b4a0408e",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/.settings/.api_filters"
    },
    {
      "type": "modify",
      "old_id": "638dd827ed029c0612b02e6a14d4c6f97d577250",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/attributes/AttributesHandler.java",
      "new_id": "7ec78597fa284cb2d482c7d3a223c99f87a83b7a",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/attributes/AttributesHandler.java"
    },
    {
      "type": "modify",
      "old_id": "c904a782dbe60df092729fcec191c19e7a3ca8a4",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java",
      "new_id": "3d50a8215571819015e49f87ee10ac89dfc7d618",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java"
    },
    {
      "type": "modify",
      "old_id": "77676628679f0545693b2e9ff505d92054c987b2",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java",
      "new_id": "b9ab1d1b7af537804faa8ce5431376271e700830",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java"
    },
    {
      "type": "modify",
      "old_id": "1f614e31f61c4cdf83d260bde9a28cdb31a3f5f3",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java",
      "new_id": "8269666d26e7dae1cdd584371e5ef27eb0416602",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/treewalk/TreeWalk.java"
    }
  ]
}
