)]}'
{
  "log": [
    {
      "commit": "e8cfa98602acef64c756e6c77d1de5455843d855",
      "tree": "01f0e712a5f0f266584e4d87037fcfd12c7ac8c4",
      "parents": [
        "dc5d39067a7e36a1710f6f3cdc8cd15463415ba8"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Thu Apr 28 16:30:22 2022 -0700"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Thu Apr 28 16:30:22 2022 -0700"
      },
      "message": "interceptor: Skip --param.\n\nE.g. for the following command:\n\n  clang [...] --param asan-instrument-allocas\u003d1 [...]\n\nTest: TH\nBug: 221278445\nChange-Id: I6117d7d8d08b7fe9b5139c0ec0740a8155b93ffd\n"
    },
    {
      "commit": "dc5d39067a7e36a1710f6f3cdc8cd15463415ba8",
      "tree": "28332ff9b86ebc5b785879b1de898f01d4164c83",
      "parents": [
        "f298da8c0defb1761d47d0417dda89b1171ef1a2"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Mon Dec 20 15:34:42 2021 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 20 23:49:22 2021 +0000"
      },
      "message": "Add -x to skipped argument for clang.\n\nclang -x \u003clanguage\u003e: Treat subsequent input files as having type \u003clanguage\u003e\n\nTest: builds with cuttlefish\nFixes: 211512820\nChange-Id: I32f72a2b1ebfc12d6a0aecc80274009a8659c1b5\n"
    },
    {
      "commit": "f298da8c0defb1761d47d0417dda89b1171ef1a2",
      "tree": "e67d91811c377ab11beae9ff6afcc24c8d838497",
      "parents": [
        "65cc9ba16295f4f2c7f59015c1e7433c586d35f6"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Mon Dec 13 17:06:33 2021 -0800"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Dec 14 21:08:49 2021 +0000"
      },
      "message": "add readme.md\n\nChange-Id: Ie82d4e210ba8595412c05689e9fb34df88f7a5ac\n"
    },
    {
      "commit": "65cc9ba16295f4f2c7f59015c1e7433c586d35f6",
      "tree": "b526f9603de85fb1be5117b236f2b47d4d02b085",
      "parents": [
        "d11a88cb93cdad7d8508d600ff158163459a0a39"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Thu Dec 09 14:55:15 2021 +0000"
      },
      "committer": {
        "name": "Matthias Männich",
        "email": "maennich@google.com",
        "time": "Thu Dec 09 16:30:23 2021 +0000"
      },
      "message": "main: ensure the correct return code is emitted\n\nstd::system\u0027s return value needs additional treatment to make it the\nexpected return value resembling what the wrapped process returned.\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ib335a383ce07d0311df1b3f6ba8e7addd26360ee\n"
    },
    {
      "commit": "d11a88cb93cdad7d8508d600ff158163459a0a39",
      "tree": "6ceaaf6dcaf9aacac4a5d8a6a8362f059f27e089",
      "parents": [
        "b519019a0ebf6f65611327f572cf751360550078"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 23:07:55 2021 +0000"
      },
      "committer": {
        "name": "Matthias Männich",
        "email": "maennich@google.com",
        "time": "Thu Dec 09 16:29:48 2021 +0000"
      },
      "message": "interceptor: give analyzers names\n\nThis is useful to recognize the used analyzer from the interceptor log.\n\nBug: 205577427\nChange-Id: Iaf536b87341acc533fdf2675c5b1b933e6061450\n"
    },
    {
      "commit": "b519019a0ebf6f65611327f572cf751360550078",
      "tree": "4511c1b4706ce5989a9a2e19f77b7d1301c7baab",
      "parents": [
        "bf0addcb425c10a3bf9fd70a494066956f0b5347"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 20:26:49 2021 +0000"
      },
      "committer": {
        "name": "Matthias Männich",
        "email": "maennich@google.com",
        "time": "Thu Dec 09 09:56:41 2021 +0000"
      },
      "message": "interceptor: add an initial implementation for fake execution\n\nAdd an option to allow fake execution. This is enabled by running the\ninterceptor with --fake | -f, which it will enable analyzers during\nexecution to rewrite the command before execution (but after logging it\naway). The default_fake implementation replaces the entire command by an\nequivalent of `sh -c \"truncate --size 0 \u003coutput\u003e \u003coutput\u003e ...\"`. That\neffectively touches all outputs leaving empty files behind. This is\nenabled for the existing analyzers and possibly a good default for many\nmore. Yet there is no guarantee that this will actually make the build\nsucceed if downstream rules that are not captured by analyzers stumble\nwhen working with the empty files.\n\nThe reason for wrapping the `truncate` in /bin/sh is to avoid having to\ndo the PATH lookup - $(which truncate) - ourselves. Hermetic toolchains\nmight provide a different `truncate` than /usr/bin/truncate, e.g. the\ntoybox variant.\n\nBug: 205735739\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ib8478f52940071d07f6544d8ac4804048404ca64\n"
    },
    {
      "commit": "bf0addcb425c10a3bf9fd70a494066956f0b5347",
      "tree": "ffea5cd5c732332a3d18fbd04ad3207843a802c5",
      "parents": [
        "526323b0494be90d2dbaba296284f0646a800fb5"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 16:06:13 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 16:36:37 2021 +0000"
      },
      "message": "interceptor: store relative current directories\n\nIn one way or the other, the current directories of a command are always\nrelative to the root_dir. Hence, just make them relative at collection\ntime and remove this redundant information. This reduces the command log\nof a kernel build by ~10%.\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I6c4edb2a67b1d37a91e21e68d603876d96a64761\n"
    },
    {
      "commit": "526323b0494be90d2dbaba296284f0646a800fb5",
      "tree": "7d4a9ce39cab29f3b40fc2f6507fa0b93828636d",
      "parents": [
        "b09c721b95e08f3e0446a3d201dae8ee930be4b0",
        "53fcd849fcf5acd1d3896981903ad0b66d82e279"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 08 14:47:46 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 08 14:47:46 2021 +0000"
      },
      "message": "Merge \"interceptor_analysis supports --relative option.\""
    },
    {
      "commit": "b09c721b95e08f3e0446a3d201dae8ee930be4b0",
      "tree": "eeaeb316c090378704ffd22f49266868d9955877",
      "parents": [
        "28d23c975ec11679945b4a72a085a08dc176321c"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Fri Dec 03 22:49:07 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 13:12:12 2021 +0000"
      },
      "message": "interceptor: add FixdepAnalyzer\n\nThis implements tracing for the fixdep command of kernel builds. In\nparticular it allows us to run this command in dry-run mode later.\n\nBug: 205735739\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I4ea3f41edcd64150be0a890e59356e48de4b036d\n"
    },
    {
      "commit": "28d23c975ec11679945b4a72a085a08dc176321c",
      "tree": "dde2ecaaf5473ab147f07d9121dcd732a1e20d2d",
      "parents": [
        "bb8c8328fe50f4f9bcd444c69e27bff5fd71d0f6"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Dec 06 22:37:19 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 13:10:11 2021 +0000"
      },
      "message": "interceptor: tidy up default_make_relative\n\nThis removes some outstanding code smells identified in aosp/1898997.\nSome correctness fixes, some cleanups.\n\nBug: 207620569\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ic31b2ac1ef18b2a93b99dc2e303f7c6ccd66d1d6\n"
    },
    {
      "commit": "bb8c8328fe50f4f9bcd444c69e27bff5fd71d0f6",
      "tree": "b7f91d3f30f1abfcf88df87b6ee29bacbf1b073d",
      "parents": [
        "672cf58a0c0a735e9eee44d8689315e525825bc9"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Dec 06 17:12:40 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 13:10:07 2021 +0000"
      },
      "message": "interceptor: consolidate the execution for execve and posix_spawn\n\nToo much code duplication accumulated, which can now be consolidated.\nDo that and bring back the execute() function that can now deal with a\ncallback to the original libc method.\n\nBug: 209401200\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I85b4c029a6a6153bbabf852cc44c03ff52d2edb1\n"
    },
    {
      "commit": "672cf58a0c0a735e9eee44d8689315e525825bc9",
      "tree": "7b950d38292f06938fe15549b0ede5d273bd18da",
      "parents": [
        "89e53643f25756633b2b60a980a292005de2d3c3"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Dec 06 14:36:16 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 13:08:17 2021 +0000"
      },
      "message": "interceptor: add support for intercepting posix_spawn\n\nposix_spawn is another common way of spawning subprocesses via libc. Add\nsupport for this method as well as `make` makes use of it when spawning\nsubprocesses.\n\nBug: 209401200\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ib4e1cc6bba19c9b52d819dac4b5140a39fb83f83\n"
    },
    {
      "commit": "89e53643f25756633b2b60a980a292005de2d3c3",
      "tree": "805fbd43026fb7037b16e0396f7a23587f97590e",
      "parents": [
        "8be3c76ff90c38e0b6ed563178e4755c59efa234"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Dec 06 14:32:58 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 13:08:17 2021 +0000"
      },
      "message": "interceptor: allow recognized commands to terminate recursion\n\nIf a recognized command is detected, e.g. a compiler invocation, allow\nanalyzers to stop recursion of tracing. That will effectively not\ninstrument any subprocesses with LD_PRELOAD any longer to avoid needless\n(and confusing) recording of internal subprocess. Examples of those are\nthe linker/assembler invocations of compilers.\n\nBug: 209401200\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I92e60f309de38438bc2edb85c750b565dd464c5a\n"
    },
    {
      "commit": "8be3c76ff90c38e0b6ed563178e4755c59efa234",
      "tree": "d9bf5d909decde20ee498be19f9105f0f46df1d0",
      "parents": [
        "824b51875b53f137ebe663932e60c78eb42ccc90"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Dec 06 14:29:44 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 13:08:04 2021 +0000"
      },
      "message": "interceptor: refactor argv_vector() out of execute_execve\n\nThis allows later reuse when adding support for intercepting\nposix_spawn().\n\nBug: 209401200\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I035d4e2a2e2539c073a9c8bcf919872137fb2d28\n"
    },
    {
      "commit": "824b51875b53f137ebe663932e60c78eb42ccc90",
      "tree": "f14312be222e5b70fb0a6029aa72a8cec1f9353e",
      "parents": [
        "136932d6136c6fc1197cd612de823c6146e6ad6d"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Dec 06 12:33:37 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 13:02:39 2021 +0000"
      },
      "message": "interceptor: fix reporting of missing inputs\n\nWhen missing inputs are reported, the Command\u0027s debug representation was\nprinted before the inputs/outputs where filled. That is not ideal. Fix\nthat by doing that check after the assignment.\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I8cabd3243c9decee480daad151d69d4c77852b60\n"
    },
    {
      "commit": "136932d6136c6fc1197cd612de823c6146e6ad6d",
      "tree": "544d3b7032c21e60786120455423df01d5e07cc2",
      "parents": [
        "433356193a79de25193b7b43398d9487941ec148"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Dec 06 10:42:23 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 08 13:02:32 2021 +0000"
      },
      "message": "interceptor: make the execve execution explicit\n\nTrack transformations through analyzers (currently only through\nmake_relative()) and based on that, fall back to the original execve\nwith either the transformed command or just with the original data\npassed in. This avoids unnecessary execute_execve calls if the command\nis unmodified and prepares for later support of additional intercepted\nlibc calls for subprocess execution, such as posix_spawn().\n\nBug: 209401200\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I5c8ce3d5df55fc365b12e5406ac575145d6c035d\n"
    },
    {
      "commit": "53fcd849fcf5acd1d3896981903ad0b66d82e279",
      "tree": "9ba3f30cba720ddac167e0fd10a8271ca3df2d97",
      "parents": [
        "433356193a79de25193b7b43398d9487941ec148"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Dec 07 22:55:51 2021 -0800"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Dec 07 23:25:13 2021 -0800"
      },
      "message": "interceptor_analysis supports --relative option.\n\nThis allows creating compile_commands.json with relative paths\nso that Kythe won\u0027t search for non-existing sandbox directories.\n\nTest: build kythe\nBug: 201801372\nChange-Id: Iffcfa9a6e98ad062595fc52fd45d16d1e9b8e5f8\n"
    },
    {
      "commit": "433356193a79de25193b7b43398d9487941ec148",
      "tree": "425b432cd64fb6e83760f50d03cc245b92e1412e",
      "parents": [
        "ca9108cdebbbd284ae3ce22c6c451127b3c83847"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Dec 07 22:45:21 2021 -0800"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Dec 07 23:19:47 2021 -0800"
      },
      "message": "Recognize -t text.\n\nTest: manual\nChange-Id: Ib28f10e0688a96c93a451f509f73d7e9b38d2692\n"
    },
    {
      "commit": "ca9108cdebbbd284ae3ce22c6c451127b3c83847",
      "tree": "aa46700ff5b11f7639312006651918ff111ba04c",
      "parents": [
        "9e4ae491668ef0f82bbdd0555bf415a500da828d"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 29 16:55:26 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Thu Dec 02 15:54:52 2021 +0000"
      },
      "message": "interceptor: avoid concurrency on the command log\n\nUsing the protobuf util to serialize to the stream can lead to corrupted\nintermediate logs due to concurrency. Ensure only one process is writing\nto the log file at a time by directly writing to the log file in a\nsingle write call.\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I043f349c130cfe307bd51030a1708c6afd122fdb\n"
    },
    {
      "commit": "9e4ae491668ef0f82bbdd0555bf415a500da828d",
      "tree": "46a34939b6b898dff14b1b8298453b04034d2499",
      "parents": [
        "d508920553f147f0ac425dea0614f9d93f099b04"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 29 16:14:58 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Thu Dec 02 10:54:11 2021 +0000"
      },
      "message": "interceptor: add error handling for unparseable entries\n\nIn case entries are unparseable, skip over them and emit an error\nmessage. Since the delimited log is always\n|\u003csizeof(message1)\u003e\u003cmessage1\u003e|\u003csizeof(messsage2)\u003e\u003cmessage2\u003e|..., it is\nsafe to skip entries that can\u0027t be read in order to recover most of the\nlog. But since there is an underlying problem, ensure we emit an error\nmessage.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I8d1233bb22889c36bf1ecc3e6bd5b144333e0e80\n"
    },
    {
      "commit": "d508920553f147f0ac425dea0614f9d93f099b04",
      "tree": "c549109ae7b0cf268094af637f4dc2d6b69ec8be",
      "parents": [
        "f8b898c6ba08547e36344ab04b425e34cd325113"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 29 12:13:45 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 01 14:44:10 2021 +0000"
      },
      "message": "compdb: add mode to emit a \"command\" instead of \"arguments\"\n\nAdd this variant through the mode \"compdb_commands\" to support indexing\nsystems that require \"command\" to be set instead of \"arguments\".\n\nBug: 205731786\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ic9d425abce1b0ad5d48183fd555b72871a53de88\n"
    },
    {
      "commit": "f8b898c6ba08547e36344ab04b425e34cd325113",
      "tree": "eb5642e1811a2bc1324ad55eab75de7f7c0239bd",
      "parents": [
        "031234d1f3e961eff9b707385599a90f94528c7f"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 29 12:07:36 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Dec 01 14:43:17 2021 +0000"
      },
      "message": "interceptor: relocate utility functions into separate static lib\n\nThis allows using the utils without having to link the entire\nlibinterceptor from the analysis tooling.\n\nBug: 205731786\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ieec738c4be9b95d33af3d09546b0e5964008ed34\n"
    },
    {
      "commit": "031234d1f3e961eff9b707385599a90f94528c7f",
      "tree": "9b7b967feca16ba768de188fe572fe48cdf51bae",
      "parents": [
        "e37372dccbe9337185d3d8f235674a2821e364ad"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Fri Nov 26 17:02:02 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 29 17:23:30 2021 +0000"
      },
      "message": "interceptor: selectively enable making commands relative\n\nEnabling/Disabling are poor choices for making commands relative. Making\nall relative breaks some, making none relative misses out on the ones\nthat can benefit from it.\n\nHence, selectively enable make_relative for commands that are known to\nbe safe.\n\nBug: 206894758\nChange-Id: I737aa2d06b303cae836abc453e34f28056120291\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\n"
    },
    {
      "commit": "e37372dccbe9337185d3d8f235674a2821e364ad",
      "tree": "69ab6b5b8bab6f214ab0a9c94e96cfa182437765",
      "parents": [
        "5fd4710496681e0f99d80e080625fa1490dc5c93"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Fri Nov 26 16:41:25 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 29 17:23:30 2021 +0000"
      },
      "message": "interceptor: refactor instantiation of analyzers\n\nMake analyzers classes that are instantiated from a command and that\nimplement common functionality, like determining inputs and outputs.\nThat way the differences between certain commands can be defined much\nmore precise. This change does not intend a change of behaviour.\n\nBug: 206894758\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I42d1006b713371581f0159357b512f5a58a6842c\n"
    },
    {
      "commit": "5fd4710496681e0f99d80e080625fa1490dc5c93",
      "tree": "1a4adec4d9af3d6432a7bfe2f41e141c152b57a0",
      "parents": [
        "a8e52274f79cd8a7b2d3ce124096dad6850f5388"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Fri Nov 26 09:28:02 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Fri Nov 26 14:40:25 2021 +0000"
      },
      "message": "interceptor: put rewriting commands under flag control\n\nNot every command can be rewritten to execute relative. For now, make\nthis feature opt-in. In a later iteration we can enable it for \"safe\"\ncommands, like compilers/linkers that we can entirely judge.\n\nBug: 206894758\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Id624d5486dcd68a07b62c02d55d86492c75cca0f\n"
    },
    {
      "commit": "a8e52274f79cd8a7b2d3ce124096dad6850f5388",
      "tree": "a85da4d12d0a1098487e2bab5c7bf9e0b0c2e1a6",
      "parents": [
        "9cc860c3e344d580d3569b65f2ca1c6eb55205c1"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Thu Nov 25 17:41:15 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Fri Nov 26 14:34:17 2021 +0000"
      },
      "message": "interceptor: generalize environment variable access\n\nGeneralize the access to single environment variable values as this is a\ncommonly used functionality. command_getenv returns an optional to\nindicate whether the value had been set at all and hence allows\ncontextual boolean use, e.g.\n\n  if (command_getenv(command, kEnvVariable)) {\n      // something\n  }\n\nBug: 206894758\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Icda8d0709b6fe394630729c245a0486fcf718157\n"
    },
    {
      "commit": "9cc860c3e344d580d3569b65f2ca1c6eb55205c1",
      "tree": "5907b74a091782ac1f1837346f0f0216522965ee",
      "parents": [
        "47a0e260a72b92bae96befb4a7a32538f9dbd55b"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 18:00:55 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 22:47:00 2021 +0000"
      },
      "message": "interceptor: update license documentation\n\nBug: 206149924\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I3340d58c6a14e98f1fe48ef104e00321fac56881\n"
    },
    {
      "commit": "47a0e260a72b92bae96befb4a7a32538f9dbd55b",
      "tree": "797ad5d737db7bcfded9e48b6a00ea8fcf043b4f",
      "parents": [
        "182e04cb69d8fe731004f8889f1fbc240f54f310"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 17:51:54 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 22:47:00 2021 +0000"
      },
      "message": "interceptor: relocate the interceptor to tools/interceptor\n\nThis makes adjustments to move the interceptor out of the prebuilts and\ninto its final destination.\n\nBug: 206149924\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I86e7ee9cb86ddf153e10c00a5d0e9a42a48b3e59\n"
    },
    {
      "commit": "182e04cb69d8fe731004f8889f1fbc240f54f310",
      "tree": "cfbca3ebf2a753190557758e083da649654347ad",
      "parents": [
        "500c007855399f03aa60ca6380784a3b8a011b61"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 16:01:04 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 16:04:12 2021 +0000"
      },
      "message": "interceptor: protect from unexpectedly empty argument lists\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Iab3179321d4c727d741d0dee96e3b2c7440201fb\n"
    },
    {
      "commit": "500c007855399f03aa60ca6380784a3b8a011b61",
      "tree": "2e5d54b4e9abc8d7ddca33590ecb2886050b00d1",
      "parents": [
        "c5bbde758c1d4a00c49d6c044dee6b6b4b47ea55"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 15:05:27 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 16:04:12 2021 +0000"
      },
      "message": "interceptor: use consistent non-abbreviated naming\n\nThis aligns the proto naming as well as the internal naming for\nconstants and variables.\n\nBug: 207620215\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I31dbf812d48abafe3343cac8cccd5ea4727b8fb9\n"
    },
    {
      "commit": "c5bbde758c1d4a00c49d6c044dee6b6b4b47ea55",
      "tree": "d9032f267fa11197552370b7c519469712ca5e4a",
      "parents": [
        "6c5e049903f976ed36e481ecf86faa88d14cdabb"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 14:47:58 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 15:56:14 2021 +0000"
      },
      "message": "interceptor: consistent constant naming\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I884c21e272e6a3f1ede59b2c5833fdb3983e2879\n"
    },
    {
      "commit": "6c5e049903f976ed36e481ecf86faa88d14cdabb",
      "tree": "0fd5e249da77a778430c30ee7ab0108fb6718e71",
      "parents": [
        "158374d6bf56666713768f2e8945ed3446bd878c"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 14:41:35 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 14:41:35 2021 +0000"
      },
      "message": "interceptor: consistently use curly braces for all statements\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I80b2773557ec561b944d63dd826fa5a08c0bb849\n"
    },
    {
      "commit": "158374d6bf56666713768f2e8945ed3446bd878c",
      "tree": "ebdc3c6081e2288bd77e008b1eccd10f8462fdf0",
      "parents": [
        "29479b2b604c0723be3fc5d147c7e747c22e82b3"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 23 22:53:17 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 12:31:52 2021 +0000"
      },
      "message": "interceptor: replace repr() method by proper operator\u003c\u003c\n\nThat gets rid of the legacy repr() implementation of Command. Replace it\nwith a proper ostream operator\u003c\u003c.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ie96b33f9067841da28d5ef8082140ee67c433a76\n"
    },
    {
      "commit": "29479b2b604c0723be3fc5d147c7e747c22e82b3",
      "tree": "67ae69e61cebcde41c2946db0f305884a5f594d7",
      "parents": [
        "7f5dee8478515c09f671b91396e118fc9ac0e2af"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 22 17:11:00 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Wed Nov 24 12:29:14 2021 +0000"
      },
      "message": "interceptor: replace custom Command class by proto class\n\nThough this removes the lazy evaluation of args and env to a be always\ndone now, this hardly every was truly omitted. Hence, this is not a\nregression. Instead the code could be tidied up to have only one data\nformat that also serializes.\n\nNo functional change intended.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ia3790d36c5477eb39dd6980d35b638803726d49d\n"
    },
    {
      "commit": "7f5dee8478515c09f671b91396e118fc9ac0e2af",
      "tree": "fab924d86a966bedf99b59fa2bf0ea90ad0eceb0",
      "parents": [
        "ce8f79e1ba895cbb6689b2974882bed38abf84f2"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Fri Nov 19 17:49:00 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 23 20:42:46 2021 +0000"
      },
      "message": "interceptor: Support for emitting compile_commands.json\n\nThe analysis command learned how to emit compile_command.json databases\nbased on the recorded command log. A sample execution is:\n\n  $ interceptor_analysis -l /tmp/log -o compile_command.json -t compdb\n\nBug: 205731786\nBug: 201801372\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I00d08d309f51b9263900cab517baa824c3be45c2\n"
    },
    {
      "commit": "ce8f79e1ba895cbb6689b2974882bed38abf84f2",
      "tree": "84c8f281dd4ba6d55cfeb04102a407a8e0cfa38b",
      "parents": [
        "eb9cae6fa61587b5c414b8745e79f2ad80e7ef0c"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sun Nov 21 15:27:27 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 22 17:35:22 2021 +0000"
      },
      "message": "interceptor: record root dir in log\n\nThat is required to reconstruct the full working dir again later.\nThe root dir is either deducted from the environment ($ROOT_DIR) or is\ncwd() of the interceptor process otherwise.\n\nBug: 205731786\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I12d826d7459a83864ecd024d85c801f1011aee87\n"
    },
    {
      "commit": "eb9cae6fa61587b5c414b8745e79f2ad80e7ef0c",
      "tree": "205ab8519bd65288190161a36d67a32d3a62052e",
      "parents": [
        "62ae1c01417ad953f6010d9766c4d1a5afc4eb21",
        "3a7f48334b0809213b9fb5de3f65daa0872038b3"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 22 11:27:11 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 22 11:27:11 2021 +0000"
      },
      "message": "Merge changes I75f52e68,Icff5de48\n\n* changes:\n  interceptor: Android.bp: add missing license header\n  interceptor: Add CMakeLists.txt build description for local development\n"
    },
    {
      "commit": "62ae1c01417ad953f6010d9766c4d1a5afc4eb21",
      "tree": "9d82ce8a949715ff3c480073c9b7a08d818e3b08",
      "parents": [
        "0bf5ef01a13c313b232c68a595f1e91a36f19ea3",
        "a595ff0e987fb6545c7be8006598fd6e04cec332"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 22 11:06:48 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 22 11:06:48 2021 +0000"
      },
      "message": "Merge changes I10b3e46d,I29cde728,I383723e5,Idbecb166,I0f70c545\n\n* changes:\n  Interceptor: initial analysis tooling\n  interceptor: replace JSON log by proto log\n  interceptor: add initial proto log format\n  interceptor: factor out the command line string creation\n  interceptor: introduce default compilation options\n"
    },
    {
      "commit": "3a7f48334b0809213b9fb5de3f65daa0872038b3",
      "tree": "a5f4bb2e4995494a29f019fdb369961e2405d152",
      "parents": [
        "1d315c3faa2275913ca66f832cc9112e93b48219"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sun Nov 21 14:02:47 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sun Nov 21 14:03:54 2021 +0000"
      },
      "message": "interceptor: Android.bp: add missing license header\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I75f52e68e6f2f08306f30821b64204a2ecb7aa4a\n"
    },
    {
      "commit": "1d315c3faa2275913ca66f832cc9112e93b48219",
      "tree": "aa96a9e649d059088724c7c48416d28945322e91",
      "parents": [
        "a595ff0e987fb6545c7be8006598fd6e04cec332"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sat Nov 20 22:50:07 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sun Nov 21 14:03:50 2021 +0000"
      },
      "message": "interceptor: Add CMakeLists.txt build description for local development\n\nThis makes it easier to locally develop the interceptor with different\nconfigurations, such as debug, sanitized, etc.\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Icff5de48e70e27441f69ce48ce34b4e22111e8d8\n"
    },
    {
      "commit": "a595ff0e987fb6545c7be8006598fd6e04cec332",
      "tree": "a28cd664c99a1e4d5f031e80115fec6c8fbd350c",
      "parents": [
        "4724f6e8ea38d305b11d8666cfc9f09d08a17d91"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Thu Nov 18 23:55:59 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sat Nov 20 22:14:55 2021 +0000"
      },
      "message": "Interceptor: initial analysis tooling\n\nAdd analysis tooling to process interceptor logs. As a first utility,\nadd --output-type text to dump the log as pb text.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I10b3e46df6b7deb070710aa4ac9ab94a5486d43a\n"
    },
    {
      "commit": "4724f6e8ea38d305b11d8666cfc9f09d08a17d91",
      "tree": "42617c6890b128b9a9aa96f6b62d18520f75500b",
      "parents": [
        "105f7436f711a530284041ca592a4e73031285f7"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Thu Nov 18 16:52:24 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sat Nov 20 22:14:55 2021 +0000"
      },
      "message": "interceptor: replace JSON log by proto log\n\nThis implements serialization of commands to a corresponding protobuf\nbased log protocol. Child processes append log::Message to the log\n(currently this implies a \u0027Command\u0027). The parent process will reread the\nlog before terminating and will combine the log to a more compact\nlog::Log for further processing.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I29cde728601fc3796f9b3ff0ff1b1d030bb86678\n"
    },
    {
      "commit": "105f7436f711a530284041ca592a4e73031285f7",
      "tree": "ccdf2630cf27174e428e7f87df660630dbc60b4a",
      "parents": [
        "2e524059b8191921102a76a61ddbe50e0aa34e40"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Thu Nov 18 16:10:08 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sat Nov 20 14:31:53 2021 +0000"
      },
      "message": "interceptor: add initial proto log format\n\nThis serves as a stable binary format for communication of state.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I383723e5665a47769d7fbfc4187b7864476b59a1\n"
    },
    {
      "commit": "2e524059b8191921102a76a61ddbe50e0aa34e40",
      "tree": "1ec5f1fa92b20782405c7a5bbbe42f49b062dd5b",
      "parents": [
        "6f56fc0c96d0717359df32bc2dfe1667eb685c5f"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Thu Nov 18 16:04:02 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sat Nov 20 14:20:28 2021 +0000"
      },
      "message": "interceptor: factor out the command line string creation\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Idbecb16660ab055056269184091569264160bcc8\n"
    },
    {
      "commit": "6f56fc0c96d0717359df32bc2dfe1667eb685c5f",
      "tree": "d9a4a98c33db3604c441aae8e890454e085f407c",
      "parents": [
        "6bcd5cf2a4f5bf780c03647715530aafa744ea54"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Thu Nov 18 12:26:31 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sat Nov 20 14:19:56 2021 +0000"
      },
      "message": "interceptor: introduce default compilation options\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I0f70c54538b670f15ece913f7874f8ae15b84f71\n"
    },
    {
      "commit": "0bf5ef01a13c313b232c68a595f1e91a36f19ea3",
      "tree": "ffc8756f197ba4736a1553d37deb6579587a6582",
      "parents": [
        "6bcd5cf2a4f5bf780c03647715530aafa744ea54"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Fri Nov 19 10:50:35 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Fri Nov 19 10:50:35 2021 +0000"
      },
      "message": "interceptor: add OWNERS\n\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I7f23a401f265d0d91006f408a907c131cddcf887\n"
    },
    {
      "commit": "6bcd5cf2a4f5bf780c03647715530aafa744ea54",
      "tree": "2432184caa91ee759396b16195ec4f579a0b977f",
      "parents": [
        "617dbef406fb8fa40fb998a4b2d2f87ae7228a2a"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Sat Nov 13 01:08:22 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 15 10:53:01 2021 +0000"
      },
      "message": "Replace interceptor starter with C++ binary\n\nThis avoids the shell script to grow and allows for additional features\nto be implemented in the future, e.g. communication from the starter to\nthe child processes.\n\nBug: 205732988\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I055530151ce00c600926994fd87392f404ceb375\n"
    },
    {
      "commit": "617dbef406fb8fa40fb998a4b2d2f87ae7228a2a",
      "tree": "bb751e1f6278bffd8ea6b023c0cf3949fcd8b025",
      "parents": [
        "2d7aad8cfe5f2e8f9c00bec4c0737eda5167ae5e"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 09 17:33:04 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 09 23:05:46 2021 +0000"
      },
      "message": "Interceptor: log inputs/outputs as well\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ie6b123d97c10a6a1931c8888d85fe63a68aa72e8\n"
    },
    {
      "commit": "2d7aad8cfe5f2e8f9c00bec4c0737eda5167ae5e",
      "tree": "034ed77372ca4e9df98ba65cf9bc83ad609b2fd4",
      "parents": [
        "7a73e19005405a4cd6ed1b32553ad14556d368d0"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 09 16:26:54 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 09 23:05:46 2021 +0000"
      },
      "message": "Interceptor: add command analysis\n\nAdd first version of the command analysis utilities. We match the\nprogram executed against a set of (command line) analyzers and delegate\nthe detection of any inputs/outputs that can be derived from the command\nline.\n\nFor the moment, this only implements analyzers for clang/gcc\ncompilers/linkers as well as archivers (ar, llvm-ar).\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I72791d05a946a4210be6322358003a7250912b80\n"
    },
    {
      "commit": "7a73e19005405a4cd6ed1b32553ad14556d368d0",
      "tree": "cb6357f52f34707c39f2f3cd5e0f5d28d2461abe",
      "parents": [
        "d821a181256baef495952c00d5c172ca8d8e5e6f"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 08 22:26:27 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 09 18:48:32 2021 +0000"
      },
      "message": "Interceptor: relativate execution based on `cwd`\n\n`ROOT_DIR` - if set, otherwise assume `cwd` - is assumed to be the\ndirectory all execution is done relatively to. Hence, when rewriting\ncommands, do it with that directory as a base.\n\nThe interceptor wrapper is determining the INTERCEPTOR_root_dir based on\neither ROOT_DIR or falls back to `cwd`.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ifef91ce7ae446d1a6cea7a744f36d0ff27cb4b3e\n"
    },
    {
      "commit": "d821a181256baef495952c00d5c172ca8d8e5e6f",
      "tree": "9d3ba9c78ed9d1dea29a481f3064640f900e68eb",
      "parents": [
        "a0ee7311ee0cb1167adb61b9e5c35dd946cf0b0d"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 08 22:14:27 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 09 18:48:32 2021 +0000"
      },
      "message": "Interceptor: add support for Command execution\n\nThat is necessary to execute modified commands. Otherwise the function\nwould return and fall back to the original execve. This change itself\ndoes make sense together with a later change that actually modifies the\ncommand.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I6a9d7e31256063f3fe2883975fdc4cf486566b24\n"
    },
    {
      "commit": "a0ee7311ee0cb1167adb61b9e5c35dd946cf0b0d",
      "tree": "abdd410c8b9b69a061b0fbb779b5c836b10a9659",
      "parents": [
        "e567f1d3ad8a7527ca945afa55857b899cfa8d1d"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 08 21:07:23 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 09 18:48:27 2021 +0000"
      },
      "message": "Interceptor: add command logging functionality\n\nExample invocation\n   $ interceptor -l /tmp/log -- clang --version\n\nproduces a command log in /tmp/log.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I6fde3d60ebf184b2b96297baf504326e99ce9b80\n"
    },
    {
      "commit": "e567f1d3ad8a7527ca945afa55857b899cfa8d1d",
      "tree": "31840f126c460690a47eca9d279acf12898ed9fb",
      "parents": [
        "9937e62f7ece79809671446bc80b20cefa719675"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 08 20:39:35 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 09 18:46:21 2021 +0000"
      },
      "message": "Interceptor: add helper functionality for env and args\n\nAdd some convenience argument and environment parsing into standard\ncontainers to make them easier accessible. This might be bad for\nperformance and needs to be replaced later, but helps during initial\ndevelopment.\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: I6db40054c58a117dd5b3434bced85001ac037f81\n"
    },
    {
      "commit": "9937e62f7ece79809671446bc80b20cefa719675",
      "tree": "40db59253c7c1bb12eb80c866d55690dba9d39ba",
      "parents": [
        "fb70960ba1e6e57bd749652ff7b4a8d22bd5e69b"
      ],
      "author": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Mon Nov 08 17:33:02 2021 +0000"
      },
      "committer": {
        "name": "Matthias Maennich",
        "email": "maennich@google.com",
        "time": "Tue Nov 09 18:33:00 2021 +0000"
      },
      "message": "Interceptor: initial version\n\nThis adds the interceptor and its runtime library in a first draft\nversion.\n\nThe interceptor is typically called like\n\n $ interceptor [interceptor_args] [--] program [program_args]\n\nIt will locate the corresponding libinterceptor runtime library, set\nsome environment variables (mostly based on passed arguments) and spawn\nthe original process with the runtime library LD_PRELOAD\u0027ed.\n\nThe runtime library will intercept `execve` libc calls but nothing is\nhappening with them for now.\n\nA sample command that builds the Android common kernel:\n\n $ interceptor -- BUILD_CONFIG\u003dcommon/build.config.gki.aarch64 build/build.sh\n\nNote, setting environment variables after -- is supported (and\nencouraged).\n\nBug: 205577427\nSigned-off-by: Matthias Maennich \u003cmaennich@google.com\u003e\nChange-Id: Ia258a585078dd8bdda2799734cc0796e4d4cec82\n"
    },
    {
      "commit": "fb70960ba1e6e57bd749652ff7b4a8d22bd5e69b",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [],
      "author": {
        "name": "Inna Palant",
        "email": "ipalant@google.com",
        "time": "Tue Jun 02 16:57:20 2020 -0700"
      },
      "committer": {
        "name": "Inna Palant",
        "email": "ipalant@google.com",
        "time": "Tue Jun 02 16:57:20 2020 -0700"
      },
      "message": "Initial empty repository\n"
    }
  ]
}
