)]}'
{
  "log": [
    {
      "commit": "2da8492b9da69c54bb52cd7de9486e0985c7e984",
      "tree": "df1585f8e87ff8607c0ee6f19b326cacf74242fd",
      "parents": [
        "66fa73dd6e22839346531e341b2ca80726ab0979"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Jul 02 10:08:12 2020 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Sep 22 18:20:18 2020 -0700"
      },
      "message": "Add Providers to Blueprint\n\nProviders are a new concept for Blueprint, based on providers in Bazel:\nhttps://docs.bazel.build/versions/master/skylark/rules.html#providers\n\nProviders aim to simplify the interaction between modules by replacing\ntype asserting to arbitrary interfaces with requesting optional data\nobjects from modules.  This will also move Blueprint closer to supporting\nincremental analysis by serializing the providers and only rerunning\nthe analysis phase on modules whose inputs have changed.\n\nChange-Id: I39f5f78b372412a7dbf151ceccb3f917f6c874bf\n"
    },
    {
      "commit": "811381a585d30017e6f2df704d45e917d09879b8",
      "tree": "3d51259cbc63de272936595136833011a70ee1e5",
      "parents": [
        "87050d932769bb537d9546983c82ecce219cd7b2"
      ],
      "author": {
        "name": "Ulya Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Fri Sep 20 12:01:01 2019 +0100"
      },
      "committer": {
        "name": "Ulya Trofimovich",
        "email": "skvadrik@gmail.com",
        "time": "Fri Sep 20 23:58:23 2019 +0100"
      },
      "message": "Added VisitDirectDeps* methods to SingletonContext.\n\nA an example use case is generating the graph of module\ndependencies, where modules are vertices and dependencies\nare edges.\n\nThe patch was tested with a local implementation of such\na module in the Soong build system. The graph was generated\nfor all modules in the AOSP tree.\n"
    },
    {
      "commit": "7bcc256daced91c588fd03ad71f51d184ec44a1b",
      "tree": "a620a20e84593f9f6f2e9ed926fa785a9132f005",
      "parents": [
        "99bdb2ab4fd5168a71a20aecf10611425be47ec4"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon May 20 14:51:55 2019 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon May 20 15:08:39 2019 -0700"
      },
      "message": "Move module and singleton godoc from the implementation to the interface\n\nThe interface is visible in godoc, not the implementation, so\nmove the documentation onto the interface methods.\n\nTest: view godoc\nChange-Id: I3460003eed6bf57d8ae4dabe70ab306f049a0060\n"
    },
    {
      "commit": "818af3bfe0b42adada3a5cc00b49639e5991d170",
      "tree": "389fd3d93323850e94e2d59de821a8609cd0a0e9",
      "parents": [
        "19ef680bc46cdd26055fd3112776bba77c6e6292"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Mar 25 15:04:09 2019 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon May 20 14:58:06 2019 -0700"
      },
      "message": "Fix panic message in SingletonContext.VisitAllModules\n\nThe panic should be printing the module info string from the\nmoduleInfo, not trying to Stringify the Module interface.\n\nTest: manual\nChange-Id: I1a2b7c15c4216518c76b909b25d50ac2eb7d1baa\n"
    },
    {
      "commit": "9226d6c9f5c112afa678fbfdcb9528d82ef6b408",
      "tree": "fb3a8e104fbd8e3fe4839267d0fda59a61258723",
      "parents": [
        "d444506bf6383850531162839d09d854a4bba6e1"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Feb 25 18:07:44 2019 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Feb 26 10:15:40 2019 -0800"
      },
      "message": "Allow Context to query Singletons\n\nAdd Context.Singletons and Context.SingletonName to allow primary\nbuilders to query Singletons returned by all registered\nSingletonFactories.\n\nChange-Id: Iee85643dd47f7472e6bb5ae8004374bd6ea0419e\n"
    },
    {
      "commit": "7f90d170b3c70a6f5b5aba873e524a0522f2cee9",
      "tree": "45e31325995414effa2d69e22ec1179c40f3a3b3",
      "parents": [
        "0799fad550029be4109db6d81189edf20eb720c7"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Sep 19 13:37:29 2018 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Sep 19 14:03:30 2018 -0700"
      },
      "message": "Report panic context for SingletonContext.VisitAllModules\n\nIf a panic occurs in SingletonContext.VisitAllModules report the\nmodule that was being visited.\n\nChange-Id: Ia7fc07e2e33e9e3c0297903d3b06b7efb33f0105\n"
    },
    {
      "commit": "ab223a512bbf0e8ca3012a7425e15c0210c7b1a6",
      "tree": "edbab2f3b489fcbe39253db2c63f0d59b428d41e",
      "parents": [
        "9cbbb8b91d7642abd130af55f0b6b894ab707cac"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Jul 05 21:56:59 2018 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Jul 06 10:39:38 2018 -0700"
      },
      "message": "Run globs during earlier bootstrap phases\n\nInstead of sometimes re-running minibp/the primary builder during the\nnext phase, run bpglob earlier to check dependencies.\n\nWe\u0027ve run into issues where the environment is slightly different\nbetween bootstrapping phase and the main build phase. It\u0027s also a\nproblem because our primary builder (Soong) exports information used by\nanother tool (Kati) that runs in between the bootstrapping phases and\nthe main phase. When Soong would run in the main phase, it could get out\nof sync, and would require the build to be run again.\n\nTo do this, add a \"subninja\" include a build-globs.ninja file to each\nbuild.ninja file. The first time, this will be an empty file, but we\u0027ll\nalways run minibp / the primary builder anyway. When the builder runs,\nin addition to writing a dependency file, write out the\nbuild-globs.ninja file with the rules to run bpglob.\n\nSince bpglob may need to be run very early, before it would normally be\nbuilt, build it with microfactory.\n\nChange-Id: I89fcd849a8729e892f163d40060ab90b5d4dfa5d\n"
    },
    {
      "commit": "b6c90239d601e7903028e0561ba601bc55fcfcbe",
      "tree": "00b657549ffc465ec8f5dc1502a4ca06778a85eb",
      "parents": [
        "cd3b7aed33c64925b4771e9c6ed160b4e1042c61"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Feb 23 14:49:45 2018 -0800"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Feb 23 17:21:37 2018 -0800"
      },
      "message": "Append / to directories in Glob results\n\nThis makes it easy for users of Glob to detect whether the match is a\nfile or directory. Doing the check at this level means that the filelist\nfile used as a dependency will be updated if a directory is replaced\nwith a file of the same name, or vice versa.\n\nChange-Id: I79ebba39327218bcdcf50b393498306119de9d6c\n"
    },
    {
      "commit": "c58162079598e8ede70554b5c474b5f313cdb7b9",
      "tree": "f6620ee31e00b208f8ab93232340f1b579b756fe",
      "parents": [
        "7a88d0db4d06b39809e6915f27063bd704a948e7"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Dec 11 14:39:10 2017 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Dec 11 16:31:41 2017 -0800"
      },
      "message": "Fix import list in singleton_ctx.go\n\nOtherwise my editor keeps fixing it for me.\n\nChange-Id: I2795a26b9a4f0dd7bf20edd146fc28425a60e89c\n"
    },
    {
      "commit": "b519a7e1b69b6b658d8a0b7171323ffc03965ded",
      "tree": "20db4d2e796137460ac4b815e49c05d171c9cac7",
      "parents": [
        "2eeb7ee14b6d8e1ec497cfa514cf22c1b4772c39"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Feb 01 13:21:35 2017 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Feb 02 16:48:06 2017 -0800"
      },
      "message": "Add globbing to filesystem mocking\n\nAdd globbing to filesystem mocking so that more code can be tested\nagainst the mock.  Also moves the filesystem mock to pathtools,\nand renames pathtools.GlobWithExcludes to pathtools.Glob, replacing\nthe existing pathtools.Glob.\n\nTest: blueprint tests\nChange-Id: I722df8121bc870c4a861d7c249245c57dcb607be\n"
    },
    {
      "commit": "127d2eae8b7e706540e40c0422bfd41b063ca3e7",
      "tree": "64137bae7834b5439dd499ea76c29d6fbefc77ce",
      "parents": [
        "b589835c0dbaf1ad0e830c6043a0481ca916b084"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Nov 01 11:10:51 2016 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Nov 03 13:54:03 2016 -0700"
      },
      "message": "Import globbing from Soong\n\nAdd globbing with dependency checking to blueprint.  Calling\nModuleContext.GlobWithDeps or SingletonContext.GlobWithDeps will return\na list of files that match the globs, while also adding efficient\ndependencies to rerun the primary builder if a file that matches the\nglob is added or removed.\n\nAlso use the globbing support for optional_subdirs\u003d, subdirs\u003d and build\u003d\nlines in blueprints files.  The globbing slightly changes the behavior\nof subname\u003d lines, it no longer falls back to looking for a file called\n\"Blueprints\".  Blueprint files that need to include a subdirectory with\na different name can use build\u003d instead of subdir\u003d to directly include\nthem.  The Blueprints file is updated to reset subname\u003d\"Blueprints\" in\ncase we want to include subdirectories inside blueprint and the primary\nbuilder has changed the subname.\n\nAlso adds a new test directory that contains a simple primary builder\ntree to test regeneration for globbing, and runs the tests in travis.\n\nChange-Id: I83ce525fd11e11579cc58ba5308d01ca8eea7bc6\n"
    },
    {
      "commit": "c98e55b0af69dfdf8e45dd11f13724430422a53a",
      "tree": "0392fcfae8fa4e08f0c6a8a2f37ee529b8b7ba8c",
      "parents": [
        "15371ad6522eaa0a35340c6acec3c2b6dc311281"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Jul 25 15:51:50 2016 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Jul 25 15:51:50 2016 -0700"
      },
      "message": "Expose ModuleType to Singletons\n\nIn order to implement some build statistics in Soong, expose the module\ntype (the string used to define the module) to singletons.\n\nChange-Id: I441d12c7782bcf338b3654cfe907b8d2a7253594\n"
    },
    {
      "commit": "4bb62762eb31e1e97f3347ba389f04d394010614",
      "tree": "c38180b8b81d77b44a37cce16b4f2dd2a89f48da",
      "parents": [
        "eba92c77e03dfb078e7da5f292060655d648281f"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Jan 14 15:42:54 2016 -0800"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Mar 28 14:14:15 2016 -0700"
      },
      "message": "Add SingletonContext.Eval to evaluate ninja strings\n\nOur use case is to write out some configuration variables to give to our\nlegacy build system. But in order to do that, we either need to keep a\nGo copy of all of the configuration, and still have all the calls to\nconvert them to ninja variables, or evaluate our ninja variables.\n\nChange-Id: If9dda305ed41bc8aabe57dd750a74d8b9af1d1a4\n"
    },
    {
      "commit": "0aa6a5f0ad42debe76a90173de7d10f1ecda3ba0",
      "tree": "cb45623aebbf2dea0379f4e3091f17943aef6a8c",
      "parents": [
        "ea5995439c9a228ec496a5d12901b8b0bc27ccab"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Jan 07 13:43:09 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Jan 07 17:24:26 2016 -0800"
      },
      "message": "Catch panics in build logic\n\nCatch panics in the build logic in order to provide extra data on when\nthe panic occurred, for example which module had GenerateBuildActions\ncalled on it.\n"
    },
    {
      "commit": "8c602f7f16ed571918eba4e8e0e0630b3ecd55be",
      "tree": "bf0c3751337c3346056489776428cce5d200f2c2",
      "parents": [
        "eb97a6e7a1afa6d4817545bec3304e906ecc35f7"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Dec 17 18:02:11 2015 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Dec 17 18:02:58 2015 -0800"
      },
      "message": "Add ModuleSubDir to Context and SingletonContext\n\nSingletons may need ModuleSubDir, for example to implement a stable sort\non modules.  Add ModuleSubDir to SingletonContext and Context.\n"
    },
    {
      "commit": "265d92c7fa10ca0545215f18403bc1c4880334fc",
      "tree": "2fb64d165aa8cd05e79f88238eddb69dccde25ab",
      "parents": [
        "e8b63ad172f5ce5316cbf0193c9fcaab7575aadf"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Dec 09 18:06:23 2015 -0800"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Dec 09 18:06:23 2015 -0800"
      },
      "message": "Add SingletonContext.Failed()\n\nIdentical to ModuleContext.Failed(), just returns whether there has been\nan error added to the context.\n"
    },
    {
      "commit": "aeffbf776abff483634d1fc1bba0abce15b6d72e",
      "tree": "f66d827ac5177a7b5dabe2d1137581f816a4488d",
      "parents": [
        "6afb72ff1bde8ad53bb0da4b85fa15e73e1bb1fe"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Nov 25 15:29:32 2015 -0800"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Nov 30 17:03:34 2015 -0800"
      },
      "message": "Allow wrapping of PackageContext\n\nTurn PackageContext into an interface so that build systems can wrap it\nto add more custom helpers.\n\nThis does introduce an API change, though it should be fairly simple.\nNewPackageContext used to provide an opaque *PackageContext struct, now it\nprovides a PackageContext interface.\n\nChange-Id: I383c64a303d857ef5e0dec86ad77f791ba4c9639\n"
    },
    {
      "commit": "a259945b744f6f367c24ff01594412ee8147d454",
      "tree": "8cfd9fb6fdbae411b88554e987cfdb19f49bd21b",
      "parents": [
        "01739302cbf3c26e28bd8dcecc7dc90ae0bbdfc0"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Nov 18 16:01:01 2015 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Nov 18 16:06:19 2015 -0800"
      },
      "message": "Use context builddir for removing abandoned files\n\nRemoving abandoned files needs to know where the .ninja_log file is\nstored.  Export the ninja builddir value from Context and use it to\ndetermine the .ninja_log path in any stage.\n\nThe ninja builddir (where ninja stores its .ninja_log and .ninja_deps\nfiles) and the bootstrap.BuildDir (where build output files are written)\nare distinct, so to reduce confusion replace SetBuildDir with\nSetNinjaBuildDir.\n"
    },
    {
      "commit": "24ad58713895346828bd2d3d78a88d5bf7d12efb",
      "tree": "8263283b19b0f93e35f5db3e5732819936093bf7",
      "parents": [
        "f5df83e7ee38c58a6b6bd78bb2940e4bb0e2e3e5"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Nov 17 16:22:29 2015 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Nov 17 16:47:50 2015 -0800"
      },
      "message": "Add variant methods to SingletonContext and Context\n\nAdd VisitAllModuleVariants, PrimaryModule, and FinalModule to\nSingletonContext so singletons and tools can deal with modules with\nmultiple variants.\n"
    },
    {
      "commit": "4572edddfa0d6288bdf71208e29d9f99f58ae583",
      "tree": "ef54ec11adffa1b9ed3efdb963771eb664fef2f1",
      "parents": [
        "4adc8194905e72bcc240ef5bf5bbb2175c329c16"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed May 13 14:36:24 2015 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Jun 26 10:51:44 2015 -0700"
      },
      "message": "Add self-documenting support\n\nThe primary builder will now generate a rule to call itself with\n--docs\u003d.bootstrap/docs/\u003cname\u003e.html to produce an automatically\ngenerated documentation file.\n\nThe documentation generation process is:\n - Call each factory once to get empty property structs associated\n   with the module type\n - Use reflection to determine the names of the type of each property\n   struct\n - Use the bootstrap_go_package modules from reading the Blueprints files\n   to find the source files for each Go package used to build the primary\n   builder\n - Use the go/parser module to find the type declaration for each\n   property struct\n - Extract comments for the property struct and each property declaration\n - Format all the comments into HTML\n\nChange-Id: Icae9307cc10549a30bfc14d6922824099de5a9b0\n"
    },
    {
      "commit": "ed342d983cbb5b51187ad2ff60c2ba39d533ca47",
      "tree": "851502ddd1fd8d8d3374399bc7b19e0f88c1ab6c",
      "parents": [
        "6134a5c66a32a15c48ef9f760e756febde0335e5"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Mar 11 00:57:25 2015 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Mar 12 17:22:18 2015 -0700"
      },
      "message": "Move values from moduleGroup to moduleInfo\n\nMove most of the contents of moduleGroup into moduleInfo.  This will\neventually reduce moduleGroup to a simple list of variants of the\nsame module.\n\nChange-Id: I4289eb9953509751d7637558cd6db73373ccdf78\n"
    },
    {
      "commit": "8e0c51192a64a869779ce4441c931f7a5c826857",
      "tree": "44ba80318d7256061ac9a29e19e451cb62a5faf1",
      "parents": [
        "3e8e74f276eafaf709e8e4c4291431a1d4ccb7e2"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@google.com",
        "time": "Fri Jan 23 14:15:10 2015 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@google.com",
        "time": "Fri Jan 23 14:23:27 2015 -0800"
      },
      "message": "Add license headers and LICENSE file\n\nChange-Id: I6f7c7374093c0745ee4aa677480376a06648b358\n"
    },
    {
      "commit": "3e8e74f276eafaf709e8e4c4291431a1d4ccb7e2",
      "tree": "2599d6ac3c3810a41a87a709a004fc1fab4a7b74",
      "parents": [
        "6bb4af9e208ea9769ae52933e8d9f42a4e75938e"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@google.com",
        "time": "Fri Jan 23 13:38:48 2015 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@google.com",
        "time": "Fri Jan 23 14:23:27 2015 -0800"
      },
      "message": "Move blueprint/* up a directory\n\nMake integrating with go tools easier by putting the blueprint package\nfiles in the top level directory of the git project instead of in a\nsubdirectory called blueprint.\n\nChange-Id: I35c144c5fe7ddf34e478d0c47c50b2f6c92c2a03\n"
    }
  ]
}
