)]}'
{
  "log": [
    {
      "commit": "3c0358060786e9a6fcd6b3bbb9c01c887946bdd6",
      "tree": "fb698c2a8b2f52d3029aa00cd754dfec260b00a9",
      "parents": [
        "5ea32d135963da5542b78895f95332c6a17bbe11"
      ],
      "author": {
        "name": "Alexander Bird",
        "email": "Alexander.Bird.42@gmail.com",
        "time": "Fri Sep 11 13:48:10 2015 -0400"
      },
      "committer": {
        "name": "Alexander Bird",
        "email": "alexander.bird.42@gmail.com",
        "time": "Fri Sep 11 14:11:30 2015 -0400"
      },
      "message": "fixed typo in gitc_init.py help output\n\nChange-Id: I86459bf63297487457d6c4c995dfd1e63133ec53\n"
    },
    {
      "commit": "5ea32d135963da5542b78895f95332c6a17bbe11",
      "tree": "832e03decd9f0d7b412b111e00bd28b89c1c9ea6",
      "parents": [
        "5cc384034d144c339d2e5822c36c5ca4529ac487"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Sep 08 13:27:20 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 09 20:50:40 2015 -0700"
      },
      "message": "GITC: Always update the gitc manifest from the repo manifest\n\nThis way any changes made to the main manifest are reflected in the gitc\nmanifest. It\u0027s also necessary to use both manifests to sync since the\ninformation required to update the gitc manifest is actually in the repo\nmanifest.\n\nThis also fixes a few issues that came up when testing. notdefault\ngroups weren\u0027t being saved to the gitc manifest in a method that matched\n\u0027sync\u0027. The merge branch wasn\u0027t always being set to the correct value\neither.\n\nChange-Id: I435235cb5622a048ffad0059affd32ecf71f1f5b\n"
    },
    {
      "commit": "037552333182497e9e38bff984de44df0f93e54b",
      "tree": "4833639da39e34dc4388f06b1eccb541d74589db",
      "parents": [
        "250303b437855c2b50d052a05a08ed517423af8b"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 09 21:43:32 2015 +0000"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 09 21:43:32 2015 +0000"
      },
      "message": "Revert \"GITC: Always update the gitc manifest from the repo manifest\"\n\nThis reverts commit 250303b437855c2b50d052a05a08ed517423af8b.\n\nChange-Id: I1fd8af20f802553151aacb953c913f3305ca6057\n"
    },
    {
      "commit": "250303b437855c2b50d052a05a08ed517423af8b",
      "tree": "ae9df65083e7e0e53d3438adb752cad2dbe27cb5",
      "parents": [
        "ba72d8301e33344b3b11e286619c99568c37db1a"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Sep 08 13:27:20 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 09 12:35:56 2015 -0700"
      },
      "message": "GITC: Always update the gitc manifest from the repo manifest\n\nThis way any changes made to the main manifest are reflected in the gitc\nmanifest. It\u0027s also necessary to use both manifests to sync since the\ninformation required to update the gitc manifest is actually in the repo\nmanifest.\n\nThis also fixes a few issues that came up when testing. notdefault\ngroups weren\u0027t being saved to the gitc manifest in a method that matched\n\u0027sync\u0027. The merge branch wasn\u0027t always being set to the correct value\neither.\n\nChange-Id: I5dbc850dd73a9fbd10ab2470ae4c40e46ff894de\n"
    },
    {
      "commit": "ba72d8301e33344b3b11e286619c99568c37db1a",
      "tree": "4833639da39e34dc4388f06b1eccb541d74589db",
      "parents": [
        "9ff2ece6abc5d0d4a69c2f086209f107fd4f04be"
      ],
      "author": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Thu Sep 03 10:47:44 2015 -0700"
      },
      "committer": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Thu Sep 03 10:47:44 2015 -0700"
      },
      "message": "GITC: Fix repo sync.\n\nFixing http://b/23785024 by calling os.getcwd() because variable\ncwd no longer exists.\n\nChange-Id: I21ff7d059e072f9f60726db76b67587a92c878ad\n"
    },
    {
      "commit": "9ff2ece6abc5d0d4a69c2f086209f107fd4f04be",
      "tree": "1daabfe078e59b38ba0a1fdf9f6b0c83bcf7eba9",
      "parents": [
        "2487cb7b2c41506c8ef900dba735876b01c67eab"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Aug 31 15:45:06 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Sep 01 12:23:56 2015 -0700"
      },
      "message": "gitc: Improve help visibility\n\nThis improves the visiblity of gitc-init if we can get the gitc config,\nand hides it otherwise.\n\nChange-Id: I82830b0b07c311e8c74397ba79eb4c361f8b6fb5\n"
    },
    {
      "commit": "8ce5041596ef486510245946b7c6c68ec59add29",
      "tree": "77ba4fc3346af1f6a54d4018eae12d719671b532",
      "parents": [
        "f7a51898d3c989321c29f4ebaf7c3e9d106bc509"
      ],
      "author": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Fri Aug 28 14:25:44 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Aug 31 21:39:17 2015 +0000"
      },
      "message": "GITC: Pull GITC Manifest Dir from the config.\n\nUpdates the repo launcher and gitc_utils to pull the manifest\ndirectory location out of the gitc config file.\n\nChange-Id: Id08381b8a7d61962093d5cddcb3ff6afbb13004b\n"
    },
    {
      "commit": "f7a51898d3c989321c29f4ebaf7c3e9d106bc509",
      "tree": "600309dc1799351b36a9cc588c27b8856a808f6a",
      "parents": [
        "b9a1b73425773dc97843f92aeee9c57c9a08c0f7"
      ],
      "author": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Thu Aug 27 11:44:42 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Aug 28 18:09:05 2015 +0000"
      },
      "message": "GITC: Expand relative remote URLs.\n\nThe GITC filesystem does not understand relative URLs for remotes,\nso now if a remote uses a relative URL, it will be be expanded to\nbe relative to the manifest URL.\n\nChange-Id: Ie1210758560aeb1934da3f71496aaf19c2728214\n"
    },
    {
      "commit": "b9a1b73425773dc97843f92aeee9c57c9a08c0f7",
      "tree": "592a3655e92af8c7265ba07e29ba35aa1a1a36a8",
      "parents": [
        "dc2545cad60d7e8bae894f5d60eaeb3cff7485ae"
      ],
      "author": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Thu Aug 20 12:19:28 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Aug 28 10:53:05 2015 -0700"
      },
      "message": "GITC: Add repo start support.\n\nAdd repo start support for GITC checkouts. If the user is in\nthe GITC FS view, they can now run repo start to check out\nthe sources and create a new working branch.\n\nWhen \"repo start\" is called on a GITC project, the revision\ntag is set to an empty string and saved in a new tag:\nold-revision. This tells the GITC filesystem to display the\nlocal copy of the sources when being viewed. The local copy\nis created by pulling the project sources and the new branch\nis created based off the original project revision.\n\nUpdated main.py to setup each command\u0027s gitc_manifest when\nappropriate.\n\nUpdated repo sync\u0027s logic to sync opened projects and\nupdating the GITC manifest file for the rest.\n\nChange-Id: I7e4809d1c4fc43c69b26f2f1bebe45aab0cae628\n"
    },
    {
      "commit": "3010e5ba646f938a856fc286439a3df34ed9a53f",
      "tree": "24ae4bcff8eb49c0e4a046664262bed5cfe3e6df",
      "parents": [
        "ba7bc738c1044b68574a28423751156003400362"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Aug 20 10:09:20 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Aug 20 10:29:37 2015 -0700"
      },
      "message": "Smartsync: Don\u0027t fail if there isn\u0027t a cookiefile\n\nChange-Id: I434a259f43ca9808e88051ac8ba865c519a24702\n"
    },
    {
      "commit": "ba7bc738c1044b68574a28423751156003400362",
      "tree": "b79f78944b488436f09490ac2ef4f40c227e250a",
      "parents": [
        "f4599a2a3de5025088e4248ea47f62d5edba24fd"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 16:55:42 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 17:05:17 2015 +0900"
      },
      "message": "Sync: Refactor netrc parsing\n\nDon\u0027t emit a message when the netrc file doesn\u0027t exist or couldn\u0027t\nbe opened.\n\nInstead of trying to unpack the result of info.authenticators() and\ncatching the resulting TypeError when it\u0027s None, first store it to\na local and only unpack it if it has a value.\n\nAlso remove an unused import.\n\nChange-Id: I5c404d91e48c261c1ab850c3e5f040c4f4c235cb\n"
    },
    {
      "commit": "f4599a2a3de5025088e4248ea47f62d5edba24fd",
      "tree": "6090440db55a6c10395ace33c8791a218c12154e",
      "parents": [
        "022a1d4e6ec574d6b21febde8d2088393f42c5fb"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 16:45:39 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 16:45:39 2015 +0900"
      },
      "message": "gitc_init: Remove unused import\n\nAlso add missing newline at the end of the file.\n\nChange-Id: I206e6c4b033d223eb0ff5824ecbf6fd98c39c918\n"
    },
    {
      "commit": "7c9263bce09725227dc518ee298b350becbdf26e",
      "tree": "c2547dbfca738c2da6763fb5fe59195f4ee10658",
      "parents": [
        "dab9e99f0f6d4f82e0e61b37396f7c0915a8d508",
        "0745bb26571e0cf097baebd48761b8cd743ec7fc"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Aug 19 23:36:35 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 23:36:35 2015 +0000"
      },
      "message": "Merge \"Support smart-sync through persistent-http[s]\""
    },
    {
      "commit": "0745bb26571e0cf097baebd48761b8cd743ec7fc",
      "tree": "b8d83d1ec06cd3d430dfc2f5447276e38e2f86f7",
      "parents": [
        "5d0c3a614edc3f3d5967cfc07c7981da7013ea91"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Aug 17 13:41:45 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Aug 19 10:22:11 2015 -0700"
      },
      "message": "Support smart-sync through persistent-http[s]\n\nUse the same cookies and proxy that git traffic goes through for\npersistent-http[s] to support authentication for smart-sync.\n\nChange-Id: I20f4a281c259053a5a4fdbc48b1bca48e781c692\n"
    },
    {
      "commit": "bdb5271de3fafb9fbec3fde0e8e95e5b061ab0f5",
      "tree": "73e247db933aebfce5a63dbce6a1966c09cef3e0",
      "parents": [
        "5d0c3a614edc3f3d5967cfc07c7981da7013ea91"
      ],
      "author": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Mon Aug 10 13:23:23 2015 -0700"
      },
      "committer": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Tue Aug 18 11:59:10 2015 -0700"
      },
      "message": "GITC: Add repo sync support.\n\nAdd repo sync support for GITC checkouts. If the user is in the\nGITC client directory they can still pull the sources as normal\nif they pass in the --force-gitc argument. Otherwise the user\nshould call repo sync in the GITC view to update the user\u0027s\nremote view. (This works because .repo in the GITC view will\nlink to .repo in the client config directory.)\n\nPart of the support for this change is the refactoring of GITC\nrelated code into gitc_utils.py.\n\nChange-Id: I2636aaa50b450b6f091309db8dd0e8f4dbdad579\n"
    },
    {
      "commit": "5d0c3a614edc3f3d5967cfc07c7981da7013ea91",
      "tree": "8429fdb99432ff237a45a79d7ae126ad8098fa6c",
      "parents": [
        "2635c0e3b6d0fb7a48d892fe9528197eb13bc98b",
        "1efc2b4a0157b5c23317e5e7a51643016133cff5"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Aug 12 23:25:20 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 12 23:25:20 2015 +0000"
      },
      "message": "Merge \"GITC: Add gitc-init subcommand to repo.\""
    },
    {
      "commit": "1efc2b4a0157b5c23317e5e7a51643016133cff5",
      "tree": "e1d51a6b93948da37f888adf89206c658193f2d5",
      "parents": [
        "abaa7f312f1b6c8d11d7c757fe909900ce5788b5"
      ],
      "author": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Wed Aug 05 15:04:22 2015 -0700"
      },
      "committer": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Wed Aug 12 16:22:14 2015 -0700"
      },
      "message": "GITC: Add gitc-init subcommand to repo.\n\nAdds the new gitc-init command to set up a GITC client. Gitc-init\nsets up the client directory and calls repo init within it. Once\nthe repo is initialized, then generates a GITC manifest file\nby using git ls-remote on each project and retrieving the HEAD SHA\nto use as the revision attribute.\n\nGitc-init inherits from and has all the options as repo init.\n\nChange-Id: Icd7e47e90eab752a77de7c80ebc98cfe16bf6de3\n"
    },
    {
      "commit": "43322283dc97b12e6d5b03c27fb780b0110f889a",
      "tree": "d34bfa5366fffa045f8d82158b19a5add4c588b9",
      "parents": [
        "7e59de2bcc8513ba28701062be2637d90cb6eeff",
        "0369a069ade1602879c16dd33dc592bed3f17c0f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Aug 05 01:01:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 05 01:01:02 2015 +0000"
      },
      "message": "Merge \"Support filtering by group on forall and list subcmd\""
    },
    {
      "commit": "555be547903a3077de8fa4e0d3dfd3d9202ddc10",
      "tree": "d5ba08eeee80b766acab489be275071cc3648d07",
      "parents": [
        "abaa7f312f1b6c8d11d7c757fe909900ce5788b5",
        "c5cd433daf310694d1435fe30e22e1ad2217b1ab"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Jul 31 17:06:23 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 31 17:06:23 2015 +0000"
      },
      "message": "Merge \"Emit project info in case of sync exception.\""
    },
    {
      "commit": "c5cd433daf310694d1435fe30e22e1ad2217b1ab",
      "tree": "4d0901ab306c62ce6394f290249445cbd0548d08",
      "parents": [
        "53e902a19b0b80e07ac55966d13c5c84c5b0e8ce"
      ],
      "author": {
        "name": "Dan Sandler",
        "email": "dsandler@android.com",
        "time": "Fri Jul 31 09:37:53 2015 -0400"
      },
      "committer": {
        "name": "Dan Sandler",
        "email": "dsandler@google.com",
        "time": "Fri Jul 31 14:03:50 2015 +0000"
      },
      "message": "Emit project info in case of sync exception.\n\nPreviously repo would only print the failing project path if\nSync_NetworkHalf returned false/empty, but if it threw an\nexception the print() was never called.\n\nChange-Id: I58c41de43930df5e34b21561c205e062a72e290f\n"
    },
    {
      "commit": "0369a069ade1602879c16dd33dc592bed3f17c0f",
      "tree": "96d4f4970bc5d0b3ba7fcdca5946e47e170ff2bc",
      "parents": [
        "abaa7f312f1b6c8d11d7c757fe909900ce5788b5"
      ],
      "author": {
        "name": "Graham Christensen",
        "email": "graham@grahamc.com",
        "time": "Wed Jul 29 17:02:54 2015 -0500"
      },
      "committer": {
        "name": "Graham Christensen",
        "email": "graham@grahamc.com",
        "time": "Thu Jul 30 12:59:35 2015 -0500"
      },
      "message": "Support filtering by group on forall and list subcmd\n\nEnable operating against groups of repositories. As it stands, it isn\u0027t\ncompatible with `-r/--regex`.\n\n`repo forall -g groupname -c pwd` will  run `pwd` for all projects in\ngroupname.\n\n`repo forall -g thisgroup,-butnotthisone -c pwd` will  run `pwd` for all\nprojects in `thisgroup` but not `butnotthisone`.\n\n`repo list -g groupname -n` will list all the names of repos in\n`groupname`.\n\nChange-Id: Ia75c50ce52541d1c8cea2874b20a4db2e0e54960\n"
    },
    {
      "commit": "abaa7f312f1b6c8d11d7c757fe909900ce5788b5",
      "tree": "2eba7244f267c9df33510a820b5353da1d7722cd",
      "parents": [
        "7cccfb2cf0ed1ed14f6b8a5bdb36459ebcb4db5a"
      ],
      "author": {
        "name": "Kevin Degi",
        "email": "kdegi@codeaurora.org",
        "time": "Wed Nov 12 11:27:45 2014 -0700"
      },
      "committer": {
        "name": "Kevin Degi",
        "email": "kdegi@codeaurora.org",
        "time": "Wed Jul 29 14:44:46 2015 -0600"
      },
      "message": "Add option to correct gitdir when syncing\n\nIn some cases, a user may wish to continue with a sync even though\nit would require overwriting an existing git directory. This behavior\nis not safe as a default because it could result in the loss of some\nuser data, but as an optional flag it allows the user more flexibility.\n\nTo support this, add a --force-sync flag to the sync command that will\nattempt to overwrite the existing git dir if it is specified and the\nexisting git dir points to the wrong obj dir.\n\nChange-Id: Ieddda8ad54e264a1eb4a9d54881dd6ebc8a03833\n"
    },
    {
      "commit": "57f43f49448a9eb255eb2452e902d3f26e77aca3",
      "tree": "cb7b72228ea340463e3471c59b59e8b570112006",
      "parents": [
        "4e16c249817aa3b14a5d1ce767687f1d82c41249",
        "17af578d72e89016fa94d4dc97d58ceaa4a7c531"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Jul 29 02:11:55 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 29 02:11:55 2015 +0000"
      },
      "message": "Merge \"Prevent repo info from crashing when default element doesn\u0027t exist.\""
    },
    {
      "commit": "17af578d72e89016fa94d4dc97d58ceaa4a7c531",
      "tree": "7d909c1477586149b3a24ffe5f50eb31cc20c420",
      "parents": [
        "c5ceeb16258d5d787845840036c57f9fdfdcad34"
      ],
      "author": {
        "name": "Cassidy Burden",
        "email": "cburden@codeaurora.org",
        "time": "Mon Jun 29 14:51:35 2015 -0700"
      },
      "committer": {
        "name": "Cassidy Burden",
        "email": "cburden@codeaurora.org",
        "time": "Mon Jul 27 16:56:31 2015 -0700"
      },
      "message": "Prevent repo info from crashing when default element doesn\u0027t exist.\n\nrepo info will crash when using a manifest with no default element despite\ndefault being an optional element. Output nothing for \"Manifest Branch\" if no\ndefault element exists (or if no default revision exists).\n\nChange-Id: I7ebffa2408863837ba980f0ab6e593134400aea9\n"
    },
    {
      "commit": "6944cdb8d1b4765b4e9e6b3f3a09b65495da7ff3",
      "tree": "e911b1fb2196cf9c3bbe3ad9658d613db9dd6452",
      "parents": [
        "59b417493e0b0a18ba11f9d214308e82872c38e6"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu May 07 14:39:44 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Jul 06 16:18:06 2015 +0900"
      },
      "message": "forall: use smart sync override manifest if it exists\n\nIf a workspace is synced with the -s or -t option, the included projects\nmay be different to those in the original manifest. However, when using\nthe forall command, the list of the projects from the original manifest\nis used.\n\nIf the smart sync manifest file exists, use it to override the original\nmanifest.\n\nChange-Id: Iaefcbe148d2158ac046f158d98bbd8b5a5378ce7\n"
    },
    {
      "commit": "59b417493e0b0a18ba11f9d214308e82872c38e6",
      "tree": "fce1b823a59a6870dcd813aa6a167a30c6b5bcbb",
      "parents": [
        "30d13eea862bdc9df1b0bcd32318f24250dd96ea"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu May 07 14:36:09 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Jul 06 16:18:06 2015 +0900"
      },
      "message": "sync: Remove smart sync override manifest when not in smart sync mode\n\nWhen syncing with the -s or -t option, a smart_sync_override.xml file\nis created. This file is left in the file system when syncing again\nwithout the -s or -t option.\n\nRemove the smart sync override manifest, if it exists, when not using\nthe -s or -t option.\n\nChange-Id: I697a0f6405205ba5f84a4d470becf7cd23c07b4b\n"
    },
    {
      "commit": "30d13eea862bdc9df1b0bcd32318f24250dd96ea",
      "tree": "0013a0160ef6a57eb474cf746d0f8466133ddf40",
      "parents": [
        "727cc3e32424886b90df2094063549189cbbb390"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu May 07 15:01:15 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Jul 06 16:18:06 2015 +0900"
      },
      "message": "forall: Don\u0027t try to get lrev of projects in mirror workspace\n\ngit rev-parse fails for projects that don\u0027t have an explicit revision\nspecified, and don\u0027t have a branch of the same name as the default\nrevision. This can be the case in a workspace synced with the smart\nsync (-s) or smart tag (-t) option.\n\nChange-Id: I19bfe9fe7396170379415d85f10f6440dc6ea08f\n"
    },
    {
      "commit": "727cc3e32424886b90df2094063549189cbbb390",
      "tree": "59247c708be1db7c94f8a5ba6196d9a823d96cf8",
      "parents": [
        "c5ceeb16258d5d787845840036c57f9fdfdcad34"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu May 07 14:16:49 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Jul 06 16:18:06 2015 +0900"
      },
      "message": "sync: Improve error message when writing smart sync manifest fails\n\nThe error message only states that writing the manifest failed.\n\nInclude the exception message, so it\u0027s easier to track down the reason\nthat the write failed.\n\nChange-Id: I06e942c48a19521ba45292199519dd0a8bdb1de7\n"
    },
    {
      "commit": "c5ceeb16258d5d787845840036c57f9fdfdcad34",
      "tree": "613698381def3d70986cef771ba6226003845a75",
      "parents": [
        "185307d1dd1e63a8cf139c55f26895a6b378d43b",
        "db75704bfc12546bfbce96aea0be5c283df18314"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jun 25 14:53:46 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jun 25 14:53:46 2015 +0000"
      },
      "message": "Merge \"Fix \u0027repo cherry-pick\u0027 to avoid hanging on commit-msg update.\""
    },
    {
      "commit": "db75704bfc12546bfbce96aea0be5c283df18314",
      "tree": "5944a458effaa5f8f7297176d2667d87db1b8c67",
      "parents": [
        "35de228f331101ba17bbc658c3cd910e54725517"
      ],
      "author": {
        "name": "Than McIntosh",
        "email": "thanm@google.com",
        "time": "Mon Jun 01 11:17:13 2015 -0400"
      },
      "committer": {
        "name": "Than McIntosh",
        "email": "thanm@google.com",
        "time": "Mon Jun 22 08:00:20 2015 -0400"
      },
      "message": "Fix \u0027repo cherry-pick\u0027 to avoid hanging on commit-msg update.\n\nAfter performing the actual cherry-pick operation, the code\nin cherry_pick.py opens a pipe to \u0027git commit -F\u0027 to rewrite the commit\nmessage, emits the fixed-up commit msg to the pipe, then waits\nfor \u0027git commit\u0027 to complete. The child \u0027git\u0027 process winds up\nhanging while reading from the pipe, however, since the parent\nprocess still has it open. To fix the hang, change the parent process\nto close its end of the pipe after it has emitted the message.\n\nChange-Id: I5929371e69a5b076f09009d00d40a2c72ac8ac33\n"
    },
    {
      "commit": "c116f94261cf0e6d33b3910b68d08d3b0e4bccdd",
      "tree": "ceef154d627d37f33eed5e945c58133263a95ebd",
      "parents": [
        "7993f3cdda0c66d97aae5c4570921130023e6048"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Jun 03 17:29:29 2015 +0100"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jun 04 00:34:19 2015 +0000"
      },
      "message": "forall: setenv, only encode val if encode exists\n\nChange-Id: I655e3043d0118c4e929897d3a51e5e013e5758dc\n"
    },
    {
      "commit": "7993f3cdda0c66d97aae5c4570921130023e6048",
      "tree": "80bf292fbb28bb219c684087a8a5512731748aeb",
      "parents": [
        "b1d1fd778d5d3d3217023df8b428c5b7fa22a337"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Jun 03 17:21:56 2015 +0100"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jun 04 00:33:33 2015 +0000"
      },
      "message": "init: don\u0027t call urllib.parse\n\nit\u0027s actually urllib.parse.urlparse\n\nChange-Id: Ie3532e54625e887c8682d92b932ea21a629e8d60\n"
    },
    {
      "commit": "31a7be561ef34c134447d92a3d391b17ecd7c790",
      "tree": "afaefd046551596817595c4dbd10534461cc0d7d",
      "parents": [
        "35de228f331101ba17bbc658c3cd910e54725517"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed May 13 00:04:36 2015 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed May 13 11:09:38 2015 -0700"
      },
      "message": "Catch exceptions in project list generator\n\nIf the generator that produces per-project worker arguments raises an\nexception it triggers python bug http://bugs.python.org/issue8296.\nRewrite the generator expression as a generator function, and catch\nExceptions and KeyboardInterrupts to end the iteration.\n\nAlso add a pool worker initializer to disable SIGINT to prevent\nKeyboardInterrupts inside multiprocessing.Pool in the worker threads\ncausing the same problem.\n\nFixes easy-to-reproduce hangs when hitting ctrl-c during\nrepo forall -c echo\n\nChange-Id: Ie4a65b3e1e07a64ed6bb6ff20f3912c4326718ca\n"
    },
    {
      "commit": "b155354034a7ac18d83ab28cc3756dc36591435f",
      "tree": "f273424f6b01482197113508d11a841f75818f57",
      "parents": [
        "4ccad7554b958c701653c41a72442cccf301e71a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Sep 04 21:28:09 2014 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Apr 30 14:29:02 2015 +0000"
      },
      "message": "Add option on sync to avoid fetching from remotes for existing sha1\n\nIn 2fb6466f795eb30c1dfa598501f5b5d2981e6a5f an optimisation was\nadded to avoid fetching from remotes if the project is fixed to\na revision and the revision is already available locally.\n\nThis causes problems for users who expect all objects to be\nfetched by default.\n\nChange the logic so that the optimized behaviour is only enabled if\nan option is explicitly given to repo sync.\n\nChange-Id: I3b2794ddd8e0071b1787e166463cd8347ca9e24f\n"
    },
    {
      "commit": "a38769cda88fce2e96c02021060a4c7d2cb96cc8",
      "tree": "9f437217354bcfbd9df1c06e6566c6a04a34c70b",
      "parents": [
        "44859d02672be7509b8fe9b2d444aa239a849af5",
        "6ad6dbefe79196f0d7bb717fa9279837083e9113"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Apr 08 17:59:56 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 08 17:59:58 2015 +0000"
      },
      "message": "Merge \"forall: use a generator to map the Pool\""
    },
    {
      "commit": "6ad6dbefe79196f0d7bb717fa9279837083e9113",
      "tree": "a2c8b2c570bf83bca1d08b6e7c0394369d8c1565",
      "parents": [
        "33fe4e99f95125a0083e97c4c143d1fb5134cf36"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Apr 08 13:22:30 2015 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Apr 08 13:22:34 2015 +0100"
      },
      "message": "forall: use a generator to map the Pool\n\nBefore, a list was generated, which is why there was a massive delay.\n\nUsing a generator will allow processes to start straight away\n\nChange-Id: Ia325b0b340cc328c08c9bcc92a6709bbdaf6a664\n"
    },
    {
      "commit": "b51f07cd0643388ffe2cefb28899429d9e1131fc",
      "tree": "f0bdd78523b44eb01597369b1f3ad8ac9f914b8e",
      "parents": [
        "04f2f0e1860d10a4cc2a7b8ef7cc1665f51094b9"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Sat Apr 04 21:18:59 2015 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Sat Apr 04 21:21:49 2015 +0100"
      },
      "message": "status: lose dependence on StringIO\n\nbuflist was being used, which isn\u0027t available in Python 3.\n\n`Execute` was using StringIO to capture the output of `PrintWorkTreeStatus`,\nonly to redirect it straight to stdout.\nInstead, just let `PrintWorkTreeStatus` do it\u0027s own thing directly to stdout.\n\nfor handling `_FindOrphans`, we swap StringIO for a list. Nothing was done\nthat needed a a file like object.\n\nChange-Id: Ibdaae137904de66a5ffb590d84203ef0fe782d8b\n"
    },
    {
      "commit": "9371979628a945a1caf526aeff84a1ac68a22efe",
      "tree": "dddfeb5a602f799f31a8d62ac5feb72fa2fb06ab",
      "parents": [
        "20860042617d43ed192d60659cd92c71ea251519"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Tue Mar 17 11:29:58 2015 -0700"
      },
      "committer": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Tue Mar 17 11:29:58 2015 -0700"
      },
      "message": "Revert \"Implementation of manifest defined githooks\"\n\nThis reverts commit 38e4387f8eb8cffd6359d726c38a7c524fef07e3.\n\nA \"repo init\" followed by \"repo sync\" is meant to be as safe as\n\"git clone\".  In particular it should not run arbitrary code provided\nby the manifest owner.\n\nIt would still be nice to have support for manifest-defined git hooks\n--- they\u0027d just need a prompt like the upload RepoHook has.  Hopefully\na later change can bring them back.\n\nChange-Id: I5ecd90fb5c2ed64f103d856d1ffcba38a47b062d\nSigned-off-by: Jonathan Nieder \u003cjrn@google.com\u003e\n"
    },
    {
      "commit": "85e82670315cc2a6ac020430ae3f7e46862ff5d9",
      "tree": "e1cec59a11dafef7dfc301651a5fe0fe5b721ef1",
      "parents": [
        "e30f46b957c9c192f09a4907e3e7e802c9b782f8",
        "38e4387f8eb8cffd6359d726c38a7c524fef07e3"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Mar 05 20:52:29 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 05 20:52:30 2015 +0000"
      },
      "message": "Merge \"Implementation of manifest defined githooks\""
    },
    {
      "commit": "38e4387f8eb8cffd6359d726c38a7c524fef07e3",
      "tree": "897b7f640822d21019d740fd45aa564fba6a18f9",
      "parents": [
        "ee6908442102008df57b46271323d9b06d5fdfbf"
      ],
      "author": {
        "name": "Jimmie Wester",
        "email": "jimmie.wester@stericsson.com",
        "time": "Wed Oct 24 14:35:05 2012 +0200"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Feb 03 16:01:15 2015 +0900"
      },
      "message": "Implementation of manifest defined githooks\n\nWhen working within a team or corporation it is often\nuseful/required to use predefined git templates. This\nchange teaches repo to use a per-remote git hook template\nstructure.\n\nThe implementation is done as a continuation of the\nexisting projecthook functionality. The terminology is\ntherefore defined as projecthooks.\n\nThe downloaded projecthooks are stored in the .repo\ndirectory as a metaproject separating them from the users\nproject forest.\n\nThe projecthooks are downloaded and set up when doing a\nrepo init and updated for each new repo init.\n\nWhen downloading a mirror the projecthooks gits are\nnot added to the bare forest since the intention is to\nensure that the latest are used (allows for company policy\nenforcement).\n\nThe projecthooks are defined in the manifest file in the\nremote element as a subnode, the name refers to the\nproject name on the server referred to in the remote.\n\u003cremote name\u003d\"myremote ..\u003e\n   \u003cprojecthook name\u003d\"myprojecthookgit\" revision\u003d\"myrevision\"/\u003e\n\u003c/remote\u003e\n\nThe hooks found in the projecthook revision supersede\nthe stock hooks found in repo. This removes the need for\nupdating the projecthook gits for repo stock hook changes.\n\nChange-Id: I6796b7b0342c1f83c35f4b3e46782581b069a561\nSigned-off-by: Patrik Ryd \u003cpatrik.ryd@stericsson.com\u003e\nSigned-off-by: Ian Kumlien \u003cian.kumlien@gmail.com\u003e\n"
    },
    {
      "commit": "f2fad61bde10e5ffad3a5d683af90b1b35f9d99b",
      "tree": "fe93ea6e0cea10a8bc01a07507656b8203a6b2f6",
      "parents": [
        "ee6908442102008df57b46271323d9b06d5fdfbf"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jan 29 14:36:28 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jan 29 14:36:28 2015 +0900"
      },
      "message": "Add missing documentation of --current-branch option on sync command\n\nChange-Id: I72d6e3d51241148c1df97bbad26338debb1fcb4e\n"
    },
    {
      "commit": "7bdac71087a51be4655a0280a719a0b401614e47",
      "tree": "cdfd914ce5b503a828fc2c32d17f11f3464f8737",
      "parents": [
        "497bde4de500416fb428a8cd57b9c62708349924"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Jul 16 12:56:40 2014 +0100"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jan 22 04:20:21 2015 +0000"
      },
      "message": "pylint fixes for project.py\n\nFix all the formatting warnings and unused variables\n\nChange-Id: I17d88a23572303879530077f3a80451de5417fbb\n"
    },
    {
      "commit": "5fb8ed217c1f7ddfdaa54bdb8384888998734a84",
      "tree": "f02063743a63964d827ae19fbfab78665cff1d64",
      "parents": [
        "7e12e0a2faf5e572a196e90581c1215cc8dc7551"
      ],
      "author": {
        "name": "Max Liu",
        "email": "idiotmax@gmail.com",
        "time": "Mon Jun 23 14:48:16 2014 +0800"
      },
      "committer": {
        "name": "Hsing-Chieh Liu",
        "email": "idiotmax@gmail.com",
        "time": "Mon Oct 27 12:25:05 2014 +0000"
      },
      "message": "If revision is sha hash and dest-branch is defined, use it for starting branch\n\nChange-Id: I538c7d216f72b87629b61aee547d374a398c95da\n"
    },
    {
      "commit": "b4e50e67e84cccd34a9759d2414c7215d657659a",
      "tree": "0b6cca46b9bbab16a56e92778d6abc2c4bf5ee16",
      "parents": [
        "0936aeab2ca7553a40d6cc7aa9a13bb083949e10",
        "14e134da02f3c050c9a6ec31242b45e27bdf4821"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 21 18:03:53 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 21 18:03:55 2014 +0000"
      },
      "message": "Merge \"upload: report names of uncommitted files\""
    },
    {
      "commit": "0936aeab2ca7553a40d6cc7aa9a13bb083949e10",
      "tree": "8463bfb8a61d8539fa374fd0fafcface41e817fb",
      "parents": [
        "5cf16607d33268ab0320a886c4a7b5e052684fa4"
      ],
      "author": {
        "name": "Scott Anderson",
        "email": "camel@droidmod.org",
        "time": "Fri Oct 17 15:37:12 2014 -0400"
      },
      "committer": {
        "name": "Scott Anderson",
        "email": "camel@droidmod.org",
        "time": "Fri Oct 17 15:45:57 2014 -0400"
      },
      "message": "Exit 1 if repo download -c fails\n\nChange-Id: I6985548bf87032b121eeccf858c4eeca1a60598c\n"
    },
    {
      "commit": "14e134da02f3c050c9a6ec31242b45e27bdf4821",
      "tree": "f6c417df0dfbb5799a2406fbae206be64a0d3214",
      "parents": [
        "5cf16607d33268ab0320a886c4a7b5e052684fa4"
      ],
      "author": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Sun Oct 05 15:40:30 2014 -0700"
      },
      "committer": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@google.com",
        "time": "Tue Oct 14 11:20:05 2014 -0700"
      },
      "message": "upload: report names of uncommitted files\n\nWhen there are uncommitted files in the tree, \u0027repo upload\u0027 stops to\nask if it is OK to continue, but does not report the actual names of\nuncommitted files.\n\nThis patch adds plumbing to have the outstanding file names reported\nif desired.\n\nBUG\u003dNone\nTEST\u003dverified that \u0027repo upload\u0027 properly operates with the following\n    conditions present in the tree:\n    . file(s) modified locally\n    . file(s) added to index, but not committed\n    . files not known to git\n    . no modified files (the upload proceeds as expected)\n\nChange-Id: If65d5f8e8bcb3300c16d85dc5d7017758545f80d\nSigned-off-by: Vadim Bendebury \u003cvbendeb@chromium.org\u003e\nSigned-off-by: Vadim Bendebury \u003cvbendeb@google.com\u003e\n"
    },
    {
      "commit": "5cf16607d33268ab0320a886c4a7b5e052684fa4",
      "tree": "e69e4474efeef2fb9a30cae9426aad0eb4ac958b",
      "parents": [
        "c190b98ed55040c58d880d575c32e9c01044378c"
      ],
      "author": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Thu Oct 02 10:13:38 2014 -0700"
      },
      "committer": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Thu Oct 02 10:17:44 2014 -0700"
      },
      "message": "Allow selection of a target when using smart sync.\n\nChange-Id: I02a24471b9b62dbba3773f22a289825bc566acd9\n"
    },
    {
      "commit": "bf0b0cbc2f40572bc0a72f187647c6409b92928c",
      "tree": "c31b3bf438d210a353839b80ee05b4f44a5c2aed",
      "parents": [
        "3a10968a702a2b80ba03e18739d28af40d219912",
        "588142dfcb464a0db9ebc7b323ab2338d8f730de"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Aug 26 21:11:39 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 26 21:11:40 2014 +0000"
      },
      "message": "Merge \"Provide detail print-out when not all projects of a branch are current.\""
    },
    {
      "commit": "588142dfcb464a0db9ebc7b323ab2338d8f730de",
      "tree": "4a2bace371ca6800e19e293a9681acc15a6369f4",
      "parents": [
        "666d534636d262cbfd971509dd0f0be0cddb2e11"
      ],
      "author": {
        "name": "Etan Cohen",
        "email": "etancohen@google.com",
        "time": "Wed Jul 09 21:33:31 2014 -0700"
      },
      "committer": {
        "name": "Etan Cohen",
        "email": "etancohen@google.com",
        "time": "Fri Jul 11 10:56:03 2014 -0700"
      },
      "message": "Provide detail print-out when not all projects of a branch are current.\n\nWhen current is \"split\" (i.e. some projects are current while others are not):\n- Disable \u0027not in\u0027 printout (i.e. will print out all projects)\n- Disable printing of multiple projects on one line\n- Print current projects in green, non-current in white\n\nSince using color to differentiate current from non-current in \"split\" cases:\n- In non-split cases also print out project names in color (green for current\n  white for non-current)\n\nChange-Id: Ia6b826612c708447cecfe5954dc767f7b2ea2ea7\n"
    },
    {
      "commit": "a7694985683a36377841bb365c3a49551fe88a8d",
      "tree": "f64cadc58a0be0c73247f6929279985e0ac645dd",
      "parents": [
        "80b87fe6c1a018dacd0f1b57c6cef9889fd66463"
      ],
      "author": {
        "name": "Takeshi Kanemoto",
        "email": "takeshi.kanemoto@sonymobile.com",
        "time": "Mon Apr 14 17:36:57 2014 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Jun 24 01:02:54 2014 +0000"
      },
      "message": "Add --jobs option to forall subcommand\n\nEnable \u0027--jobs\u0027 (\u0027-j\u0027) option in the forall subcommand. For -jn\nwhere n \u003e 1, the \u0027-p\u0027 option can no longer guarantee the\ncontinuity of console output between the project header and the\noutput from the worker process.\n\nSIG_INT is sent to all worker processes upon keyboard interrupt\n(Ctrl+C).\n\nBug: Issue 105\nChange-Id: If09afa2ed639d481ede64f28b641dc80d0b89a5c\n"
    },
    {
      "commit": "dd7aea6c11e63749c6b46876ba5c902fd50a65a3",
      "tree": "70aed88036c151f038a01676d803e7c219a951e8",
      "parents": [
        "5196805fa28aa8873f76b2baa7b0fd52ec52d915",
        "d792f7928dc32d69b8075e2c499767796ccca7de"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed May 07 18:20:31 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 07 18:20:32 2014 +0000"
      },
      "message": "Merge \"Define unicode as str if using Python 3\""
    },
    {
      "commit": "85b24acd6a11af3d84cc71fc35ebdb6d3c78065f",
      "tree": "ec326002ea5e985a4f1f5cd5e9f8f002dcd75236",
      "parents": [
        "2cd1f0452eb746ae727218f5dbda0fd1ae0b2e34"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Tue May 06 15:57:48 2014 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed May 07 10:46:24 2014 +0100"
      },
      "message": "Use JSON instead of pickle\n\nUse JSON as it is shown to be much faster than pickle.\nAlso clean up the loading and saving functions.\n\nChange-Id: I45b3dee7b4d59a1c0e0d38d4a83b543ac5839390\n"
    },
    {
      "commit": "2cd1f0452eb746ae727218f5dbda0fd1ae0b2e34",
      "tree": "dd8ee9139452c6eb3c759f199cab78d762545cdf",
      "parents": [
        "65e3a78a9e9336dae396cef09b8b23621f4bdc6e"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Mon May 05 21:24:05 2014 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed May 07 08:44:20 2014 +0100"
      },
      "message": "Use next(iterator) rather than iterator.next()\n\niterator.next() was replaced with iterator.__next__() in Python 3.\nUse next(iterator) instead which will select the correct method for\nreturning the next item.\n\nChange-Id: I6d0c89c8b32e817e5897fe87332933dacf22027b\n"
    },
    {
      "commit": "d792f7928dc32d69b8075e2c499767796ccca7de",
      "tree": "1cd152dff6aefed74bef54353d2bd6ef09e2fabc",
      "parents": [
        "666d534636d262cbfd971509dd0f0be0cddb2e11"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Mon May 05 22:01:07 2014 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Tue May 06 20:38:51 2014 +0100"
      },
      "message": "Define unicode as str if using Python 3\n\nThe unicode object was renamed to str in Python 3\n\nChange-Id: I1e4972fb07b313d3462587b3059bb3638d779625\n"
    },
    {
      "commit": "e81bc030bba802627fd34af472fc0cf451e17c1d",
      "tree": "2d899160e958b00b330e7a50927f1a6cd16eb526",
      "parents": [
        "26c45a79586da17fe2e26a427acb56c81fb3bcc5"
      ],
      "author": {
        "name": "Mitchel Humpherys",
        "email": "mitchelh@codeaurora.org",
        "time": "Mon Mar 31 11:36:56 2014 -0700"
      },
      "committer": {
        "name": "Mitchel Humpherys",
        "email": "mitchelh@codeaurora.org",
        "time": "Mon Mar 31 13:08:26 2014 -0700"
      },
      "message": "Add total count and iteration count to forall environment\n\nFor long-running forall commands sometimes it\u0027s useful to know which\niteration is currently running. Add REPO_I and REPO_COUNT environment\nvariables to reflect the current iteration count as well as the total\nnumber of iterations so that the user can build simple status\nindicators.\n\nExample:\n\n    $ repo forall -c \u0027echo $REPO_I / $REPO_COUNT; git gc\u0027\n    1 / 579\n    Counting objects: 41, done.\n    Delta compression using up to 8 threads.\n    Compressing objects: 100% (19/19), done.\n    Writing objects: 100% (41/41), done.\n    Total 41 (delta 21), reused 41 (delta 21)\n    2 / 579\n    Counting objects: 53410, done.\n    Delta compression using up to 8 threads.\n    Compressing objects: 100% (10423/10423), done.\n    Writing objects: 100% (53410/53410), done.\n    Total 53410 (delta 42513), reused 53410 (delta 42513)\n    3 / 579\n    ...\n\nChange-Id: I9f28b0d8b7debe423eed3b4bc1198b23e40c0c50\nSigned-off-by: Mitchel Humpherys \u003cmitchelh@codeaurora.org\u003e\n"
    },
    {
      "commit": "093fdb6587bba081c4d34eb9ea500149b1090280",
      "tree": "a8edab76db87f3ff70536e01b11bc5c034a0729e",
      "parents": [
        "2fb6466f795eb30c1dfa598501f5b5d2981e6a5f"
      ],
      "author": {
        "name": "bijia",
        "email": "bijia@xiaomi.com",
        "time": "Thu Nov 28 09:19:22 2013 +0800"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Mar 04 00:51:30 2014 +0000"
      },
      "message": "Add reviewers automatically from project\u0027s git config\n\nThe `review.URL.autocopy` setting sends email notification to the\nnamed reviewers, but does not add them as reviewer on the uploaded\nchange.\n\nAdd a new setting `review.URL.autoreviewer`.  The named reviewers\nwill be added as reviewer on the uploaded change.\n\nChange-Id: I3fddfb49edf346f8724fe15b84be8c39d43e7e65\nSigned-off-by: bijia \u003cbijia@xiaomi.com\u003e"
    },
    {
      "commit": "724aafb52d546b23658e517278e4d93ec351dbaf",
      "tree": "9f1e19526e4df072490516046e4c9f2f9072b033",
      "parents": [
        "ccd218cd8f6eeb4dab94b22cec6812d7abb7c814",
        "89ece429fbb3047eabe9e8eb3df3076d74926eb3"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Feb 28 21:16:32 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 28 21:16:32 2014 +0000"
      },
      "message": "Merge \"Clean up duplicate logic in subcmds/sync.py.\""
    },
    {
      "commit": "dd6542268a59834ecff573de974d788f11af775d",
      "tree": "e014028b17f04c230bb8de690d701c2b10a1d93e",
      "parents": [
        "baca5f7e88e07c86f402ae7423bb3171a33688e3"
      ],
      "author": {
        "name": "Julien Campergue",
        "email": "julien.campergue@parrot.com",
        "time": "Thu Jan 09 16:21:37 2014 +0100"
      },
      "committer": {
        "name": "Julien Campergue",
        "email": "julien.campergue@parrot.com",
        "time": "Mon Feb 17 11:20:11 2014 +0000"
      },
      "message": "Add the \"diffmanifests\" command\n\nThis command allows a deeper diff between two manifest projects.\nIn addition to changed projects, it displays the logs of the\ncommits between both revisions for each project.\n\nChange-Id: I86d30602cfbc654f8c84db2be5d8a30cb90f1398\nSigned-off-by: Julien Campergue \u003cjulien.campergue@parrot.com\u003e\n"
    },
    {
      "commit": "89ece429fbb3047eabe9e8eb3df3076d74926eb3",
      "tree": "955edd4f6d2d94a13b53d0b35cf23e5f9ada9652",
      "parents": [
        "565480588d2bff4205b437862505e77382189811"
      ],
      "author": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Thu Jan 09 18:51:58 2014 -0800"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Feb 14 16:14:32 2014 +0000"
      },
      "message": "Clean up duplicate logic in subcmds/sync.py.\n\nThe fetch logic is now shared between the jobs \u003d\u003d 1 and\njobs \u003e 1 cases. This refactoring also fixes a bug where\nopts.force_broken was not honored when jobs \u003e 1.\n\nChange-Id: Ic886f3c3c00f3d8fc73a65366328fed3c44dc3be"
    },
    {
      "commit": "1829101e285cf7956d045cf7a04a8adb7f4c0109",
      "tree": "ab68a895f67489ee207b4cb340f7010d75c34bb0",
      "parents": [
        "1966133f8e82971f2e247a8579735a3b2f19301d"
      ],
      "author": {
        "name": "Rob Ward",
        "email": "robert.ward114@googlemail.com",
        "time": "Sun Feb 02 11:42:05 2014 +0000"
      },
      "committer": {
        "name": "Rob Ward",
        "email": "robert.ward114@googlemail.com",
        "time": "Tue Feb 11 18:19:04 2014 +0000"
      },
      "message": "Add error message for download -c conflicts\n\nCurrently if you run repo download -c on a change and the cherry-pick\nruns into a merge conflict a Traceback is produced:\n\nrob@rob-i5-lm ~/Programming/repo_test/repo1 $ repo download -c repo1 3/1\nFrom ssh://rob-i5-lm:29418/repo1\n * branch            refs/changes/03/3/1 -\u003e FETCH_HEAD\nerror: could not apply 0c8b474... 2\nhint: after resolving the conflicts, mark the corrected paths\nhint: with \u0027git add \u003cpaths\u003e\u0027 or \u0027git rm \u003cpaths\u003e\u0027\nhint: and commit the result with \u0027git commit\u0027\nTraceback (most recent call last):\n  File \"/home/rob/Programming/git-repo/main.py\", line 408, in \u003cmodule\u003e\n    _Main(sys.argv[1:])\n  File \"/home/rob/Programming/git-repo/main.py\", line 384, in _Main\n    result \u003d repo._Run(argv) or 0\n  File \"/home/rob/Programming/git-repo/main.py\", line 143, in _Run\n    result \u003d cmd.Execute(copts, cargs)\n  File \"/home/rob/Programming/git-repo/subcmds/download.py\", line 90, in Execute\n    project._CherryPick(dl.commit)\n  File \"/home/rob/Programming/git-repo/project.py\", line 1943, in _CherryPick\n    raise GitError(\u0027%s cherry-pick %s \u0027 % (self.name, rev))\nerror.GitError: repo1 cherry-pick 0c8b4740f876f8f8372bbaed430f02b6ba8b1898\n\nThis amount of error message is confusing to users and has the side effect\nof the git message telling you the actual issue being ignored.\n\nThis change introduces a message stating that the cherry-pick couldn\u0027t\nbe completed removing the Traceback.\n\nTo reproduce the issue create a change that causes a conflict with one currently\nin review and use repo download -c to cherry-pick the conflicting change.\n\nChange-Id: I8ddf4e0c8ad9bd04b1af5360313f67cc053f7d6a\n"
    },
    {
      "commit": "094cdbe090a18c35fdcfb463435d793cc0239e83",
      "tree": "e664b3febe4d8da1161b9e8e8ecc3a825b42aaa1",
      "parents": [
        "148a84de0ca7f828564f80cbe2bace33f295e65f"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 15:09:59 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 15:17:09 2014 -0800"
      },
      "message": "Add wrapper module\n\nThis takes the wrapper importing code from main.py and moves it into\nits own module so that other modules may import it without causing\ncircular imports with main.py.\n\nChange-Id: I9402950573933ed6f14ce0bfb600f74f32727705\n"
    },
    {
      "commit": "f2fe2d9b865f0122589d329d356644a80233c770",
      "tree": "5c111489118204fbef44bf065b854e84ded390dc",
      "parents": [
        "c9877c7cf677bc3db18e9003271dfd72383aa9f7"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jan 29 13:53:43 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jan 29 13:57:22 2014 -0800"
      },
      "message": "Properly iterate through values\n\nthe value of Manifest.projects has changed from being the dictionary\nto the values of the dictionary.  Here we handle this change\ncorrectly on a PostRepoUpgrade.\n\nFrom a `git diff v1.12.7 -- manifest_xml.py`:\n+  @property\n   def projects(self):\n     self._Load()\n-    return self._projects\n+    return self._paths.values()\n\nself._paths does contain the projects according to this line of\nmanifest_xml.py:\n484      self._paths[project.relpath] \u003d project\n\nChange-Id: I141f8d5468ee10dfb08f99ba434004a307fed810\n"
    },
    {
      "commit": "f1f1137d619dfffe23fd15b8754d067fe1e353b8",
      "tree": "60f10a782ac29a83c64f71ce41db9baa9d1d93d6",
      "parents": [
        "f77ef2edb097280d39b420655bcc465bfb73de3c",
        "011d4f426c21a745387e62e6d67ddd73cd6ef44e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Jan 14 00:41:35 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 14 00:41:35 2014 +0000"
      },
      "message": "Merge \"Don\u0027t backtrace when current branch is not uploadable.\""
    },
    {
      "commit": "e695338e21080d3cbe20935db572e4cd0c7a620c",
      "tree": "cc525f53929fa4ea24f108d24545c68c7c6cb5ba",
      "parents": [
        "bd80f7eedd5a74f6c5fad745091dcda53a6415bf",
        "8d20116038ff78b22069dd4e993b5819775f03d1"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Jan 10 01:20:12 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 10 01:20:13 2014 +0000"
      },
      "message": "Merge \"repo: Support multiple branches for the same project.\""
    },
    {
      "commit": "011d4f426c21a745387e62e6d67ddd73cd6ef44e",
      "tree": "a2f54bbc268e84c7207f1aa87110c7db1c8a548d",
      "parents": [
        "53d6a7b8955e9377cc0a12206be357e7936621b1"
      ],
      "author": {
        "name": "Warren Turkal",
        "email": "wt@ooyala.com",
        "time": "Wed Nov 27 16:20:57 2013 -0800"
      },
      "committer": {
        "name": "Warren Turkal",
        "email": "wt@ooyala.com",
        "time": "Wed Dec 11 23:24:01 2013 -0800"
      },
      "message": "Don\u0027t backtrace when current branch is not uploadable.\n\nThe backtrace currently occurs when one uses the \"--cbr\" argument with\nthe repo upload subcommand if the current branch is not tracking an\nupstream branch. There may be other cases that would backtrace as well,\nbut this is the only one I found so far.\n\nChange-Id: Ie712fbb0ce3e7fe3b72769fca89cc4c0e3d2fce0\n"
    },
    {
      "commit": "335f5ef4ad25a85c69fe6d8c848c5d1d447e22c8",
      "tree": "6a64a34ce5063d8d255c7840e167db2484e68c9a",
      "parents": [
        "61df418c599a0359b33b8a65a12660023fc37a2a"
      ],
      "author": {
        "name": "Julien Campergue",
        "email": "julien.campergue@parrot.com",
        "time": "Wed Oct 16 11:02:35 2013 +0200"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Dec 10 08:27:07 2013 +0000"
      },
      "message": "Add --archive option to init to sync using git archive\n\nThis significantly reduces sync time and used brandwidth as only\na tar of each project\u0027s revision is checked out, but git is not\naccessible from projects anymore.\n\nThis is relevant when git is not needed in projects but sync\nspeed/brandwidth may be important like on CI servers when building\nseveral versions from scratch regularly for example.\n\nArchive is not supported over http/https.\n\nChange-Id: I48c3c7de2cd5a1faec33e295fcdafbc7807d0e4d\nSigned-off-by: Julien Campergue \u003cjulien.campergue@parrot.com\u003e\n"
    },
    {
      "commit": "d5a5b19efd2291914bcb861d527ae74e620a9d37",
      "tree": "9a1f10516792d6973449cab97f1f28ccfd655e7a",
      "parents": [
        "0eb35cbe5096128e4a760aca6842ecdbea5baf1a"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Thu Nov 21 19:15:30 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Thu Nov 21 19:16:08 2013 +0530"
      },
      "message": "Remove trailing whitespace\n\nChange-Id: I56bcb559431277d40070fa33c580c6c3525ff9bc\n"
    },
    {
      "commit": "0eb35cbe5096128e4a760aca6842ecdbea5baf1a",
      "tree": "6134f979145140346b3eeeacfd12cbd6572f32d3",
      "parents": [
        "ce201a5311c2fe90dce479ee12c078cd26ccc0c4"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Nov 19 18:46:29 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "chirayudesai1@gmail.com",
        "time": "Thu Nov 21 06:03:22 2013 +0000"
      },
      "message": "Fix some python3 encoding issues\n\n* Add .decode(\u0027utf-8\u0027) where needed\n* Add \u0027b\u0027 to `open` where needed, and remove where unnecessary\n\nChange-Id: I0f03ecf9ed1a78e3b2f15f9469deb9aaab698657"
    },
    {
      "commit": "fbd3f2a10bf4ddd1f001543c6262c6866a84f0a1",
      "tree": "998e83b44047d48430711b3a918905a2b04dd45b",
      "parents": [
        "37128b6f709410763f85d112a1a3e6f9e42e1338"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 15 12:59:00 2013 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 15 12:59:00 2013 -0700"
      },
      "message": "Only check merge destination if it isn\u0027t None\n\nChange-Id: Ifb1dcd07142933489e93a1f4f03e38289087b609\n"
    },
    {
      "commit": "37128b6f709410763f85d112a1a3e6f9e42e1338",
      "tree": "b87eceeed61ef08a77e6ded4989ad46cff2ce0b0",
      "parents": [
        "143b4cc992b3602b56f1904c4a030a933b01ccc1"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Oct 15 10:48:40 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Oct 15 10:48:40 2013 +0900"
      },
      "message": "Fix indentation\n\ngit-repo uses 2 space indentation.  A couple of recent changes\nintroduced 4 space indentation in some modules.\n\nChange-Id: Ia4250157c1824c1b5e7d555068c4608f995be9da\n"
    },
    {
      "commit": "8d20116038ff78b22069dd4e993b5819775f03d1",
      "tree": "4c7ec381f2452d3ae4ed5332230a8d7a61e6ec2b",
      "parents": [
        "b25ea555c39cd500740acb74fa9f1dab71588266"
      ],
      "author": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Fri Oct 11 17:03:19 2013 -0700"
      },
      "committer": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Mon Oct 14 15:34:32 2013 -0700"
      },
      "message": "repo: Support multiple branches for the same project.\n\nIt is often useful to be able to include the same project more than\nonce, but with different branches and placed in different paths in the\nworkspace. Add this feature.\n\nThis CL adds the concept of an object directory. The object directory\nstores objects that can be shared amongst several working trees. For\nnewly synced repositories, we set up the git repo now to share its\nobjects with an object repo.\n\nEach worktree for a given repo shares objects, but has an independent\nset of references and branches. This ensures that repo only has to\nupdate the objects once; however the references for each worktree are\nupdated separately. Storing the references separately is needed to\nensure that commits to a branch on one worktree will not change the\nHEAD commits of the others.\n\nOne nice side effect of sharing objects between different worktrees is\nthat you can easily cherry-pick changes between the two worktrees\nwithout needing to fetch them.\n\nBug: Issue 141\nChange-Id: I5e2f4e1a7abb56f9d3f310fa6fd0c17019330ecd\n"
    },
    {
      "commit": "3bfd72158c11583213037ddfe5224c2038288383",
      "tree": "7065b7e5d905aac5e1474c2b2069629a0d52c86e",
      "parents": [
        "59b31cb6e02b68450f2a5f96bdeffc2a7452d98c"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Sep 30 15:54:38 2013 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 10 09:06:38 2013 -0700"
      },
      "message": "Don\u0027t upload when dest branch is not merge branch\n\nExample:\n- `repo init -b master` / sync a project\n- In one project: `git checkout -b work origin/branch-thats-not-master`\n- make some changes, `git commit`\n- `repo upload .`\n- Upload will now be skipped with a warning instead of being uploaded to\n  master\n\nChange-Id: I990b36217b75fe3c8b4d776e7fefa1c7d9ab7282\n"
    },
    {
      "commit": "59b31cb6e02b68450f2a5f96bdeffc2a7452d98c",
      "tree": "fa64d25f4b75ac03909a0fc90dddcc4d232c6627",
      "parents": [
        "e76efdd7b342577c40aa271fa5ded9d66a783a9b"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Oct 08 23:10:52 2013 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Oct 08 23:14:29 2013 -0700"
      },
      "message": "don\u0027t pass project revision to UploadForReview\n\nPassing a project revisionExpr to UploadForReview will cause it to\ntry to push to refs/for/\u003csha\u003e if the revision points to a sha\ninstead of a branch.  Pass None for dest_branch if no destination\nbranch has been specified, which will cause UploadForReview to\nupload to the merge branch.\n\nThere is room for further improvement, the user prompts will\nstill print \"Upload project \u003cproject\u003e to remote branch \u003csha\u003e\",\nand then upload to the merge branch and not the sha, but that\nis the same behavior that was in 1.12.2.\n\nChange-Id: I06c510336ae67ff7e68b5b69e929693179d15c0b\n"
    },
    {
      "commit": "351fe2c793437e1d8a0b222f8478c74cf60ae034",
      "tree": "9eb3b9ada1de282765919e083c49f06295a42f30",
      "parents": [
        "fb99c719390196e35c27f30f875c1b796c307585"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Sep 25 17:54:26 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Sep 25 19:12:13 2013 +0900"
      },
      "message": "Sync: Improved error message when manifest server RPC call fails\n\nWhen the RPC call fails, the error message returned by the server\nis printed, but it is not obvious that this is caused by RPC call\nfailure.\n\nPrefix the error message with a descriptive message that explains\nwhat went wrong.\n\nChange-Id: I4b77af22aacc2e9843c4df9d06bf54e41d9692ff\n"
    },
    {
      "commit": "fb99c719390196e35c27f30f875c1b796c307585",
      "tree": "2dbe72ac9fed4f4b2376e029c6268993d5f74a8c",
      "parents": [
        "bc0308478bc98d9b14d0b8f79ad030f474adcc6f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Sep 25 11:09:34 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Sep 25 19:12:06 2013 +0900"
      },
      "message": "Sync: Print name of manifest server used for smart sync/smart tag\n\nWhen syncing using smart sync or smart tag mode, print the url of\nthe manifest server that is being used.\n\nThis is useful in organisations that have multiple manifest servers\nused in different manifest branches.\n\nChange-Id: Ib5bc2de5af6f4a942d0ef735c65cbc0721059a61\n"
    },
    {
      "commit": "610d3c4e46471c8db555026969bb3e2eb75102f0",
      "tree": "379579d96906f0f71538defffa24a0d28b72b189",
      "parents": [
        "033a7e91de4e15c7da96f4ab21454c5f6e3b2fb6"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Mon Jun 24 14:02:12 2013 +0530"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Jun 28 00:29:11 2013 +0000"
      },
      "message": "upload: fix display of destination branch for SingleBranch\n\nThe command `repo upload --cbr -D \u003csome branch\u003e` will display\nthe default revision, and not the actual destination branch.\n\nFix that and display the branch to which the change will be\nuploaded to.\n\nChange-Id: I712ed0871c819dce6774c47254dac4efec4532e0\n"
    },
    {
      "commit": "854f2b6ef4f9ea1c304b2e77d552b930b28e7053",
      "tree": "17c26004548ed39b2cfee350a63fe283148b445a",
      "parents": [
        "db2ad9dfce438dae14fed0a62b37f0028ee98ad1",
        "a892b1006b5b7193262f3783b9678e2c76978a9b"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Jun 11 13:58:47 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 11 13:58:47 2013 +0000"
      },
      "message": "Merge \"sync: assign manifest_name earlier\""
    },
    {
      "commit": "a892b1006b5b7193262f3783b9678e2c76978a9b",
      "tree": "b5834be69d2578788a314e269f684bc86d8d8e6b",
      "parents": [
        "ef668c92c2c87c45df02bf1609a89e4479bbb30c"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Jun 11 14:18:46 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Jun 11 14:18:58 2013 +0530"
      },
      "message": "sync: assign manifest_name earlier\n\n* manifest_name was never set if opt.smart_sync or opt.smart_tag is used.\n* Set it earlier, so that the code handles it correctly when it is None.\n* An UnboundLocalError is raised if running `repo sync` without any options:\n  local variable \u0027manifest_name\u0027 referenced before assignment\n* This fixes the above regression caused by commit\n  53a6c5d93a8ba708208826dab64c55fe97f06d0b\n\nChange-Id: I57086670f3589beea8461ce0344f6ec47ab85b7b\n"
    },
    {
      "commit": "db2ad9dfce438dae14fed0a62b37f0028ee98ad1",
      "tree": "6f2dc2aef2456c75759cfe9c845a9d4064ff8bc3",
      "parents": [
        "ef668c92c2c87c45df02bf1609a89e4479bbb30c"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Jun 11 13:42:25 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Jun 11 08:21:10 2013 +0000"
      },
      "message": "Fix urllib.parse (urlparse) handling\n\nRevert \"Fix \"\u0027module\u0027 object is not callable\" error\", and fix it properly.\n\n* The urlparse module is renamed to urllib.parse in Python 3.\n* This commit fixes the code to use \"urllib.parse.urlparse\"\n  instead of creating a new module urlib and setting\n  urlib.parse to urlparse.urlparse.\n* Fixes an AttributeError:\n  \u0027function\u0027 object has no attribute \u0027uses_relative\u0027\n\nThis reverts commit cd51f17c643370e6199216462c1be36f04d57291.\n\nChange-Id: I48490b20ecd19cf5a6edd835506ea5a467d556ac\n"
    },
    {
      "commit": "ef668c92c2c87c45df02bf1609a89e4479bbb30c",
      "tree": "039f3a11ed6bb9be775a4c242132628a58aa529b",
      "parents": [
        "65b162b32fccee038ea331ea47706c4c2ef52692",
        "691a75936d517f05aaa4a5b0f477d9af5f301b6f"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Jun 10 14:35:13 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 10 14:35:13 2013 +0000"
      },
      "message": "Merge \"Fix a few issues with dest-branch and multiples\""
    },
    {
      "commit": "65b162b32fccee038ea331ea47706c4c2ef52692",
      "tree": "080bc21551d03b899dadd480c8be8833a82237de",
      "parents": [
        "53a6c5d93a8ba708208826dab64c55fe97f06d0b",
        "cd51f17c643370e6199216462c1be36f04d57291"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Jun 10 14:31:30 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 10 14:31:30 2013 +0000"
      },
      "message": "Merge \"Fix \"\u0027module\u0027 object is not callable\" error\""
    },
    {
      "commit": "cd51f17c643370e6199216462c1be36f04d57291",
      "tree": "8ab1624ac46d6adbac6ca3c25d3d716aff251776",
      "parents": [
        "c2791e85f322bb7d5007ee7e673134d5fa2ed662"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jun 06 19:06:16 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sat Jun 08 14:50:41 2013 +0900"
      },
      "message": "Fix \"\u0027module\u0027 object is not callable\" error\n\nIn a couple of files the urlparse method was not being set up\ncorrectly for python \u003c 3 and this resulted in an error being\nthrown when trying to call it.\n\nChange-Id: I4d2040ac77101e4e228ee225862f365ae3d96cec\n"
    },
    {
      "commit": "53a6c5d93a8ba708208826dab64c55fe97f06d0b",
      "tree": "3500926383ccb256d6d2f76939fc160db80c0665",
      "parents": [
        "c2791e85f322bb7d5007ee7e673134d5fa2ed662"
      ],
      "author": {
        "name": "Victor Boivie",
        "email": "victor.boivie@sonymobile.com",
        "time": "Tue Mar 19 12:20:52 2013 +0100"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sat Jun 08 14:31:58 2013 +0900"
      },
      "message": "Degrade: Fix smart sync/smart tag\n\nThis was broken in b2bd91c, which updated the manifest after it had\nbeen overridden, which made it fall back to the original file (and\nnot the one from the manifest server).\n\nThis builds on 0766900 and overrides the manifest by the one\ndownloaded from the manifest server completely.\n\nChange-Id: Ic3972390a68919b614616631d99c9e7a63c0e0db\n"
    },
    {
      "commit": "5bca9fcdd9dfe4fd31fffe332579f982738b5997",
      "tree": "0a10638609166ab4dc5a8d03b2cede472db3e908",
      "parents": [
        "710d4b03911bc6fc0b313af56e81b957ccae2348"
      ],
      "author": {
        "name": "Jorge Gonzalez",
        "email": "gjorge@google.com",
        "time": "Mon Jun 03 12:00:06 2013 -0700"
      },
      "committer": {
        "name": "Jorge Gonzalez",
        "email": "gjorge@google.com",
        "time": "Mon Jun 03 17:52:01 2013 -0700"
      },
      "message": "Print project name for -p on mirror clients\n\nIt doesn\u0027t make sense to print the relpath, since there\u0027s nothing\nchecked out there and the dir shouldn\u0027t even exist.\n\nChange-Id: Id43631a8e0895929d3a5ad4ca8c2dc9e3d233e70\n"
    },
    {
      "commit": "691a75936d517f05aaa4a5b0f477d9af5f301b6f",
      "tree": "ee61b4dcb91aeb0ea2d60fa720aa037faed7e585",
      "parents": [
        "a1f77d92c65028a55202062594cb379b6503bf60"
      ],
      "author": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Fri May 31 15:45:28 2013 -0400"
      },
      "committer": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Mon Jun 03 10:39:43 2013 -0400"
      },
      "message": "Fix a few issues with dest-branch and multiples\n\nThis fixes dest-branch display with \u003e1 branch being uploaded to at\nonce, and correctly handles setting the target branch in that case.\n\nChange-Id: If5e9c7ece02cc0d903e2cb377485ebea73a07107\n"
    },
    {
      "commit": "710d4b03911bc6fc0b313af56e81b957ccae2348",
      "tree": "ddeea9c2f86363e48d3ca4e53a868a27bd7a39f6",
      "parents": [
        "a1f77d92c65028a55202062594cb379b6503bf60"
      ],
      "author": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Fri May 31 15:28:05 2013 -0400"
      },
      "committer": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Sun Jun 02 19:13:18 2013 -0400"
      },
      "message": "Fix a bug in repo upload --cbr\n\nrepo upload --cbr bailed out if some branches did not have\nmodifications when it is used.\n\nChange-Id: I35f264ff7d77bb4bf8f26b4c3faffa184920b6c5\n"
    },
    {
      "commit": "f609f91b72c0b90026da0eefcc0f52f12840971b",
      "tree": "819e244e52279d7b232df5e17727a9a828ddda66",
      "parents": [
        "59bbb580e34bbc5dce76dacaad9ff94f21fa396f"
      ],
      "author": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Mon May 06 13:36:24 2013 -0400"
      },
      "committer": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Fri May 24 12:17:22 2013 -0400"
      },
      "message": "Send reviews to a different branch from fetch\n\nThis adds the ability to have reviews pushed to a different branch\nfrom the one on which changes are based. This is useful for \"gateway\"\nsystems without smartsync.\n\nChange-Id: I3a8a0fabcaf6055e62d3fb55f89c944e2f81569f\n"
    },
    {
      "commit": "59bbb580e34bbc5dce76dacaad9ff94f21fa396f",
      "tree": "4d19216215edc174851baa10a00a3bccba9d4e45",
      "parents": [
        "da45e5d8848246cddbce80ff56786bd7330ba5af"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri May 17 10:49:33 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu May 23 07:28:53 2013 +0000"
      },
      "message": "Move Python version checking to a separate module\n\nAdd a new module with methods for checking the Python version.\n\nInstead of handling Python3 imports with try...except blocks, first\ncheck the python version and then import the relevant modules.  This\nmakes the code a bit cleaner and will result in less diff when/if we\nremove support for Python \u003c 3 later.\n\nUse the same mechanism to handle `input` vs. `raw_input` and add\nsuppression of pylint warnings caused by redefinition of the built-in\nmethod `input`.\n\nChange-Id: Ia403e525b88d77640a741ac50382146e7d635924\nAlso-by: Chirayu Desai \u003ccdesai@cyanogenmod.org\u003e\nSigned-off-by: Chirayu Desai \u003ccdesai@cyanogenmod.org\u003e\n"
    },
    {
      "commit": "da45e5d8848246cddbce80ff56786bd7330ba5af",
      "tree": "661979f3b1f5f3a4612280fd3c92e7f3b1847c50",
      "parents": [
        "0826c0749f9597be07171fed63160dcb1718e35c"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed May 15 17:34:45 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu May 16 09:32:18 2013 +0900"
      },
      "message": "Remove unused show_smart option on list and info commands\n\nChange-Id: Idf0e161a0b0cc23a5a3ee44d18cb797162cfdd7b\n"
    },
    {
      "commit": "2b30e3aabafa43c224cb6d57dc232d78b28a4901",
      "tree": "ba6fe5ee439091371977cd3db36b32b41c6b4e9d",
      "parents": [
        "793f90cdc0cffc3ade6acdc544e315fbd54cbb0b"
      ],
      "author": {
        "name": "Victor Boivie",
        "email": "victor.boivie@sonymobile.com",
        "time": "Fri Oct 05 12:37:58 2012 +0200"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Sun May 12 17:49:28 2013 +0530"
      },
      "message": "Use reference also for manifest git\n\nWhen running \u0027repo init --reference\u003d\u003cmirror\u003e\u0027, the mirror will be\nused for all projects except the manifest project. This is because\nthe _InitGitDir function uses the \u0027repo.reference\u0027 git config\nvalue specified in the manifest git, which has no effect when\ncreating the manifest git as that value will be set after the git\nhas been successfully cloned.\n\nInformation about where the manifest git is located on the server\nis only known when performing the \u0027repo init\u0027, so that information\nhas to be provided when cloning the git in order for it to set up\na proper mapping.\n\nChange-Id: I47a2c8b3267a4065965058718ce1def4ecb34d5a\nSigned-off-by: Chirayu Desai \u003ccdesai@cyanogenmod.org\u003e\n"
    },
    {
      "commit": "b5267f9ad2d0d7872610c8989f11471187fd92d2",
      "tree": "56b9cb916894acbecb270141bf21bd5bd1a46f4a",
      "parents": [
        "45401230cf2b071562617da02ab751468e9aaf8d"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon May 06 07:52:52 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed May 08 06:37:15 2013 +0100"
      },
      "message": "stage: replace filter on lambda with list comprehension\n\nTo fix the pylint warning:\n\n  W0110: map/filter on lambda could be replaced by comprehension\n\nChange-Id: Ib914b42992bb2fbfe888a68fb7b05a7695565b63\n"
    },
    {
      "commit": "a8864fba9fd21f412cd0e2c6e072deeb204049bb",
      "tree": "70008b8438542ff08fc9c5883e1b35f15c12b1c8",
      "parents": [
        "275e4b727a68cbf32c686d80736772c843771d98"
      ],
      "author": {
        "name": "Zhiguang Li",
        "email": "muzili@gmail.com",
        "time": "Fri Mar 15 10:32:10 2013 +0800"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Mon Apr 29 16:19:26 2013 +0530"
      },
      "message": "Add regex support for subcommand forall\n\nFilter the project list based on regex or wildcard matching\nof strings, then we can handle subset of all projects.\n\nChange-Id: Ib6c23aec79e7d981f7b6a5eb0ae93c44effec467\nSigned-off-by: Zhiguang Li \u003cmuzili@gmail.com\u003e\n"
    },
    {
      "commit": "217ea7d2747e3098009afe0b389fc4b45f55ea5a",
      "tree": "4ea2663a01fb22002ec6cd6ede9cb3babd89a692",
      "parents": [
        "fef4ae74e26efecf5c803793351b6c843eab4970"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Fri Mar 01 19:14:38 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Thu Apr 18 21:35:49 2013 +0530"
      },
      "message": "Some fixes for supporting python3\n\n* Fix imports.\n* Use python3 syntax.\n* Wrap map() calls with list().\n* Use list() only wherever needed.\n  (Thanks Conley!)\n* Fix dictionary iteration methods\n  (s/iteritems/items/).\n* Make use of sorted() in appropriate places\n* Use iterators directly in the loop.\n* Don\u0027t use .keys() wherever it isn\u0027t needed.\n* Use sys.maxsize instead of sys.maxint\n\nTODO:\n* Make repo work fully with python3. :)\n\nSome of this was done by the \u00272to3\u0027 tool [1], by\napplying the needed fixes in a way that doesn\u0027t\nbreak compatibility with python2.\n\nLinks:\n[1]: http://docs.python.org/2/library/2to3.html\n\nChange-Id: Ibdf3bf9a530d716db905733cb9bfef83a48820f7\nSigned-off-by: Chirayu Desai \u003ccdesai@cyanogenmod.org\u003e\n"
    },
    {
      "commit": "fef4ae74e26efecf5c803793351b6c843eab4970",
      "tree": "f5d53b6aad19cd6c514b9c3e10e050a1d1f6cb18",
      "parents": [
        "db83b1b5abcc2df1b5c7a76ca74ff60e88fe956e"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Fri Apr 12 14:54:32 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Mon Apr 15 13:38:49 2013 +0530"
      },
      "message": "sync: be more verbose\n\n* Print project name if the \"quiet\" option is not used.\n\nChange-Id: I99863bb50f66e4dcbaf2d170bdd05971f2a4e19a\nSigned-off-by: Chirayu Desai \u003ccdesai@cyanogenmod.org\u003e\n"
    },
    {
      "commit": "04d84a23fd04c9e1dd15341eb7dd28a0d8ce99c6",
      "tree": "d7b1a09f85c56296c9ad540d161b782379c34e73",
      "parents": [
        "0a1c6a1c16e2c89f98158cb2f79dda1583a8fac4"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Sun Mar 17 18:46:23 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Sat Apr 06 14:39:03 2013 +0530"
      },
      "message": "list: add name-only and path-only options\n\n`repo list -n` prints only the name of the projects.\n`repo list -p` prints only the path of the projects.\n\nChange-Id: If7d78eb2651f0b1b2fe555dc286bd2bdcad0d56d\nSigned-off-by: Chirayu Desai \u003ccdesai@cyanogenmod.org\u003e\n"
    },
    {
      "commit": "0a1c6a1c16e2c89f98158cb2f79dda1583a8fac4",
      "tree": "2446c673c4eddf2a499e36b4e898ea258a6d3c7a",
      "parents": [
        "33e045673786f3477e805ade0f337de08e89a7a8"
      ],
      "author": {
        "name": "David Holmer",
        "email": "odinguru@gmail.com",
        "time": "Wed Nov 14 19:19:00 2012 -0500"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 03 22:27:45 2013 +0000"
      },
      "message": "Special handling for manifest group \"default\"\n\nChange Details:\n* Make \"default\" a special manifest group that matches any project that\n  does not have the special project group \"notdefault\"\n* Use \"default\" instead of \"all,-notdefault\" when user does not specify\n  manifest group\n* Expand -g option help to include example usage of manifest groups\n\nChange Benefits:\n* Allow a more intuitive and expressive manifest groups specification:\n  * \"default\" instead of \"all,-notdefault\"\n  * \"default,foo\" instead of \"all,-notdefault,foo\"\n  * \"default,-foo\" instead of \"all,-notdefault,-foo\"\n  * \"foo,-default\" which has no equivalent\n* Default manifest groups behavior can be restored by the command\n  \u0027repo init -g default\u0027. This is significantly more intuitive than the\n  current equivalent command \u0027repo init -g all,-notdefault\u0027.\n\nChange-Id: I6d0673791d64a650110a917c248bcebb23b279d3\n"
    },
    {
      "commit": "07669002cbc1cdb3f5587660a140b3203b7fb552",
      "tree": "ad652eff3898e0961562e085f230e53d7d476349",
      "parents": [
        "3cba0b8613b2fd56eb2c78b6f94c26ac26704bd0"
      ],
      "author": {
        "name": "Tim Kilbourn",
        "email": "tkilbourn@google.com",
        "time": "Fri Mar 08 15:02:49 2013 -0800"
      },
      "committer": {
        "name": "Tim Kilbourn",
        "email": "tkilbourn@google.com",
        "time": "Fri Mar 08 16:19:03 2013 -0800"
      },
      "message": "Reload the correct manifest during sync.\n\nFix for issue #134\nhttps://code.google.com/p/git-repo/issues/detail?id\u003d134\n\nChange-Id: I94c2dea5dd63917e3f9c90cbd628921d7d61b12a\n"
    },
    {
      "commit": "a27852d0e707046558dfef9145f56b64b1331c7a",
      "tree": "f8ba2ff81c074beff302db0911cf2e896c8df561",
      "parents": [
        "3ee6ffd07852c184feef5afd695d80a3f9a0db79",
        "61ac9ae090d81bfd086ed8b3ca961de1cc77e3cc"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Mar 08 01:12:56 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 08 01:12:56 2013 +0000"
      },
      "message": "Merge \"Add manifest groups to the output of `info`\""
    },
    {
      "commit": "61ac9ae090d81bfd086ed8b3ca961de1cc77e3cc",
      "tree": "ba0c8b1f88d02e7e6216acba3c4f759cc48b4f8c",
      "parents": [
        "45d21685b93f80b67239849b2d2cfe6b217e335a"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Mar 05 10:35:36 2013 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Mar 07 09:47:29 2013 -0800"
      },
      "message": "Add manifest groups to the output of `info`\n\nList the user\u0027s manifest groups when running `repo info`.\n\nThese groups are passed to `repo init` using the -g/--groups flag.\n\nChange-Id: Ie8a4ed74a35b8b90df3b1ee198fe725b1cd68ae7\n"
    },
    {
      "commit": "2f9e7e40c44acae37d0c263c212956ef6038c35b",
      "tree": "b5bffccb2c4f6a502a350bef3e40183f56ca8bc9",
      "parents": [
        "45d21685b93f80b67239849b2d2cfe6b217e335a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Mar 05 17:26:46 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Mar 05 17:30:59 2013 +0900"
      },
      "message": "Fix: Missing spaces in printed messages\n\nSeveral messages are printed with the `print` method and the message\nis split across two lines, i.e.:\n\n print(\u0027This is a message split\u0027\n       \u0027across two source code lines\u0027)\n\nWhich causes the message to be printed as:\n\n This is a message splitacross two source code lines\n\nAdd a space at the end of the first line before the line break:\n\n print(\u0027This is a message split \u0027\n       \u0027across two source code lines\u0027\n\nAlso correct a minor spelling mistake.\n\nChange-Id: Ib98d93fcfb98d78f48025fcc428b6661380cff79\n"
    }
  ],
  "next": "597868b4c45bba380249b739c0cf49b868cc8741"
}
