)]}'
{
  "log": [
    {
      "commit": "7b01b2fd01f4e37688242db19c93feb27f9b65c6",
      "tree": "2f47ef28b89bcf6e6fdc97b35c5cf85e5ce795ce",
      "parents": [
        "aad84232ca881cfd6510d9dd129e9b6036cee1d2",
        "fee390eea2ed6afdfbc09639f39aeb3ace83efb4"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Sep 14 23:40:05 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 14 23:40:05 2015 +0000"
      },
      "message": "Merge \"launcher: Update repo after applying clone.bundle\""
    },
    {
      "commit": "aad84232ca881cfd6510d9dd129e9b6036cee1d2",
      "tree": "aa1407b6e4c9528934567acbaae4f7ac41c1176c",
      "parents": [
        "3c0358060786e9a6fcd6b3bbb9c01c887946bdd6",
        "54527e7e3086758a23e3b069f183db6415aca304"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Sep 14 10:39:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 14 10:39:21 2015 +0000"
      },
      "message": "Merge \"docs: add copyfile and linkfile elements description\""
    },
    {
      "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": "54527e7e3086758a23e3b069f183db6415aca304",
      "tree": "e43bc2ec647d52a1b2ceb1e442ac1c0c6e04bcb1",
      "parents": [
        "5d0c3a614edc3f3d5967cfc07c7981da7013ea91"
      ],
      "author": {
        "name": "Ruslan Bilovol",
        "email": "ruslan.bilovol@gmail.com",
        "time": "Tue Sep 08 13:11:23 2015 +0300"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Sep 10 09:43:19 2015 +0000"
      },
      "message": "docs: add copyfile and linkfile elements description\n\nThe \"copyfile\" element is available since 2009 and\nhave been used in every Android manifest; the \"linkfile\"\nelement is available since 2014.\nNow it\u0027s a good time to add both to the documentation\n\nChange-Id: Ia987edf5f69a006235fbd3f33b744e9794a6d964\nSigned-off-by: Ruslan Bilovol \u003cruslan.bilovol@gmail.com\u003e\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": "5cc384034d144c339d2e5822c36c5ca4529ac487",
      "tree": "e2a5cb35a8ea85984c7e4f92bac9fffd4d1e617c",
      "parents": [
        "c32ba1961e3451101ce94a26f83cf56681ff6414",
        "037552333182497e9e38bff984de44df0f93e54b"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 09 21:44:11 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 09 21:44:11 2015 +0000"
      },
      "message": "Merge \"Revert \"GITC: Always update the gitc manifest from the repo manifest\"\""
    },
    {
      "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": "c32ba1961e3451101ce94a26f83cf56681ff6414",
      "tree": "208afccd01c6a238acf73d0701c11ca4411686f9",
      "parents": [
        "250303b437855c2b50d052a05a08ed517423af8b",
        "029eaf3bac39d0dce49e0627597b1659d5335dde"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 09 20:47:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 09 20:47:19 2015 +0000"
      },
      "message": "Merge \"_CopyAndLinkFiles even if the sources haven\u0027t changed\""
    },
    {
      "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": "029eaf3bac39d0dce49e0627597b1659d5335dde",
      "tree": "e2a5cb35a8ea85984c7e4f92bac9fffd4d1e617c",
      "parents": [
        "ba72d8301e33344b3b11e286619c99568c37db1a"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Sep 03 12:52:28 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Sep 03 12:54:06 2015 -0700"
      },
      "message": "_CopyAndLinkFiles even if the sources haven\u0027t changed\n\nThe source or destination attributes may have changed even if the source\ndidn\u0027t, so we need to make sure that these are up to date.\n\nChange-Id: I266ef3598ddda7e8c23bc9c6a049905ddc586348\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": "fee390eea2ed6afdfbc09639f39aeb3ace83efb4",
      "tree": "56bb1d5762c55cee073b2d5cbd4f1c83d0e0a76e",
      "parents": [
        "9ff2ece6abc5d0d4a69c2f086209f107fd4f04be"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 02 12:36:30 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 02 12:45:19 2015 -0700"
      },
      "message": "launcher: Update repo after applying clone.bundle\n\nIf the clone.bundle is out of date, repo may be installed with an old\nversion. It will upgrade with the next sync a day later, or when \"repo\nselfupdate\" is run.\n\nThis behavior was added to normal project downloads, but was never added\nto the repo launcher.\n\nChange-Id: Ib04bef3a658c98fe1b6c53b3e8d0067165a5e3f7\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": "2487cb7b2c41506c8ef900dba735876b01c67eab",
      "tree": "26408a8671065fbc9cd8f22e4f4e9d279fd22c3f",
      "parents": [
        "8ce5041596ef486510245946b7c6c68ec59add29"
      ],
      "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": "Mon Aug 31 15:59:54 2015 -0700"
      },
      "message": "Fix gitc check if gitc isn\u0027t installed\n\nThis was doing cwd.startswith(\u0027\u0027), which is always true.\n\nChange-Id: Icc059c09492b31e2d7651e4a595bda783c5abc47\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": "dc2545cad60d7e8bae894f5d60eaeb3cff7485ae",
      "tree": "3f26eeb07cbbe3aa069b600cd9daf361c8b904c6",
      "parents": [
        "f33929d014c21eaabb5471a70abf698af7742b8c"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Aug 24 14:43:45 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Aug 25 05:40:46 2015 +0000"
      },
      "message": "project.py: Improve message shown when hook is not replaced\n\nIf a hook file has been modified locally, it will not be replaced.\n\nImprove the message to make this clearer.\n\nAlso change it from an error to a warning.\n\nChange-Id: I62c635390f24d2868db17717c247861b0381c99f\n"
    },
    {
      "commit": "f33929d014c21eaabb5471a70abf698af7742b8c",
      "tree": "46a639f789df27677bc66eecf2d4b76fc21f35ab",
      "parents": [
        "3010e5ba646f938a856fc286439a3df34ed9a53f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Aug 24 14:39:14 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Aug 25 14:39:06 2015 +0900"
      },
      "message": "project.py: Consistently use the _error method to print error messages\n\nUse the _error method instead of directly calling `print`.\n\nAlso add a new _warn convenience method.\n\nChange-Id: Ia332c14ef8d9d1fe2df128dbf36b5521802ccdf1\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": "022a1d4e6ec574d6b21febde8d2088393f42c5fb",
      "tree": "ff173294d747bb0af8146a25b7c94a753998805d",
      "parents": [
        "41d1baac31e4a109480a6129c4f1f1cd2b37c1c9"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 16:41:04 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 16:41:04 2015 +0900"
      },
      "message": "gitc_utils: Fix incorrect string format argument\n\nChange-Id: Ibbac6e111833c8f5d93cb6cb4a10f8f2c4fd8e11\n"
    },
    {
      "commit": "41d1baac31e4a109480a6129c4f1f1cd2b37c1c9",
      "tree": "3e1c81c2987fca716fa5dc41bc26cead0e7123d9",
      "parents": [
        "46496d8761ae94a349ed3b592ec7ee7e0c7e1a15"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 16:40:44 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 16:40:44 2015 +0900"
      },
      "message": "gitc_utils: Remove unused variable\n\nChange-Id: I569819675a99ff6c01fb57b23fed033c39d14d1f\n"
    },
    {
      "commit": "46496d8761ae94a349ed3b592ec7ee7e0c7e1a15",
      "tree": "4ea2c13c83a0c61aeed32dbe70f61d9aa62b5f90",
      "parents": [
        "7c9263bce09725227dc518ee298b350becbdf26e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 16:37:09 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 20 16:37:09 2015 +0900"
      },
      "message": "gitc_utils: Remove unused import; add missing import\n\nshutils is not used. Remove it.\n\nsys is used, but not imported.  Import it.\n\nChange-Id: I4ee582f33bbd451601097ef2f20bee23b54764cd\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": "dab9e99f0f6d4f82e0e61b37396f7c0915a8d508",
      "tree": "cc87c7480bc528491c038c69ab1f9c9eaf94305f",
      "parents": [
        "c5f15bf7c0e0d84a319c5d8d7cb8260f28f7fe9c",
        "25857b8988de60d7c7a8593c6170b2bbf80d748d"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Aug 19 17:54:50 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 17:54:50 2015 +0000"
      },
      "message": "Merge \"Fix formatting of message when retrying clone\""
    },
    {
      "commit": "c5f15bf7c0e0d84a319c5d8d7cb8260f28f7fe9c",
      "tree": "91f6221bf7318ab803cdc4711be0667ebdb40d69",
      "parents": [
        "6d35d676dbaadd96b785f188cf04563bf1165831",
        "f9b7683a3bf979d6cef50d691165280d64566ee4"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Aug 19 17:53:28 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 17:53:28 2015 +0000"
      },
      "message": "Merge \"Include project path in --force-sync error message\""
    },
    {
      "commit": "6d35d676dbaadd96b785f188cf04563bf1165831",
      "tree": "aedba96790f8496756bd67c81544bd19fe5a0da7",
      "parents": [
        "bdb5271de3fafb9fbec3fde0e8e95e5b061ab0f5",
        "884092225de5cf08aa453d025e0513dc2a42dce4"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Aug 19 17:50:15 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 19 17:50:15 2015 +0000"
      },
      "message": "Merge \"Copy clone-depth in `repo manifest`\""
    },
    {
      "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": "25857b8988de60d7c7a8593c6170b2bbf80d748d",
      "tree": "04bee330dabe28457033164c3b06d533017803f8",
      "parents": [
        "bdb5271de3fafb9fbec3fde0e8e95e5b061ab0f5"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Aug 19 18:06:22 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Aug 19 13:03:13 2015 +0000"
      },
      "message": "Fix formatting of message when retrying clone\n\nPassing the force_sync variable into the string formatting results in\nthe message:\n\n  \"Retrying clone after deleting None\"\n\nor\n\n  \"Retrying clone after deleting True\".\n\nPass the name of the git directory instead.\n\nAlso, move the print inside the if-block so it\u0027s only displayed\nwhen the retry is actually going to be attempted.\n\nChange-Id: I76d9ecc176cecee4ad512d13e9d1f6bd36aacbbb\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": "884092225de5cf08aa453d025e0513dc2a42dce4",
      "tree": "5a1b723141a815c50d88203aa81f0241d3813e47",
      "parents": [
        "5d0c3a614edc3f3d5967cfc07c7981da7013ea91"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Aug 17 15:29:10 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Aug 17 15:30:27 2015 -0700"
      },
      "message": "Copy clone-depth in `repo manifest`\n\nThis argument wasn\u0027t being copied, which caused syncs from generated\nmanifests to pull down too much of the git history.\n\nChange-Id: I269bab788d4557267c081628b3f8c6aec7744e81\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": "2635c0e3b6d0fb7a48d892fe9528197eb13bc98b",
      "tree": "3079d49ac2bc04a91ef35876c098fa57053edc75",
      "parents": [
        "43322283dc97b12e6d5b03c27fb780b0110f889a",
        "eeab6860f1c5e542ebabdec2e44185bedad49ed7"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Aug 05 01:02:41 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 05 01:02:41 2015 +0000"
      },
      "message": "Merge \"Fix shallow clone behavior\""
    },
    {
      "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": "f9b7683a3bf979d6cef50d691165280d64566ee4",
      "tree": "b9d86c89ebf62c6a81898223f0f702f6c4c5eac6",
      "parents": [
        "7e59de2bcc8513ba28701062be2637d90cb6eeff"
      ],
      "author": {
        "name": "Simon Ruggier",
        "email": "Simon80@gmail.com",
        "time": "Fri Jul 31 17:18:34 2015 -0400"
      },
      "committer": {
        "name": "Simon Ruggier",
        "email": "Simon80@gmail.com",
        "time": "Tue Aug 04 18:41:20 2015 -0400"
      },
      "message": "Include project path in --force-sync error message\n\nFor projects that have been cloned outside of the repo command (or\ncloned a long time ago), commit abaa7f312f1b6c8d11d7c757fe909900ce5788b5\nintroduced an error message to invite the user to use --force-sync.\nHowever, due to the risk of data loss, it\u0027s useful to know which\nproject\u0027s git directory is being replaced before deciding whether or not\nto provide --force-sync.\n\nThis change updates the exception\u0027s associated value to include the\nproject\u0027s relative path and explain to the user how they can resolve the\nissue. A previous version of this commit used the project name. However,\nfor projects that have multiple work trees, the name can be ambiguous,\nwhile the path clearly identifies which git directory will be replaced.\n\nChange-Id: If717e66fda4d19accc0a8e889a91f4cd4ff14dff\n"
    },
    {
      "commit": "eeab6860f1c5e542ebabdec2e44185bedad49ed7",
      "tree": "af793b69bd9939ecbc42d390605c721e6ca97c08",
      "parents": [
        "163fdbf2fd6ac8bb1f1e41fb74e68261badce32d"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Aug 03 13:11:53 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Aug 03 16:54:16 2015 -0700"
      },
      "message": "Fix shallow clone behavior\n\nThe existing code here makes sure that switching clone-depth from on to\noff actually causes the history to be fully restored. Unfortunately, it\ndoes this by fetching the full history every time the fetch spec\nchanges. Switching between two clone-depth\u003d\"1\" branches will fetch far\nmore than the top commit.\n\nInstead, when not using clone-depth, pass --depth\u003d2147483647 to git\nfetch so that it ensures that we have the entire history. That is\nslightly less efficient, so limit it to only when there are shallow\nobjects in the project by checking for the existance of the \u0027shallow\u0027\nfile.\n\nChange-Id: Iee0cfc9c6992c208344b1d9123769992412db67b\n"
    },
    {
      "commit": "7e59de2bcc8513ba28701062be2637d90cb6eeff",
      "tree": "d367400513183111e6c24e48723d45899a1b0ba0",
      "parents": [
        "163fdbf2fd6ac8bb1f1e41fb74e68261badce32d"
      ],
      "author": {
        "name": "Simon Ruggier",
        "email": "Simon80@gmail.com",
        "time": "Fri Jul 24 12:50:06 2015 +0200"
      },
      "committer": {
        "name": "Simon Ruggier",
        "email": "Simon80@gmail.com",
        "time": "Fri Jul 31 17:36:28 2015 -0400"
      },
      "message": "Include dest-branch attribute in the \u0027manifest\u0027 subcommand\u0027s output\n\nChange-Id: If4227d02005fddea82d9e698a373222100d8f710\n"
    },
    {
      "commit": "163fdbf2fd6ac8bb1f1e41fb74e68261badce32d",
      "tree": "f40f31fd8e72f30e66c471a29b6af1cb86610819",
      "parents": [
        "555be547903a3077de8fa4e0d3dfd3d9202ddc10",
        "2a3e15217ab986abe457808a4f2e35504ded535a"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Jul 31 18:01:32 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 31 18:01:32 2015 +0000"
      },
      "message": "Merge \"Fix _ReferenceGitDir symlinking\""
    },
    {
      "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": "2a3e15217ab986abe457808a4f2e35504ded535a",
      "tree": "86f77b654aa5cd1a866e40cdd910ac15588da4ec",
      "parents": [
        "abaa7f312f1b6c8d11d7c757fe909900ce5788b5"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Jul 30 20:43:33 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Jul 30 21:29:53 2015 -0700"
      },
      "message": "Fix _ReferenceGitDir symlinking\n\nThis fixes these errors:\n\n  ...\n  File \".repo/repo/project.py\", line 2371, in _ReferenceGitDir\n    os.symlink(os.path.relpath(src, os.path.dirname(dst)), dst)\n  OSError: [Errno 17] File exists\n\nWhich was happening for checkouts that were created before v1.12.8, when\nproject-objects was created. Nothing had yet been forcing these\ncheckouts to use project-objects, until the recent verification changes.\n\nIn this OSError case, we already created the symlink, so src \u003d\u003d dst, and\nthe directory did not exist. This caused us to run os.makedirs the\nos.symlink on the same file.\n\ndst really should be the file in gitdir, not the target of that symlink\nif it exists. So just use realpath for the dotgit portion of the path.\n\nChange-Id: Iff5396a2093de91029c42cf38aa57131fd22981c\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": "7cccfb2cf0ed1ed14f6b8a5bdb36459ebcb4db5a",
      "tree": "1ec849c8a652c980dee800a877d9362e633a2d57",
      "parents": [
        "57f43f49448a9eb255eb2452e902d3f26e77aca3",
        "b1a07b8276c02894ae1901d186d916bde2693f05"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jul 29 18:49:12 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 29 18:49:12 2015 +0000"
      },
      "message": "Merge \"InitGitDir: Clean up created directories\""
    },
    {
      "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": "b1a07b8276c02894ae1901d186d916bde2693f05",
      "tree": "e70a0ae484ff12f32fb8bdaa01841ce48dbb2bee",
      "parents": [
        "b3d6e67196b4f9d85f3c11453a9502a6e71364d7"
      ],
      "author": {
        "name": "Kevin Degi",
        "email": "kdegi@codeaurora.org",
        "time": "Mon Jul 27 13:33:43 2015 -0600"
      },
      "committer": {
        "name": "Kevin Degi",
        "email": "kdegi@codeaurora.org",
        "time": "Mon Jul 27 13:33:43 2015 -0600"
      },
      "message": "InitGitDir: Clean up created directories\n\nIf _InitGitDir fails, it leaves any progress it had made on the file\nsystem. This can cause subsequent calls to repo sync to behave\ndifferently. This is especially evident when _CheckDirReference() fails,\nsince it will not be invoked when sync is retried because both the\nsource and destination directories already exist.\n\nTo address this, have _InitGitDir() clean up any directories it has created\nif it catches an exception. Also behave the same way for _InitWorkTree().\n\nChange-Id: Ic16bb3feea649e115b59bd44be294e89e3692aeb\n"
    },
    {
      "commit": "4e16c249817aa3b14a5d1ce767687f1d82c41249",
      "tree": "4891ff867cc09305e8e69de5e533e70c8a955d29",
      "parents": [
        "b3d6e67196b4f9d85f3c11453a9502a6e71364d7"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Jul 20 22:29:19 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Jul 20 22:31:04 2015 +0900"
      },
      "message": "Revert \"Add --prune option to fetch when syncing a mirror repo\"\n\nFor some users it is not desirable to remove refs that don\u0027t exist\non the remote server when syncing a mirror repo.\n\nThis reverts commit b4d43b9f664d6472b6c1e91c98f951037d00cea5.\n\nChange-Id: Ie849b66682138ef88da6cd1a5fbb27e993197dd7\n"
    },
    {
      "commit": "b3d6e67196b4f9d85f3c11453a9502a6e71364d7",
      "tree": "6cff2795a98c3e6b04e2cc16b80607d994216c18",
      "parents": [
        "503d66d8af1f13660b0982746e44060652a92b65",
        "384b3c594831e79348a2eb98809ef9f3e34f6aa2"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jul 15 19:30:40 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 15 19:30:41 2015 +0000"
      },
      "message": "Merge \"Fail if gitdir does not point to objdir during sync\""
    },
    {
      "commit": "503d66d8af1f13660b0982746e44060652a92b65",
      "tree": "ec85025f1a6003b2aef177dce6d96751820243b3",
      "parents": [
        "97836cf09f20e229524aff167c205d89edda3d52",
        "679bac4bf3622412c29e8bca506bc670224d2e31"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jul 15 19:29:13 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 15 19:29:14 2015 +0000"
      },
      "message": "Merge \"project.RemoteFetch: Handle depth cases more robustly\""
    },
    {
      "commit": "679bac4bf3622412c29e8bca506bc670224d2e31",
      "tree": "08e61b881facf5795d24b173bf8a2adf69d5db55",
      "parents": [
        "185307d1dd1e63a8cf139c55f26895a6b378d43b"
      ],
      "author": {
        "name": "Kevin Degi",
        "email": "kdegi@codeaurora.org",
        "time": "Mon Jun 22 15:31:26 2015 -0600"
      },
      "committer": {
        "name": "Kevin Degi",
        "email": "kdegi@codeaurora.org",
        "time": "Wed Jul 15 15:53:14 2015 +0000"
      },
      "message": "project.RemoteFetch: Handle depth cases more robustly\n\nThe fetch logic for the case where depth is set and revision is a\nSHA1 has several failure modes that are not handled well by the\ncurrent logic.\n\n1) \u0027git fetch \u003cSHA1\u003e\u0027 requires git version \u003e\u003d 1.8.3\n2) \u0027git fetch \u003cSHA1\u003e\u0027 can be prevented by a configuration option on the server.\n3) \u0027git fetch --depth\u003d\u003cN\u003e \u003crefspec\u003e\u0027 can fail to contain a SHA1 specified by\n   the manifest.\n\nEach of these cases cause infinite recursion when _RemoteFetch() tries to call\nitself with current_branch_only\u003dFalse because current_branch_only is set to\nTrue when depth !\u003d None.\n\nTo try to prevent the infinite recursion, we set self.clone_depth to None\nbefore the first retry of _RemoteFetch(). This will allow the Fetch to\neventually succeed in the case where clone-depth is specified in the manifest.\nA user specified depth from the init command will still recurse infinitely.\n\nIn addition, never try to fetch a SHA1 directly if the git version being used\nis not at least 1.8.3.\n\nChange-Id: I802fc17878c0929cfd63fff611633c1d3b54ecd3\n"
    },
    {
      "commit": "97836cf09f20e229524aff167c205d89edda3d52",
      "tree": "28265ea07277872db38ebcdf5bbc248c12ac9018",
      "parents": [
        "80e3a37ab546984bd8494a12204ea10d734e6958",
        "551dfecea9667c8ae68e51a327f1ad9712573e27"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Jul 13 16:36:27 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 13 16:36:28 2015 +0000"
      },
      "message": "Merge \"Always output upstream if specified\""
    },
    {
      "commit": "80e3a37ab546984bd8494a12204ea10d734e6958",
      "tree": "1a5914b71f582f8cfa931df5018aec315e62add8",
      "parents": [
        "bb4a1b5274240235812fe4d533a946b16d6e387e",
        "6944cdb8d1b4765b4e9e6b3f3a09b65495da7ff3"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sat Jul 11 14:01:15 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jul 11 14:01:16 2015 +0000"
      },
      "message": "Merge changes Iaefcbe14,I697a0f64,I19bfe9fe,I06e942c4\n\n* changes:\n  forall: use smart sync override manifest if it exists\n  sync: Remove smart sync override manifest when not in smart sync mode\n  forall: Don\u0027t try to get lrev of projects in mirror workspace\n  sync: Improve error message when writing smart sync manifest fails\n"
    },
    {
      "commit": "bb4a1b5274240235812fe4d533a946b16d6e387e",
      "tree": "cef11406872fd7e341c712e4f61641bc5a1842dd",
      "parents": [
        "c5ceeb16258d5d787845840036c57f9fdfdcad34",
        "87ea5913f2bd10351ae422985154e740e601669e"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Jul 10 22:00:47 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 10 22:00:47 2015 +0000"
      },
      "message": "Merge \"Improve error message when syncing a project with invalid groups.\""
    },
    {
      "commit": "551dfecea9667c8ae68e51a327f1ad9712573e27",
      "tree": "aefc1d4d14ee6078363bfda3acb4e182f7499ebd",
      "parents": [
        "c5ceeb16258d5d787845840036c57f9fdfdcad34"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Jul 10 14:54:54 2015 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Jul 10 14:59:10 2015 -0700"
      },
      "message": "Always output upstream if specified\n\nPreviously, in running the `manifest` command, we wouldn\u0027t output the\nupstream if the default upstream would include the pinned sha1.\nHowever, now that fetching refs/heads/* doesn\u0027t guarantee that we will\nhave the sha1, we need to always output the specified upstream branch.\n\nChange-Id: Ib8b409a8ecd439397b38ee9649c530407797f841\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": "87ea5913f2bd10351ae422985154e740e601669e",
      "tree": "6ab009f70ea9339176b4fdabf88e8ad85cb0979b",
      "parents": [
        "185307d1dd1e63a8cf139c55f26895a6b378d43b"
      ],
      "author": {
        "name": "Jarkko Pöyry",
        "email": "jpoyry@google.com",
        "time": "Fri Jun 19 15:39:25 2015 -0700"
      },
      "committer": {
        "name": "Jarkko Pöyry",
        "email": "jpoyry@google.com",
        "time": "Fri Jun 19 15:55:15 2015 -0700"
      },
      "message": "Improve error message when syncing a project with invalid groups.\n\nChange-Id: Iaf5c2a0f00667dc09bcf455cfe2f39bfbaa2bfc0\n"
    },
    {
      "commit": "185307d1dd1e63a8cf139c55f26895a6b378d43b",
      "tree": "2945070b5db6ae3379e7e7ce5c7625ea8e7e1606",
      "parents": [
        "c116f94261cf0e6d33b3910b68d08d3b0e4bccdd",
        "4c426ef1d4c1399feb170447ca3090810ab3c02e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Jun 09 00:14:13 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 09 00:14:13 2015 +0000"
      },
      "message": "Merge \"Teach _LinkFile._Link to handle globs.\""
    },
    {
      "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": "b1d1fd778d5d3d3217023df8b428c5b7fa22a337",
      "tree": "a26fa0c97b6e1f11cc09b2bc0c79a33cf392e4f4",
      "parents": [
        "be4456cf249f29371eef41bed4e15f6d3c1a2cc0"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Jun 03 17:02:26 2015 +0100"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jun 04 00:22:23 2015 +0000"
      },
      "message": "git_config: fix _SaveJson typo\n\nChange-Id: I35ca2b3733e6d1508669f9a6690c6645c582912e\n"
    },
    {
      "commit": "be4456cf249f29371eef41bed4e15f6d3c1a2cc0",
      "tree": "e3dfa419b63de611a4f24a7056943f8470233f1f",
      "parents": [
        "cf738ed4a1acacc1dac5746ab3090f56c6f5df86"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Jun 03 16:59:18 2015 +0100"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jun 04 00:21:16 2015 +0000"
      },
      "message": "error: fix typos\n\nChange-Id: I09c47024ef54c360ea3c15c5d4f169e13444e412\n"
    },
    {
      "commit": "cf738ed4a1acacc1dac5746ab3090f56c6f5df86",
      "tree": "32d7f056e01af700324e05d776fe172038eb055e",
      "parents": [
        "6cfc68e1e635162926d27f3421f1dbc729c55116"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Jun 03 16:50:39 2015 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Jun 03 16:50:39 2015 +0100"
      },
      "message": "git_command: only decode when needed\n\nstrings no longer need decoding, since unicode is str\n\nChange-Id: I9516d298fee7ddc058452394b7759327fe3aa7a8\n"
    },
    {
      "commit": "6cfc68e1e635162926d27f3421f1dbc729c55116",
      "tree": "be03513ffb7232002969971c5355dda81fe32ee5",
      "parents": [
        "472ce9f5fa61a953b9275cfe36b8b86f3dad5c73"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Jun 03 16:39:32 2015 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed Jun 03 16:39:32 2015 +0100"
      },
      "message": "decode the buffer before appending\n\noutput from a process is in bytes in python3. we need\nto decode it.\n\nin Python3, bytes don\u0027t have an encode attribute. use this\nto identify it.\n\nChange-Id: I152f2ec34614131027db680ead98b53f9b321ed5\n"
    },
    {
      "commit": "4c426ef1d4c1399feb170447ca3090810ab3c02e",
      "tree": "d824eb1ac7f677979c1fce3ac984db48f210bca3",
      "parents": [
        "472ce9f5fa61a953b9275cfe36b8b86f3dad5c73"
      ],
      "author": {
        "name": "Wink Saville",
        "email": "wink@saville.com",
        "time": "Wed Jun 03 08:05:17 2015 -0700"
      },
      "committer": {
        "name": "Wink Saville",
        "email": "wink@saville.com",
        "time": "Wed Jun 03 08:05:17 2015 -0700"
      },
      "message": "Teach _LinkFile._Link to handle globs.\n\nThis allows a project to use globs in the linkfile src attribute. When\na glob is used in the src the dest field must be a directory. Then\n_LinkFile._Link(self) calls will create symbolic links in the dest\ndirectory to all of the entries in the src as defined by the glob\nspecification.\n\nBelow all of the entries in master-configs/ will have symbolic links\nin \u003croot dir\u003e/configs directory:\n\n  \u003cproject name\u003d\"helloworld.git\" path\u003d\"apps/helloworld\"\u003e\n      \u003clinkfile src\u003d\"master-configs/*\" dest\u003d\"configs\"/\u003e\n  \u003c/project\u003e\n\nChange-Id: Idfed8fa47c83d2ca6e2b8e867731b8e2f9e2eb47\n"
    },
    {
      "commit": "472ce9f5fa61a953b9275cfe36b8b86f3dad5c73",
      "tree": "bce9a6d31b48a6cde2bf0f09b34e7fd3923500d7",
      "parents": [
        "0184dcc510969d6e7cb2525da8e7e2a87ed5f012",
        "c4b301f988ad7499257538070f78f5e50e61b3ae"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Jun 02 00:14:43 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 02 00:14:43 2015 +0000"
      },
      "message": "Merge changes I32da12c2,Ie4a65b3e\n\n* changes:\n  Skip sleep and retry if git remote update exits with a signal\n  Catch exceptions in project list generator\n"
    },
    {
      "commit": "0184dcc510969d6e7cb2525da8e7e2a87ed5f012",
      "tree": "26bfadcbc767c526e1f275cc7f52ac9d1490bf16",
      "parents": [
        "35de228f331101ba17bbc658c3cd910e54725517"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue May 05 00:24:54 2015 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Jun 01 01:24:38 2015 +0000"
      },
      "message": "Make linkfile symlinks relative\n\nThe source (target) of the symlink is specified relative to a project\nwithin a tree, and the destination is specified relative to the top\nof the tree, so it should always be possible to create a relative symlink\nto the target file.  Relative symlinks will allow moving an entire tree\nwithout breaking the symlink, and copying a tree (with -p) without leaving\na symlink to the old tree.\n\nChange-Id: I16492a8b59a137d2abe43ca78e3b212e2c835599\n"
    },
    {
      "commit": "c4b301f988ad7499257538070f78f5e50e61b3ae",
      "tree": "f19c83f4c06684361ffb2fec3028b34f89211a29",
      "parents": [
        "31a7be561ef34c134447d92a3d391b17ecd7c790"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed May 13 00:10:02 2015 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed May 13 18:11:34 2015 +0000"
      },
      "message": "Skip sleep and retry if git remote update exits with a signal\n\nPressing ctrl-c during repo sync often hangs for 30 to 45 seconds\ndue to the time.sleep and retry in _RemoteFetch.  If git exits with\na signal, for example -2 for SIGINT triggered by ctrl-c, skip the\nsleep and retry.\n\nChange-Id: I32da12c2dcc96d9cc0b12a066e824b12ebfb52a0\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": "384b3c594831e79348a2eb98809ef9f3e34f6aa2",
      "tree": "12c9b77879b0937358a9a5fa96d2a1c562180066",
      "parents": [
        "4ccad7554b958c701653c41a72442cccf301e71a"
      ],
      "author": {
        "name": "Kevin Degi",
        "email": "kdegi@codeaurora.org",
        "time": "Thu Oct 16 16:02:58 2014 -0600"
      },
      "committer": {
        "name": "Kevin Degi",
        "email": "kdegi@codeaurora.org",
        "time": "Tue May 12 09:15:53 2015 -0600"
      },
      "message": "Fail if gitdir does not point to objdir during sync\n\nThere are a set of cases that can cause the git directory in\n.repo/projects to point to a directory in .repo/project-objects that\nis not the one specified in the manifest. This results in a tree that\nis not sane, and so should cause a failure.\n\nIn order to reproduce the failure case:\n1) Sync to any manifest\n2) Change the \u0027name\u0027 of a project to a different repository. Leave the\n   \u0027path\u0027 the same.\n3) Resync the modified project. The project-objects directory will not\n   be created, and the projects directory will remain pointed at the old\n   project-objects.\n\nChange-Id: Ie6711b1c773508850c5c9f748a27ff72d65e2bf2\n"
    },
    {
      "commit": "35de228f331101ba17bbc658c3cd910e54725517",
      "tree": "69f4b4bd1263c8a6f9ab5186c7cf3e9a1b7839a8",
      "parents": [
        "ace097c36ef2d27991cb8186ddd65ce365f28ee8",
        "382582728ea779aa4cc5e8a7eba2b7b2167efabc"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon May 11 09:20:52 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon May 11 09:20:54 2015 +0000"
      },
      "message": "Merge \"Don\u0027t attempt to create \"fully qualified names\" for SHA1s\""
    },
    {
      "commit": "ace097c36ef2d27991cb8186ddd65ce365f28ee8",
      "tree": "3f2b98cff76755a0904ca224b5e618e902d82406",
      "parents": [
        "b4d43b9f664d6472b6c1e91c98f951037d00cea5",
        "b155354034a7ac18d83ab28cc3756dc36591435f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri May 01 07:51:52 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 01 07:51:52 2015 +0000"
      },
      "message": "Merge \"Add option on sync to avoid fetching from remotes for existing sha1\""
    },
    {
      "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": "382582728ea779aa4cc5e8a7eba2b7b2167efabc",
      "tree": "40cefffc2092d6813021d904af1ead84b292c57e",
      "parents": [
        "4ccad7554b958c701653c41a72442cccf301e71a"
      ],
      "author": {
        "name": "Alexandre Boeglin",
        "email": "alexandre.boeglin@parrot.com",
        "time": "Thu Apr 30 14:50:33 2015 +0200"
      },
      "committer": {
        "name": "Alexandre Boeglin",
        "email": "alexandre.boeglin@parrot.com",
        "time": "Thu Apr 30 14:54:47 2015 +0200"
      },
      "message": "Don\u0027t attempt to create \"fully qualified names\" for SHA1s\n\nDoing so breaks \"repo init -b \u003cSHA1\u003e\".\n\nChange-Id: Ic071a1b099a9125db22ea446d7e92e7854d69b37\n"
    },
    {
      "commit": "b4d43b9f664d6472b6c1e91c98f951037d00cea5",
      "tree": "c75e26c4763222dde9526443781fd8f2d47f74fd",
      "parents": [
        "4ccad7554b958c701653c41a72442cccf301e71a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Apr 28 18:28:12 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Apr 30 10:32:37 2015 +0900"
      },
      "message": "Add --prune option to fetch when syncing a mirror repo\n\nWhen syncing a mirror repo, add the --prune option to the fetch\ncommand to force removal of stale refs from the mirror.\n\nChange-Id: I4b43b2a5c86b9915627887c16f6569066f3ab978\n"
    },
    {
      "commit": "4ccad7554b958c701653c41a72442cccf301e71a",
      "tree": "ce4fc626c19967f4167577625479e8df9c51f106",
      "parents": [
        "403b64edf468204597559cf61b346b93af9af232"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Apr 29 10:45:37 2015 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Apr 29 10:45:37 2015 -0700"
      },
      "message": "Fix substitution err for schemeless manifest urls\n\nPreviously, we used a regex that would only remove a phony string from\na url if it existed, but we recently replaced that with a slice.  This\nchange goes back to the previous behavior.\n\nChange-Id: I8baf527be01c4b49d45b903b31a1cd6315563d5b\n"
    },
    {
      "commit": "403b64edf468204597559cf61b346b93af9af232",
      "tree": "535ad68291d80eaea7986ccfc9dc40946e2e78b0",
      "parents": [
        "a38769cda88fce2e96c02021060a4c7d2cb96cc8"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Apr 27 10:41:33 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Apr 27 10:56:27 2015 +0900"
      },
      "message": "Don\u0027t append branch to fetch spec when syncing to a mirror\n\nAppending the branch to the fetch spec causes sync of a mirror to\nfail for projects that don\u0027t have an explicit revision specified,\nand don\u0027t have a branch of the same name as the default revision.\n\nFor example, a manifest defining a default revision:\n\n \u003cdefault revision\u003d\"master\"\u003e\n\nhaving a project without an explicit revision:\n\n \u003cproject name\u003d\"path/to/project\"\u003e\n\nand not having a branch named \"master\", will cause repo sync to\nfail for that project with the error:\n\n Couldn\u0027t find remote ref refs/heads/master\n\nModify the logic to not append the branch onto the fetch spec when\nsyncing to a mirror.\n\nChange-Id: I5c4457bd125519abf27abe682dea62ad708978c9\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": "44859d02672be7509b8fe9b2d444aa239a849af5",
      "tree": "d13e364f800b935f1332d0bdf3cf5559e35c048c",
      "parents": [
        "33fe4e99f95125a0083e97c4c143d1fb5134cf36",
        "b51f07cd0643388ffe2cefb28899429d9e1131fc"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Apr 08 17:58:33 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 08 17:58:35 2015 +0000"
      },
      "message": "Merge \"status: lose dependence on StringIO\""
    },
    {
      "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": "33fe4e99f95125a0083e97c4c143d1fb5134cf36",
      "tree": "7dca59965898c7e1292cd4ea855f1f4b09ba2019",
      "parents": [
        "4214585073aa0f2e95e79b8956d0fa6849277b27"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Apr 07 11:08:04 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Apr 07 11:10:17 2015 +0900"
      },
      "message": "Remove deprecated `include-ids` setting from pylint config\n\nChange-Id: Ie5ab21e434d24ff862bb5e0c263761370d71f56f\n"
    },
    {
      "commit": "4214585073aa0f2e95e79b8956d0fa6849277b27",
      "tree": "6fd78a7387bfc32f60735ef960072ae282861bc6",
      "parents": [
        "04f2f0e1860d10a4cc2a7b8ef7cc1665f51094b9",
        "bdf7ed230127084a684826868d64b502e4bd6760"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Apr 07 02:06:48 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 07 02:06:49 2015 +0000"
      },
      "message": "Merge \"Pylint and PEP8 fixes for color.py\""
    },
    {
      "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": "04f2f0e1860d10a4cc2a7b8ef7cc1665f51094b9",
      "tree": "f1df7b5d37b98c01d5b8eb49051564fea547dfa6",
      "parents": [
        "cb07ba7e3d466a98d0af0771b4f3e21116d69898"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Oct 01 17:22:46 2014 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Apr 01 17:43:36 2015 +0000"
      },
      "message": "Maintain fully qualified tracking branches\n\nWhen running repo branch, the git merge line (in many circumstances)\nis set to the revision of the project specified in the manifest.  If\nthis is a branch name that is not fully-qualified, we will end up with\nsomething like \"merge \u003d master\" instead of \"merge \u003d refs/heads/master\".\nThis change examines the revision if we are going to use that and\nchanges branch short names to fully qualified branch names.\n\nChange-Id: Ie1be94fb8d45df8eeac44a47f729a3819a05fa81\n"
    },
    {
      "commit": "cb07ba7e3d466a98d0af0771b4f3e21116d69898",
      "tree": "b8c33b2bc0d4f1324cae8e223d64f5a1c7ffcbcd",
      "parents": [
        "23ff7df6a759fcc7b52928d0b009beb9ba1310a6"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Sat Mar 28 23:26:04 2015 +0000"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Mar 31 20:12:44 2015 +0000"
      },
      "message": "Resolve fetch urls more efficiently\n\nInstead of using regex, append the netloc and relative\nscheme lists with the custom scheme.\nThe schemes will only be appended when needed, instead\nof passing X amount of regex replaces.\n\nsee http://bugs.python.org/issue18828 for more details.\n\nChange-Id: I10d26d5ddc32e7ed04c5a412bdd6e13ec59eb70f\n"
    },
    {
      "commit": "23ff7df6a759fcc7b52928d0b009beb9ba1310a6",
      "tree": "ee9715463e390f5bd44286ebfc5254d70cf02ffb",
      "parents": [
        "cc1b1a703ddfc965c0375b80ac6900170fae9b13"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Sat Mar 28 19:42:39 2015 +0000"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Mon Mar 30 21:54:26 2015 +0000"
      },
      "message": "use the max depth instead of unshallow\n\nThis allows the use of older versions of git\n\nChange-Id: I88ea685066603af19896a791829355ddbfa91ffe\n"
    },
    {
      "commit": "cc1b1a703ddfc965c0375b80ac6900170fae9b13",
      "tree": "08d71a177c3205d9df7df234852a58206ebc5161",
      "parents": [
        "9c76f67f13c033b67b23206798701548207dd880"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Sat Mar 28 19:33:59 2015 +0000"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Mon Mar 30 21:53:25 2015 +0000"
      },
      "message": "Revert \"Change the min git version from 1.7.2 to 1.8.2\"\n\nThis reverts commit 52b99aa91d0fbb5ea363b5febb367d602dbc56db.\n\nChange-Id: I01d93704c92f7af1ca2b36dbc9509ee1290e2d3c\n"
    },
    {
      "commit": "bdf7ed230127084a684826868d64b502e4bd6760",
      "tree": "49760da946dd1611dd118a0028a7e05ef3a29b73",
      "parents": [
        "9c76f67f13c033b67b23206798701548207dd880"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Sat Mar 28 21:10:17 2015 +0000"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Sat Mar 28 21:12:27 2015 +0000"
      },
      "message": "Pylint and PEP8 fixes for color.py\n\nChange-Id: I1a676e25957a7b5dd800d2585a2ec7fe75295668\n"
    },
    {
      "commit": "9c76f67f13c033b67b23206798701548207dd880",
      "tree": "e089031b26a7fb97ee099bb6f7bdb21deaebafc0",
      "parents": [
        "52b99aa91d0fbb5ea363b5febb367d602dbc56db"
      ],
      "author": {
        "name": "John L. Villalovos",
        "email": "john.l.villalovos@intel.com",
        "time": "Mon Mar 16 20:49:10 2015 -0700"
      },
      "committer": {
        "name": "John L. Villalovos",
        "email": "john.l.villalovos@intel.com",
        "time": "Thu Mar 26 11:43:55 2015 -0700"
      },
      "message": "Always capture output for GitCommand\n\nSwitch the GitCommand program to always capture the output for stdout\nand stderr.  And by default print the output while running.\n\nThe options capture_stdout and capture_stderr have effectively become\noptions to supress the printing of stdout and stderr.\n\nUpdate the \u0027git fetch\u0027 to use \u0027--progress\u0027 so that the progress messages\nwill be displayed.  git checks if the output location isatty() and if it\nis not a TTY it will by default not print the progress messages.\n\nChange-Id: Ifdae138e008f80a59195f9f43c911a1a5210ec60\n"
    },
    {
      "commit": "52b99aa91d0fbb5ea363b5febb367d602dbc56db",
      "tree": "2a54378a9183eff42df6516e92303222ce4065e1",
      "parents": [
        "9371979628a945a1caf526aeff84a1ac68a22efe"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Mar 18 14:41:07 2015 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Mar 18 21:43:39 2015 +0000"
      },
      "message": "Change the min git version from 1.7.2 to 1.8.2\n\nThis is needed for the --unshallow option of git fetch.\n\nChange-Id: Ifdc5cec6130315c643924328fea425f1b94cb04a\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": "20860042617d43ed192d60659cd92c71ea251519",
      "tree": "9f4e6c6b91e37bd1b254c7383b2796ffd709733b",
      "parents": [
        "0402cd882a05b22ddb4d3e10bf816f5165e1e11e",
        "2338788050bfacb64ebb23381b9874a9a7fde60c"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Mar 11 17:25:45 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 11 17:25:45 2015 +0000"
      },
      "message": "Merge \"Don\u0027t exit with error on HTTP 401 when downloading clone bundle\""
    }
  ],
  "next": "2338788050bfacb64ebb23381b9874a9a7fde60c"
}
