)]}'
{
  "log": [
    {
      "commit": "b2bd91c99b9435cf950ecf8efbb8439f31d3fcbc",
      "tree": "5d26d3943317c11c1cd913fc5640074a5bc7910b",
      "parents": [
        "3f5ea0b18207a81f58595b1a2e10e5ffb784b74f"
      ],
      "author": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Wed Jan 11 11:28:42 2012 +0800"
      },
      "committer": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Mon Nov 19 10:45:21 2012 -0800"
      },
      "message": "Represent git-submodule as nested projects, take 2\n\n(Previous submission of this change broke Android buildbot due to\n incorrect regular expression for parsing git-config output.  During\n investigation, we also found that Android, which pulls Chromium, has a\n workaround for Chromium\u0027s submodules; its manifest includes Chromium\u0027s\n submodules.  This new change, in addition to fixing the regex, also\n take this type of workarounds into consideration; it adds a new\n attribute that makes repo not fetch submodules unless submodules have a\n project element defined in the manifest, or this attribute is\n overridden by a parent project element or by the default element.)\n\nWe need a representation of git-submodule in repo; otherwise repo will\nnot sync submodules, and leave workspace in a broken state.  Of course\nthis will not be a problem if all projects are owned by the owner of the\nmanifest file, who may simply choose not to use git-submodule in all\nprojects.  However, this is not possible in practice because manifest\nfile owner is unlikely to own all upstream projects.\n\nAs git submodules are simply git repositories, it is natural to treat\nthem as plain repo projects that live inside a repo project.  That is,\nwe could use recursively declared projects to denote the is-submodule\nrelation of git repositories.\n\nThe behavior of repo remains the same to projects that do not have a\nsub-project within.  As for parent projects, repo fetches them and their\nsub-projects as normal projects, and then checks out subprojects at the\ncommit specified in parent\u0027s commit object.  The sub-project is fetched\nat a path relative to parent project\u0027s working directory; so the path\nspecified in manifest file should match that of .gitmodules file.\n\nIf a submodule is not registered in repo manifest, repo will derive its\nproperties from itself and its parent project, which might not always be\ncorrect.  In such cases, the subproject is called a derived subproject.\n\nTo a user, a sub-project is merely a git-submodule; so all tips of\nworking with a git-submodule apply here, too.  For example, you should\nnot run `repo sync` in a parent repository if its submodule is dirty.\n\nChange-Id: I4b8344c1b9ccad2f58ad304573133e5d52e1faef\n"
    },
    {
      "commit": "b148ac9d9aefb18baddbf9e28ed33b1b8c6e96e6",
      "tree": "64564abdc213acb66c83f6782566caf51e194678",
      "parents": [
        "a67df63ef18f7bcd1398dc5c3622c01c3fcad15d"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Nov 16 09:33:39 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sat Nov 17 12:40:42 2012 +0900"
      },
      "message": "Allow command options to be set from environment variables\n\nExtend the Command base class to allow options to be set from values\nin environment variables, if the user has not given the option on the\ncommand line and the environment variable is set.\n\nDerived classes of Command can override the implementation of the method\n_GetEnvironmentOptions to configure which of its options may be set from\nenvironment variables.\n\nChange-Id: I7c780bcf9644d6567893d9930984c054bce7351e\n"
    },
    {
      "commit": "1d947b30342163b723c96db563967323535fef45",
      "tree": "b6b02d02df01792b356b9e50ceeaadcaf3a2e8c5",
      "parents": [
        "2d113f35460051823ea54d61c5c939565518f969"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Oct 25 12:23:11 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Oct 30 10:28:20 2012 +0900"
      },
      "message": "Even more coding style cleanup\n\nFixing some more pylint warnings:\n\nW1401: Anomalous backslash in string\nW0623: Redefining name \u0027name\u0027 from outer scope\nW0702: No exception type(s) specified\nE0102: name: function already defined line n\n\nChange-Id: I5afcdb4771ce210390a79981937806e30900a93c\n"
    },
    {
      "commit": "cd81dd6403fc8dbe6ec5920c517d9083902c3c1f",
      "tree": "935f3f82d2eb32c06b812f66d56d138074309ef8",
      "parents": [
        "80d2ceb22267b7dc61b107934ff5264b6439a785"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:18:00 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:24:57 2012 -0700"
      },
      "message": "Revert \"Represent git-submodule as nested projects\"\n\nThis reverts commit 69998b0c6ff724bf620480140ccce648fec7d6a9.\nBroke Android\u0027s non-gitmodule use case.\n\nConflicts:\n\tproject.py\n\tsubcmds/sync.py\n\nChange-Id: I68ceeb63d8ee3b939f85a64736bdc81dfa352aed\n"
    },
    {
      "commit": "4f7bdea9d24c4eb52f83ada2b67b88ad67cb57a7",
      "tree": "49c93020cd026d13f43325b43d13266542cdc5a1",
      "parents": [
        "69998b0c6ff724bf620480140ccce648fec7d6a9"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Oct 22 12:50:15 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Oct 24 10:18:13 2012 +0900"
      },
      "message": "Add pylint configuration and instructions\n\npylint configuration file (.pylintrc) is added, and submission\ninstructions are updated to include pylint usage steps.\n\nDeprecated pylint suppression (`disable-msg`) is updated in a few\nmodules to make it work properly with the latest version (0.26).\n\nChange-Id: I4ec2ef318e23557a374ecdbf40fe12645766830c\n"
    },
    {
      "commit": "69998b0c6ff724bf620480140ccce648fec7d6a9",
      "tree": "b6f9c4c00b04a0f140074c4c2dba91ed4f055b11",
      "parents": [
        "5c6eeac8f0350fd6b14cf226ffcff655f1dd9582"
      ],
      "author": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Wed Jan 11 11:28:42 2012 +0800"
      },
      "committer": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Tue Oct 23 16:08:58 2012 -0700"
      },
      "message": "Represent git-submodule as nested projects\n\nWe need a representation of git-submodule in repo; otherwise repo will\nnot sync submodules, and leave workspace in a broken state.  Of course\nthis will not be a problem if all projects are owned by the owner of the\nmanifest file, who may simply choose not to use git-submodule in all\nprojects.  However, this is not possible in practice because manifest\nfile owner is unlikely to own all upstream projects.\n\nAs git submodules are simply git repositories, it is natural to treat\nthem as plain repo projects that live inside a repo project.  That is,\nwe could use recursively declared projects to denote the is-submodule\nrelation of git repositories.\n\nThe behavior of repo remains the same to projects that do not have a\nsub-project within.  As for parent projects, repo fetches them and their\nsub-projects as normal projects, and then checks out subprojects at the\ncommit specified in parent\u0027s commit object.  The sub-project is fetched\nat a path relative to parent project\u0027s working directory; so the path\nspecified in manifest file should match that of .gitmodules file.\n\nIf a submodule is not registered in repo manifest, repo will derive its\nproperties from itself and its parent project, which might not always be\ncorrect.  In such cases, the subproject is called a derived subproject.\n\nTo a user, a sub-project is merely a git-submodule; so all tips of\nworking with a git-submodule apply here, too.  For example, you should\nnot run `repo sync` in a parent repository if its submodule is dirty.\n\nChange-Id: I541e9e2ac1a70304272dbe09724572aa1004eb5c\n"
    },
    {
      "commit": "5c6eeac8f0350fd6b14cf226ffcff655f1dd9582",
      "tree": "3225695b9d2a97342a49127717ea5e2bc5935a63",
      "parents": [
        "e98607248eec2b149d84efe944c12cbef419b82e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Oct 11 16:44:48 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Oct 22 12:30:14 2012 +0900"
      },
      "message": "More coding style cleanup\n\nFixing more issues found with pylint.  Some that were supposed to\nhave been fixed in the previous sweep (Ie0db839e) but were missed:\n\nC0321: More than one statement on a single line\nW0622: Redefining built-in \u0027name\u0027\n\nAnd some more:\n\nW0631: Using possibly undefined loop variable \u0027name\u0027\nW0223: Method \u0027name\u0027 is abstract in class \u0027name\u0027 but is not overridden\nW0231: __init__ method from base class \u0027name\u0027 is not called\n\nChange-Id: Ie119183708609d6279e973057a385fde864230c3\n"
    },
    {
      "commit": "8a68ff96057ec58e524a3e41a2d8dca7b5d016bc",
      "tree": "22f6971e8d3c4a90d11d3704602d073a852328b4",
      "parents": [
        "e3b1c45aebed329cbc9ad172b1d8e812cf208117"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Sep 24 12:15:13 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Tue Oct 09 12:45:30 2012 +0200"
      },
      "message": "Coding style cleanup\n\nFix the following issues reported by pylint:\n\nC0321: More than one statement on a single line\nW0622: Redefining built-in \u0027name\u0027\nW0612: Unused variable \u0027name\u0027\nW0613: Unused argument \u0027name\u0027\nW0102: Dangerous default value \u0027value\u0027 as argument\nW0105: String statement has no effect\n\nAlso fixed a few cases of inconsistent indentation.\n\nChange-Id: Ie0db839e7c57d576cff12d8c055fe87030d00744\n"
    },
    {
      "commit": "bb1b5f5f863fca0e85764f5b35c117f5724d15c0",
      "tree": "0b6b8d0d6d027f2d0e0dd6fabdd4eafc6c919026",
      "parents": [
        "e2126652a3a1e08724a54091793bb29a79d31014"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Aug 13 13:11:18 2012 -0700"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 05 11:46:48 2012 -0700"
      },
      "message": "Allow projects to be specified as notdefault\n\nInstead of every group being in the group \"default\", every project\nis now in the group \"all\".   A group that should not be downloaded\nby default may be added to the group \"notdefault\".\n\nThis allows all group names to be positive (instead of removing groups\ndirectly in the manifest with -default) and offers a clear way of\nselecting every project (--groups all).\n\nChange-Id: I99cd70309adb1f8460db3bbc6eff46bdcd22256f\n"
    },
    {
      "commit": "c39864f5e12fa4a6d3f2cdb4921afc021406d106",
      "tree": "b8e5749072fb6e08c2f2f6f019aeb7532a1cccb3",
      "parents": [
        "5465727e538bcd77200f8b3c75f002367597fc51"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Apr 23 13:41:58 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Apr 23 13:43:41 2012 -0700"
      },
      "message": "Treat groups\u003d as default\n\nPrevious incarnations of groups support left \"groups\u003d\" in the\nrepo .config, which is now treated as \"delete all the projects\".\nTreat empty groups configuration the same as no groups\nconfiguration.\n\nChange-Id: I57dab8dac55bdbf4cc181e2748cd2e4e510764f5\n"
    },
    {
      "commit": "d21720db313369f25b99b4d2f3f87c8be46513d9",
      "tree": "a73e659e8fd18c7e3fc67880a1a9be8c2a409c86",
      "parents": [
        "971de8ea7b7e474a4d9253b6c9f47da3f1130973"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Apr 16 11:02:21 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 23 12:50:00 2012 -0700"
      },
      "message": "Add a --platform flag\n\nProjects may optionally specify their platform\n(eg, groups\u003d\"platform-linux\" in the manifest).\n\nBy default, repo will automatically detect the platform. However,\nusers may specify --platform\u003d[auto|all|linux|darwin].\n\nChange-Id: Ie678851fb2fec5b0938aede01f16c53138a16537\n"
    },
    {
      "commit": "971de8ea7b7e474a4d9253b6c9f47da3f1130973",
      "tree": "d8ac52741957b38d57d15f208e57b984d71ddc19",
      "parents": [
        "24c130884018364f91baa8de0ff3541f4c32d1bb"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Apr 16 10:36:08 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 23 12:39:05 2012 -0700"
      },
      "message": "Refine groups functionality\n\nEvery project is in group \"default\".  \"-default\" does not remove\nit from this project.  All group names specified in the manifest\nare positive names as opposed to a mix of negative and positive.\n\nSpecified groups are resolved in order.  If init is supplied with\n--groups\u003d\"group1,-group2\", the following describes the project\nselection when syncing:\n\n  * all projects in \"group1\" will be added, and\n  * all projects in \"group2\" will be removed.\n\nChange-Id: I1df3dcdb64bbd4cd80d675f9b2d3becbf721f661\n"
    },
    {
      "commit": "5acde75e5d70b323197ffb2c9d4fdea3612098f5",
      "tree": "e995a64614ce7406633ae6e99c2a0e6f86872e09",
      "parents": [
        "d67872d2f47b2f09a0e2aa4adfd62e6f69154c9b"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Mar 28 20:15:45 2012 -0700"
      },
      "committer": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 13 09:46:00 2012 -0700"
      },
      "message": "Add manifest groups\n\nAllows specifying a list of groups with a -g argument to repo init.\nThe groups act on a group\u003d attribute specified on projects in the\nmanifest.\nAll projects are implicitly labelled with \"default\" unless they are\nexplicitly labelled \"-default\".\nPrefixing a group with \"-\" removes matching projects from the list\nof projects to sync.\nIf any non-inverted manifest groups are specified, the default label\nis ignored.\n\nChange-Id: I3a0dd7a93a8a1756205de1d03eee8c00906af0e5\nReviewed-on: https://gerrit-review.googlesource.com/34570\nReviewed-by: Shawn Pearce \u003csop@google.com\u003e\nTested-by: Shawn Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "df14a70c4529821d7450303ec553a9f608af1656",
      "tree": "4631409d5610fb103912687dc4f8321d9b46f3a4",
      "parents": [
        "f18cb761731a791bf1b9ee8c6308bfce5c9d3e62"
      ],
      "author": {
        "name": "Anthony Newnam",
        "email": "anthony.newnam@garmin.com",
        "time": "Sun Jan 09 17:31:57 2011 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sun Jan 09 17:39:19 2011 -0800"
      },
      "message": "Make path references OS independent\n\nChange-Id: I5573995adfd52fd54bddc62d1d1ea78fb1328130\n(cherry picked from commit b0f9a02394779c1c9422a9649412c9ac5fb0f12f)\n\nConflicts:\n\n\tcommand.py\n"
    },
    {
      "commit": "db45da12089bf131579d100ff7990cbc18d07325",
      "tree": "c81dbff8a644272dc12cfcdc129ee1f0db3a559f",
      "parents": [
        "50fa1ac6db388c0aa16751b5ad69d296e5eea047"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 13:49:13 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 13:49:13 2009 -0700"
      },
      "message": "Add -p to `repo forall` to improve output formatting\n\nWhen trying to read log output from many projects at once it can\nbe difficult to make sense of which messages came from where.\n\nFor many professional developers it is common to want to view the\nlast week\u0027s worth of your work, so you can write a weekly summary\nof your activity for your status report.\n\nThis is easier with the new -p option:\n\n  repo forall -pc git log --reverse --since\u003d1.week.ago --author\u003dsop\n\nproduces a report of all commits written by me in the last week,\nformatted in a paged output display, with headers inserted in\nfront of each project\u0027s output.\n\nWhere this can be even more useful is with git log\u0027s pickaxe,\ne.g. now we can use:\n\n  repo forall -pc git log -Sbar v1.0..v1.1\n\nto locate all additions or removals of the symbol \u0027bar\u0027 since v1.0,\nup to and including v1.1.  Before displaying the matching commits in\na project, a project header is shown, giving the user some context\ninformation for the matching results.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "c95583bf4f17b8467f815b6391ffc6c7add08804",
      "tree": "c69bf8a061279b79326fb00f2197efcd8726864c",
      "parents": [
        "6a5644d392069b67f17c8ce6cb10f07cce71cc1c"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 03 17:47:06 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 03 17:47:06 2009 -0800"
      },
      "message": "Don\u0027t permit users to run repo status in a mirror client\n\nIf a client was created with \"repo init --mirror\" then there are\nno working directories present, and no files checked out.  Using\na command like \"repo status\" in this context makes no sense, and\nactually throws back a Pytyon traceback at the console when the\nunderlying commands fail out.\n\nWe now tag commands with the MirrorSafeCommand type if they are\nable to be executed within a mirror directory safely.  Using a\ncommand in a mirror which lacks this base class results in a\nuseful error letting you know the command isn\u0027t supported.\n\nBug: REPO-14\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "cf31fe9b4fb650b27e19f5d7ee7297e383660caf",
      "tree": "d04ca6a45d579dca5e5469606c48c405aee68f4b",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
