)]}'
{
  "log": [
    {
      "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\""
    },
    {
      "commit": "2338788050bfacb64ebb23381b9874a9a7fde60c",
      "tree": "a6ed81974dcc6236d96198a95868d566d2ca15f7",
      "parents": [
        "936183a492373f8a54b6ecaa806e252d08b793c5"
      ],
      "author": {
        "name": "Pascal Bach",
        "email": "pascal.bach@siemens.com",
        "time": "Fri Feb 13 16:23:12 2015 +0100"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Mar 11 07:43:40 2015 +0000"
      },
      "message": "Don\u0027t exit with error on HTTP 401 when downloading clone bundle\n\nIf the server returns HTTP 401 (unauthorized) when attempting to\ndownload clone bundle files, ignore it and continue, rather than\nexiting with a fatal error.\n\nChange-Id: I2c7ee03e149c354c7e4ad6ea1ebf266534778fe1\n"
    },
    {
      "commit": "0402cd882a05b22ddb4d3e10bf816f5165e1e11e",
      "tree": "17b4d948f9b27f8475d07600315de0733c6cb994",
      "parents": [
        "936183a492373f8a54b6ecaa806e252d08b793c5"
      ],
      "author": {
        "name": "Jakub Vrana",
        "email": "jakubvrana@google.com",
        "time": "Tue Sep 09 15:39:15 2014 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Mar 11 07:42:17 2015 +0000"
      },
      "message": "Add space between project path and branch in repo status.\n\nCurrently, paths longer than 39 chars have no space after them so it looks\nlike this:\n\nproject path/branch master\n\nChange-Id: I4c1bb13648ac099ade8a8d4ebafa04131571f842"
    },
    {
      "commit": "936183a492373f8a54b6ecaa806e252d08b793c5",
      "tree": "72dca53980e7c8a09985411c9603ba1d6e1c3e01",
      "parents": [
        "85e82670315cc2a6ac020430ae3f7e46862ff5d9"
      ],
      "author": {
        "name": "Yann Droneaud",
        "email": "ydroneaud@opteya.com",
        "time": "Thu Sep 12 10:51:18 2013 +0200"
      },
      "committer": {
        "name": "Filipe Brandenburger",
        "email": "filbranden@google.com",
        "time": "Fri Mar 06 13:23:27 2015 -0800"
      },
      "message": "git_config: add support for remote \u0027.\u0027\n\nAs a fix for issue #149, this patch add support for the remote \u0027.\u0027\n(local).\n\nAs an alias for the local repository, remote \u0027.\u0027 is lacking a fetch \u003d\nconfig in .git/config.\n\nWithout such refspec, repo info --overview is not able to process a\nlocal tracking branch.\n\nv2: Check for name \u003d\u003d \u0027.\u0027 before checking if merge starts with refs/,\n    since the case where it\u0027s not is invalid.\n\nSigned-off-by: Yann Droneaud \u003cydroneaud@opteya.com\u003e\nSigned-off-by: Filipe Brandenburger \u003cfilbranden@google.com\u003e\n\nChange-Id: I8c8fd8602cd68baecb530301ae41d37d751ec85d\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": "e30f46b957c9c192f09a4907e3e7e802c9b782f8",
      "tree": "5133f8bec8c780005dc307a6a124288e19e892fb",
      "parents": [
        "e4978cfbe32ce3c01b894f768a11c4fb56645e76"
      ],
      "author": {
        "name": "John L. Villalovos",
        "email": "john.l.villalovos@intel.com",
        "time": "Wed Feb 25 14:27:02 2015 -0800"
      },
      "committer": {
        "name": "John L. Villalovos",
        "email": "john.l.villalovos@intel.com",
        "time": "Wed Feb 25 14:29:28 2015 -0800"
      },
      "message": "Print stderr output from git command for RemoteFetch\n\nThe stderr output generated by git during a RemoteFetch was not being\nprinted.  This information is useful so print it.\n\nChange-Id: I6e6ce12c4a57e5ca2359f76ce14f2fcbbc37a5ef\n"
    },
    {
      "commit": "e4978cfbe32ce3c01b894f768a11c4fb56645e76",
      "tree": "f68298671e5d6d79f4b435f20a6fb97edb5b435b",
      "parents": [
        "126e298214df0ce364b9dae0aec12b7b02f627ce"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Feb 03 18:06:16 2015 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Feb 10 14:44:05 2015 -0800"
      },
      "message": "Ensure the repo project is never fetched with partial depth\n\nIf the repo project is synced with partial depth, then the tags\nwon\u0027t be fetched and users will be told the newest sha1 in the\nstable branch isn\u0027t signed.\n\nChange-Id: I107df97b4836b928c76aa33a700fa35d1705ae09\n"
    },
    {
      "commit": "126e298214df0ce364b9dae0aec12b7b02f627ce",
      "tree": "0a11ceb83a40dd2d7f5353cab84ac81d0269b87b",
      "parents": [
        "24245e00946b43d086d8bd55cf4facd00479959a"
      ],
      "author": {
        "name": "John L. Villalovos",
        "email": "john.l.villalovos@intel.com",
        "time": "Thu Jan 29 21:58:12 2015 -0800"
      },
      "committer": {
        "name": "John L. Villalovos",
        "email": "john.l.villalovos@intel.com",
        "time": "Tue Feb 03 13:49:51 2015 -0800"
      },
      "message": "Handle case where \u0027git remote prune\u0027 needs to be run\n\nHandle the case when this error occurs:\n    error: some local refs could not be updated; try running\n     \u0027git remote prune origin\u0027 to remove any old, conflicting branches\n\nThis is usually caused by a reference getting changed from a file to a\ndirectory.\n\nFor example:\n  Initially someone creates a branch \u0027foo\u0027 and it is stored as:\n    .git/refs/remotes/origin/foo\n\n  Then later on it is decided to change the layout structure where \u0027foo\u0027\n  is a directory with branches below it:\n    .git/refs/remotes/origin/foo/master\n\n  The problem occurs when someone still has\n  \u0027.git/refs/remotes/origin/foo\u0027 on their system and does a repo sync.\n  When this occurs the error message for needing to do a\n  \u0027git remote prune origin\u0027 occurs.\n\nNow when doing a \u0027git fetch\u0027 if the error message from git says that a\n\u0027git remote prune\u0027 is needed, it will do the prune and then retry the\nfetch.\n\nChange-Id: I4c6f5aa6bd932f0ef7a39134400bedd52e82f633\nSigned-off-by: John L. Villalovos \u003cjohn.l.villalovos@intel.com\u003e\n"
    },
    {
      "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": "24245e00946b43d086d8bd55cf4facd00479959a",
      "tree": "2801423f8c09bf88d1f41756de186a0a2b78f787",
      "parents": [
        "db6f1b088425d0c5060f362e25c4028b2f2adb8c",
        "f2fad61bde10e5ffad3a5d683af90b1b35f9d99b"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sat Jan 31 12:44:43 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jan 31 12:44:45 2015 +0000"
      },
      "message": "Merge \"Add missing documentation of --current-branch option on sync command\""
    },
    {
      "commit": "db6f1b088425d0c5060f362e25c4028b2f2adb8c",
      "tree": "18bbc19e3cfdf525905d85fd1635e69a9f6805d0",
      "parents": [
        "ee6908442102008df57b46271323d9b06d5fdfbf",
        "f97e8383a3b180fb5aa186f8cebc4c98d7787778"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Jan 30 19:36:04 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 30 19:36:06 2015 +0000"
      },
      "message": "Merge \"Use depth flag when fetching\""
    },
    {
      "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": "ee6908442102008df57b46271323d9b06d5fdfbf",
      "tree": "27cec0e64125fc04c4286f315f3682c1d2ded0f1",
      "parents": [
        "d37d43f036dfbbdee6a3979b73d1dce3d3b96e19",
        "3000cdad2237abe1f956f8109e385891e1a96d17"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jan 28 20:29:37 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 28 20:29:37 2015 +0000"
      },
      "message": "Merge \"Handle shallow checkout of SHA1 pinned repos\""
    },
    {
      "commit": "d37d43f036dfbbdee6a3979b73d1dce3d3b96e19",
      "tree": "70b5cf21c8f5cb0919a6e61840bdc349f3d72265",
      "parents": [
        "7bdac71087a51be4655a0280a719a0b401614e47",
        "b9d9efd39413248196161765811b84f6b90cf07d"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jan 28 20:29:04 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 28 20:29:05 2015 +0000"
      },
      "message": "Merge \"Don\u0027t delete hooks in .git/hooks\""
    },
    {
      "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": "f97e8383a3b180fb5aa186f8cebc4c98d7787778",
      "tree": "22f8efcac598e4f961528c5e6373951a0a63f94b",
      "parents": [
        "497bde4de500416fb428a8cd57b9c62708349924"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jan 21 11:12:46 2015 -0800"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jan 22 01:20:22 2015 +0000"
      },
      "message": "Use depth flag when fetching\n\nCurrently, we only use the depth flag when cloning.  The result is that when\nnew project history has merges, the entire history of the merged branch is\nbrought in and the project becomes unshallow very quickly.  --depth and\nclone-depth are often used to save on space, not just network load, so this\nseems less than ideal.\n\nThis change uses --depth on every fetch (when the user has depth specified),\nnot just the initial clone.  The result is that the given project stays\nconsistently shallow as opposed to growing over time, especially when merges\nare involved.\n\nChange-Id: Iac706cfdad4a555c72f9d9f1119195d38d91df12\n"
    },
    {
      "commit": "3000cdad2237abe1f956f8109e385891e1a96d17",
      "tree": "370e613827df97302ac94c833385f674f56e8a2e",
      "parents": [
        "3eb87cec5cae5f43becfe9fd1ff94de855cac08c"
      ],
      "author": {
        "name": "Bertrand SIMONNET",
        "email": "bsimonnet@google.com",
        "time": "Tue Nov 25 16:19:29 2014 -0800"
      },
      "committer": {
        "name": "Bertrand SIMONNET",
        "email": "bsimonnet@google.com",
        "time": "Wed Jan 21 14:14:23 2015 -0800"
      },
      "message": "Handle shallow checkout of SHA1 pinned repos\n\nWhen doing a shallow checkout SHA1 pinned repos with repo init --depth\u003d1 and\nrepo sync -c, repo would try to fetch only some reference and fail if the exact\nSHA1 repo was missing.\nInstead, when depth is set, fetch only the specific commit.\n\nChange-Id: If3f799d0e78c03faea47f796380bb5e367b11998\n"
    },
    {
      "commit": "b9d9efd39413248196161765811b84f6b90cf07d",
      "tree": "2258680f0e6698bee893be53a62c0525f29ae9c1",
      "parents": [
        "3eb87cec5cae5f43becfe9fd1ff94de855cac08c"
      ],
      "author": {
        "name": "Mitchel Humpherys",
        "email": "mitchelh@codeaurora.org",
        "time": "Thu Jan 15 22:40:02 2015 -0800"
      },
      "committer": {
        "name": "Mitchel Humpherys",
        "email": "mitchelh@codeaurora.org",
        "time": "Thu Jan 15 22:49:08 2015 -0800"
      },
      "message": "Don\u0027t delete hooks in .git/hooks\n\nWe currently delete all hooks in .git/hooks for each project before\nsymlink\u0027ing in the standard project hooks.  This can be annoying for\nusers who have installed custom git hooks.\n\nThere\u0027s no reason to delete all existing hooks.  Just rip out the\ndeletion code.\n\nChange-Id: I5062a6cd20af700f6d6a17b11ad6c94853987c57\nSigned-off-by: Mitchel Humpherys \u003cmitchelh@codeaurora.org\u003e\n"
    },
    {
      "commit": "497bde4de500416fb428a8cd57b9c62708349924",
      "tree": "3137a3ad894bbc60fbb28d05c21bc1d1e9a3e989",
      "parents": [
        "4abf8e6ef81e78469148b156ae2d2da70ace627a"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Fri Jan 02 13:58:05 2015 -0800"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Fri Jan 02 13:58:05 2015 -0800"
      },
      "message": "Respect --quiet when looking up bundle cookie file\n\nChange-Id: I02a244132c49e4bb50ecda978974d6d2b220f6d1\n"
    }
  ],
  "next": "4abf8e6ef81e78469148b156ae2d2da70ace627a"
}
