)]}'
{
  "commit": "c8b939009be35f93c9781796a8f4fef18dc4c1df",
  "tree": "647946d28774fd85692927435dc6e6ebc128ae6d",
  "parents": [
    "8e32da710ccc876c3ce852925f333da923333d3b"
  ],
  "author": {
    "name": "Michael Spang",
    "email": "spang@google.com",
    "time": "Sun May 30 15:53:56 2021 -0400"
  },
  "committer": {
    "name": "CQ Bot Account",
    "email": "pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Jun 09 19:15:51 2021 +0000"
  },
  "message": "Remove absolute paths from build command lines\n\nThe GN convention is to specify paths in command lines relative to the\nbuild directory. Unfortunately and contrary to pigweed\u0027s expectations\nthis is not what rebase_path(path) does; that outputs an absolute path.\n\nAbsolute paths are not desirable in most circumstances as they contain\nsources of nondeterminism such as the developer\u0027s home directory. Using\nthem can for example reduce hit rate in build caches.\n\nReplace rebase_path(path) with rebase_path(path, root_build_dir) which\nis the correct idiom and matches GN\u0027s builtin behavior (e.g. for\nsources, include_dirs, etc).\n\nThis also removes the --directory argument to python_action(). Changing\nthe directory during the build while using relative paths is likely to\nresult in confusion and should be discouraged.\n\nThere\u0027s a couple more things to do on top of this for identical\nbinaries between build directories / machines / developers:\n\n- pass options to avoid embedding the working directory\n- pass options to use relative paths for the vendored clang \u0026 libc++\n\nSee [1]-[2] for how to do that.\n\n[1] https://source.chromium.org/chromium/chromium/src/+/main:build/config/compiler/BUILD.gn;l\u003d1170-1239;drc\u003dab531c265c533cba1c2f6d8240cc0bf7679f605a\n[2] https://cs.opensource.google/fuchsia/fuchsia/+/main:build/config/BUILD.gn;l\u003d145-216;drc\u003df6d705f0937c778d5d5f807a4580113612b02f5a\n\nChange-Id: I17708102c03d6488d68c8571b6e9343191fd47de\nReviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/47461\nReviewed-by: Wyatt Hepler \u003chepler@google.com\u003e\nCommit-Queue: Michael Spang \u003cspang@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dc2e4b0afaceee164f1489c7ddfc29f14c908b34",
      "old_mode": 33188,
      "old_path": "docs/module_structure.rst",
      "new_id": "e22bf4e92a0146ea716be07aa3fbfc3d4fff6ce4",
      "new_mode": 33188,
      "new_path": "docs/module_structure.rst"
    },
    {
      "type": "modify",
      "old_id": "0d1704c19f9a45c6f989d6014ecd708d4b58537a",
      "old_mode": 33188,
      "old_path": "pw_arduino_build/arduino.gni",
      "new_id": "f35836d51d7064cf914107a3ce1fdf065f9f9971",
      "new_mode": 33188,
      "new_path": "pw_arduino_build/arduino.gni"
    },
    {
      "type": "modify",
      "old_id": "bb22417d26cb46ca3983e0b98d1add6fca9521b6",
      "old_mode": 33188,
      "old_path": "pw_bloat/bloat.gni",
      "new_id": "6d79cfb7f5dcdf26808ba5319bda2d35ae3c20f1",
      "new_mode": 33188,
      "new_path": "pw_bloat/bloat.gni"
    },
    {
      "type": "modify",
      "old_id": "db3725dcabbc8ff8feda35bbb4c4e04194c92ad9",
      "old_mode": 33188,
      "old_path": "pw_build/docs.rst",
      "new_id": "7bf075bb92ee9f7a41645f299107a7770a0806f9",
      "new_mode": 33188,
      "new_path": "pw_build/docs.rst"
    },
    {
      "type": "modify",
      "old_id": "a7c0e69101076826ac72341b544ee0e4f0df9b8a",
      "old_mode": 33188,
      "old_path": "pw_build/error.gni",
      "new_id": "653b4a9121c155bc851ad1c2195ee02e4765e066",
      "new_mode": 33188,
      "new_path": "pw_build/error.gni"
    },
    {
      "type": "modify",
      "old_id": "d2b4e695accaefe635175b96e29949d4c531cd74",
      "old_mode": 33188,
      "old_path": "pw_build/exec.gni",
      "new_id": "fc6a5f9503acdaeb74a65a4fa4acc829607c05f6",
      "new_mode": 33188,
      "new_path": "pw_build/exec.gni"
    },
    {
      "type": "modify",
      "old_id": "49230f24bdcfb480faedff285f60cd77411cd773",
      "old_mode": 33188,
      "old_path": "pw_build/go.gni",
      "new_id": "eadb93b2d6d4d232b271c8a43f7413d9f526718b",
      "new_mode": 33188,
      "new_path": "pw_build/go.gni"
    },
    {
      "type": "modify",
      "old_id": "cac3f237caf858cdd8dd070d1fbe7e93682fc0ca",
      "old_mode": 33188,
      "old_path": "pw_build/host_tool.gni",
      "new_id": "b5a1ffc32dc0830c508bec328afdf875c4f18bea",
      "new_mode": 33188,
      "new_path": "pw_build/host_tool.gni"
    },
    {
      "type": "modify",
      "old_id": "7ba64acb461d90d60d784c31a3bda67e074a939c",
      "old_mode": 33188,
      "old_path": "pw_build/linker_script.gni",
      "new_id": "0cf681b0671ab8e70fc60042bde9327abe6c9bff",
      "new_mode": 33188,
      "new_path": "pw_build/linker_script.gni"
    },
    {
      "type": "modify",
      "old_id": "5e78de8230dbd072fe91f2f05e214a93ec9eeb02",
      "old_mode": 33188,
      "old_path": "pw_build/mirror_tree.gni",
      "new_id": "6091738924cfafe4386e7e1c8f7bf93c2bfbdeed",
      "new_mode": 33188,
      "new_path": "pw_build/mirror_tree.gni"
    },
    {
      "type": "modify",
      "old_id": "e70ce71ec2f55e17d5f495981d89ecc69a1dd1b4",
      "old_mode": 33188,
      "old_path": "pw_build/py/pw_build/generate_python_package.py",
      "new_id": "2ce4d622a90de8005bae1786ff15032ac0dd9093",
      "new_mode": 33188,
      "new_path": "pw_build/py/pw_build/generate_python_package.py"
    },
    {
      "type": "modify",
      "old_id": "15ce00e62406824f5ace9e156cef5e427c19eee2",
      "old_mode": 33261,
      "old_path": "pw_build/py/pw_build/python_runner.py",
      "new_id": "5c3871752cc718a52d488383df1bff569db3d6c4",
      "new_mode": 33261,
      "new_path": "pw_build/py/pw_build/python_runner.py"
    },
    {
      "type": "modify",
      "old_id": "1ea69b06563f8498926d7563eff6ce408fa94b1a",
      "old_mode": 33261,
      "old_path": "pw_build/py/python_runner_test.py",
      "new_id": "f9e188c375ced0decaf12018552efbddba2ddf32",
      "new_mode": 33261,
      "new_path": "pw_build/py/python_runner_test.py"
    },
    {
      "type": "modify",
      "old_id": "b7bf71ac07988db13886747d06aac91421edb424",
      "old_mode": 33188,
      "old_path": "pw_build/python.gni",
      "new_id": "217a7f8f3638ad2058c4b44516aa81318369ed0a",
      "new_mode": 33188,
      "new_path": "pw_build/python.gni"
    },
    {
      "type": "modify",
      "old_id": "fe31801341d5217ebfb46342563375997ab609ab",
      "old_mode": 33188,
      "old_path": "pw_build/python_action.gni",
      "new_id": "6ef48a48206d0488622ea9af77e171df20f0173c",
      "new_mode": 33188,
      "new_path": "pw_build/python_action.gni"
    },
    {
      "type": "modify",
      "old_id": "db41d1e6e9bf598e2d7730bcb0548a05581abf31",
      "old_mode": 33188,
      "old_path": "pw_build/python_dist.gni",
      "new_id": "9514b942b356568d340287604fca59aa93297a67",
      "new_mode": 33188,
      "new_path": "pw_build/python_dist.gni"
    },
    {
      "type": "modify",
      "old_id": "653b0cdf600a8c0b1a12390f70f266c9f6774269",
      "old_mode": 33188,
      "old_path": "pw_build/zip.gni",
      "new_id": "60b3aa0171dcd30893db37065fa3f71331e595da",
      "new_mode": 33188,
      "new_path": "pw_build/zip.gni"
    },
    {
      "type": "modify",
      "old_id": "50bf8d6be43f997a31da41c8572c4f05dfe0f8d8",
      "old_mode": 33188,
      "old_path": "pw_docgen/docs.gni",
      "new_id": "575994673907b9338e4475901b71aa3f53c8b189",
      "new_mode": 33188,
      "new_path": "pw_docgen/docs.gni"
    },
    {
      "type": "modify",
      "old_id": "41e5e4bcabdbb3449b9059a12cfd798732b19ca8",
      "old_mode": 33188,
      "old_path": "pw_hdlc/BUILD.gn",
      "new_id": "7ee98c189763e455343c9a4c9734661b070a8630",
      "new_mode": 33188,
      "new_path": "pw_hdlc/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "b173e066b925c3320ed1fc863caf77d10da3b927",
      "old_mode": 33188,
      "old_path": "pw_polyfill/BUILD.gn",
      "new_id": "6292b2d09bface373b8ec0b4aaf67ef4e770d38c",
      "new_mode": 33188,
      "new_path": "pw_polyfill/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "241c6662645c28cee48167137f27a8b327b462ca",
      "old_mode": 33188,
      "old_path": "pw_protobuf_compiler/proto.gni",
      "new_id": "cc0cb275a3eb0eeb109871e3c3a7f4c0ae116446",
      "new_mode": 33188,
      "new_path": "pw_protobuf_compiler/proto.gni"
    },
    {
      "type": "modify",
      "old_id": "9f4a95fbaa826850133bfc8a9a46e4e3160c8b5e",
      "old_mode": 33188,
      "old_path": "pw_rpc/BUILD.gn",
      "new_id": "bc82b776a17596b59d6b4411a8ffd7728678e9ea",
      "new_mode": 33188,
      "new_path": "pw_rpc/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "520beb2c13bd26f46e0b2db400467713678c5d83",
      "old_mode": 33188,
      "old_path": "pw_tokenizer/BUILD.gn",
      "new_id": "2500f0012d1970fb71f63c5fb3c75cec5472d37e",
      "new_mode": 33188,
      "new_path": "pw_tokenizer/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "81d6832ad798258f86723a545ea6efce5542c997",
      "old_mode": 33188,
      "old_path": "pw_tokenizer/database.gni",
      "new_id": "2508470a11659b66e9a4780a0fa7d3c8b6e576d3",
      "new_mode": 33188,
      "new_path": "pw_tokenizer/database.gni"
    },
    {
      "type": "modify",
      "old_id": "2c71a2f0941909fbf25c39dbf8c29a4bd6c7b7fe",
      "old_mode": 33188,
      "old_path": "pw_toolchain/arm_clang/clang_config.gni",
      "new_id": "de212b96a8f618e79d915ffe51e4f13a0c9666ba",
      "new_mode": 33188,
      "new_path": "pw_toolchain/arm_clang/clang_config.gni"
    },
    {
      "type": "modify",
      "old_id": "e961c9712003d589f941fe842ee8ce1c47b13d3c",
      "old_mode": 33188,
      "old_path": "pw_toolchain/default/BUILD.gn",
      "new_id": "e8ad524cd712cb1afaa79dd2d245e7684ed41c30",
      "new_mode": 33188,
      "new_path": "pw_toolchain/default/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "04e70137e1f99ac2c3447ff29cee7a84b4ab7e33",
      "old_mode": 33188,
      "old_path": "pw_toolchain/non_c_toolchain.gni",
      "new_id": "53f7bdddf69c696df3956a2b52f4e0be6e2d64d0",
      "new_mode": 33188,
      "new_path": "pw_toolchain/non_c_toolchain.gni"
    },
    {
      "type": "modify",
      "old_id": "749472726aa168a86800bc3e966e878c41f3d3e2",
      "old_mode": 33188,
      "old_path": "pw_toolchain/py/pw_toolchain/clang_arm_toolchain.py",
      "new_id": "5c0cf61c02af455f4d639f3608d9c3f4ea948ace",
      "new_mode": 33188,
      "new_path": "pw_toolchain/py/pw_toolchain/clang_arm_toolchain.py"
    },
    {
      "type": "modify",
      "old_id": "820276d994781a031e7661f738997e85d032d24e",
      "old_mode": 33188,
      "old_path": "pw_toolchain/universal_tools.gni",
      "new_id": "eafc0e88f431907d985c761ba0eb2307d8b0d2d9",
      "new_mode": 33188,
      "new_path": "pw_toolchain/universal_tools.gni"
    },
    {
      "type": "modify",
      "old_id": "0d395ae808ccb1533a08e04c0c179a80f16a1234",
      "old_mode": 33188,
      "old_path": "pw_unit_test/py/pw_unit_test/test_runner.py",
      "new_id": "52e69b6786bf8e8032bec17fba84a3ee8535b315",
      "new_mode": 33188,
      "new_path": "pw_unit_test/py/pw_unit_test/test_runner.py"
    },
    {
      "type": "modify",
      "old_id": "02d9e26faeb52c09a627eabb9c00477ee1db024c",
      "old_mode": 33188,
      "old_path": "pw_unit_test/test.gni",
      "new_id": "fc112cf69d696d038967177d0ab84d67eda57ef5",
      "new_mode": 33188,
      "new_path": "pw_unit_test/test.gni"
    },
    {
      "type": "modify",
      "old_id": "7217dffda58db7799b25c0c7bbae2e2acd51009d",
      "old_mode": 33188,
      "old_path": "targets/arduino/BUILD.gn",
      "new_id": "0032273c19b386c4dabd416248a26b299237a2b1",
      "new_mode": 33188,
      "new_path": "targets/arduino/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "a6f6b0ba5bc5aad52b64a1cc2748ac29b1d76d60",
      "old_mode": 33188,
      "old_path": "targets/arduino/target_docs.rst",
      "new_id": "379da1b5ace6d8bb2c299c0452817fef4f5fd839",
      "new_mode": 33188,
      "new_path": "targets/arduino/target_docs.rst"
    },
    {
      "type": "modify",
      "old_id": "35620ac6be9cc0103e72a8b0c6068c5cfebbed7c",
      "old_mode": 33188,
      "old_path": "third_party/nanopb/BUILD.gn",
      "new_id": "c718d9f6336e43295c4ed3f2aa255157ac8b1275",
      "new_mode": 33188,
      "new_path": "third_party/nanopb/BUILD.gn"
    }
  ]
}
