)]}'
{
  "commit": "e5d31d4016ee4567838b28a29708eb31ad5cb5c2",
  "tree": "c5b0302426a47ddbecfa25e4f903a6c818dd54b9",
  "parents": [
    "376453ddc2f8a680676f701f837bbf1084308bf7"
  ],
  "author": {
    "name": "Fabian Meumertzheim",
    "email": "fabian@buildbuddy.io",
    "time": "Tue Aug 25 21:20:00 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Aug 25 21:20:00 2026 +0000"
  },
  "message": "[8.8.0] Expand tree artifact inputs from metadata in the compact execution log (#30830)\n\nAn empty tree artifact whose generating action template expands into no\nactions is never materialized on disk when a disk or remote cache is in\nuse: nothing creates the directory and the `RemoteActionFileSystem` has\nno entries for it either. Logging a spawn that has such a tree artifact\nas an input then fails the action with\n\nERROR: Linking _nativedeps/6a5ccd5.so failed: IOException while logging\nspawn: .../bin/_objs/biome_proto.upb_minitable/iome (No such file or\ndirectory)\n\nsince `expandDirectory` readdirs the directory. This happens while\nlogging *inputs*, which isn\u0027t covered by the try/catch around output\nlogging added in #30717.\n\nExpand tree artifacts from their `TreeArtifactValue` instead. Their\ncontents are already known, so this avoids the traversal entirely and\nalso keeps the log complete for trees whose files aren\u0027t materialized\nlocally. Source directories and filesets keep using the filesystem\ntraversal.\n\nFixes\nhttps://github.com/bazelbuild/bazel/issues/22920#issuecomment-5345473352\n\n### Description\n\n### Motivation\n\n### Build API Changes\n\nNo\n\n### Checklist\n\n- [x] I have added tests for the new use cases (if any).\n- [ ] I have updated the documentation (if applicable).\n\n### Release Notes\n\nRELNOTES: Fixed a build failure with `--execution_log_compact_file` when\na C++ action template has no inputs.\n\nCloses #30816.\n\nPiperOrigin-RevId: 968391836\nChange-Id: Id05a603a4e1987eef2c50d7722a8ee5955530e83\n\n(cherry picked from commit df9ab4fa0aa2362d007e586a92bcce477dccaf4e)\n\n8.8.0 adaptation: `InputMetadataProvider` has no `getTreeMetadata` on\nthis branch, so the pick adds one. It is keyed on the exec path rather\nthan the `ActionInput` so that the existing\n`ActionInputMap#getTreeMetadata(PathFragment)` implements it as is, and\nit defaults to `null`, which keeps the filesystem traversal for\nproviders that can\u0027t answer (`StaticInputMetadataProvider`,\n`SingleBuildFileCache`). The providers that a spawn is actually logged\nwith forward to their delegates: `ActionInputMetadataProvider`,\n`DelegatingPairInputMetadataProvider` and\n`ActionExecutionContext.OverriddenRunfilesPathInputMetadataProvider`.\n`internalToUnicode` doesn\u0027t exist on this branch either, so paths are\nused as is, matching the surrounding code.\n\nCloses #30818\n\nCo-authored-by: Ian (Hee) Cha \u003cheec@google.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e3eb373f40e683c609c2a5d57145a5ea16e2b732",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java",
      "new_id": "81250186e1dec841aa933fa7f08ae896ad0c27c7",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java"
    },
    {
      "type": "modify",
      "old_id": "04b54a891b2c8a4f268c4b85a0b75d4522d9ee9c",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java",
      "new_id": "ed24da6f6dc3bfe9888553c410a020885dc16fea",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java"
    },
    {
      "type": "modify",
      "old_id": "6e59cf9f2cc5a4d8db4dad38fafda68d54f820b3",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/actions/DelegatingPairInputMetadataProvider.java",
      "new_id": "3da30a3922fa70b9f4ad82ae4fcef4916c294eac",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/actions/DelegatingPairInputMetadataProvider.java"
    },
    {
      "type": "modify",
      "old_id": "90972969614852104b50981e93142776a92bb744",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/actions/InputMetadataProvider.java",
      "new_id": "28402dbb71b7058c29b7dc30629d482b25bd1a91",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/actions/InputMetadataProvider.java"
    },
    {
      "type": "modify",
      "old_id": "b3f0f1c5977dd2395657d834eeee9fe3a09697f5",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/exec/BUILD",
      "new_id": "467ef5c79352f1aee4901194033be27a2ca9a135",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/exec/BUILD"
    },
    {
      "type": "modify",
      "old_id": "c49db496d9332dbd0f63e0dc42c21c053084b35a",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/exec/CompactSpawnLogContext.java",
      "new_id": "2f1758059a61673443c96b546f54e15ac927bd4d",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/exec/CompactSpawnLogContext.java"
    },
    {
      "type": "modify",
      "old_id": "68bab8c8f1b9504291d656df9e16c2edb1fed72d",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMetadataProvider.java",
      "new_id": "8cd7834f268ea65ad8461d9b1cf272eb533c8ded",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMetadataProvider.java"
    },
    {
      "type": "modify",
      "old_id": "c626e5b1cb1f9f47f10128d6ce3710cc8aee122b",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/skyframe/BUILD",
      "new_id": "36d6fc4b2b4a7fe29fd3777570debc97ea89514b",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/skyframe/BUILD"
    },
    {
      "type": "modify",
      "old_id": "ce2881f1c079caa91e40231e46e5b4777dca3bb9",
      "old_mode": 33188,
      "old_path": "src/test/java/com/google/devtools/build/lib/exec/CompactSpawnLogContextTest.java",
      "new_id": "25de7c05c3e3e63f33931cd925d3b506018876fa",
      "new_mode": 33188,
      "new_path": "src/test/java/com/google/devtools/build/lib/exec/CompactSpawnLogContextTest.java"
    },
    {
      "type": "modify",
      "old_id": "0d87becdc05cfb5522ae0b03896187f8a26583aa",
      "old_mode": 33188,
      "old_path": "src/test/java/com/google/devtools/build/lib/exec/util/BUILD",
      "new_id": "b94b81e3004683a798dd0c0b2573c8aa1c0b8f64",
      "new_mode": 33188,
      "new_path": "src/test/java/com/google/devtools/build/lib/exec/util/BUILD"
    },
    {
      "type": "modify",
      "old_id": "29ecf129216f923f076568f6c1a0b942753f3311",
      "old_mode": 33188,
      "old_path": "src/test/java/com/google/devtools/build/lib/exec/util/FakeActionInputFileCache.java",
      "new_id": "744bfd5bf0b15ff75365b9faba9da496763d207a",
      "new_mode": 33188,
      "new_path": "src/test/java/com/google/devtools/build/lib/exec/util/FakeActionInputFileCache.java"
    }
  ]
}
