)]}'
{
  "log": [
    {
      "commit": "e4433653db9026fc89865a2d7bbbfb0392aaa387",
      "tree": "56ba480f3dab71f047f80fe33eca41c27f76aef8",
      "parents": [
        "d9de945d8a7842cdb470ee07ee44d692ff5297b5"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Sep 13 18:06:07 2016 -0400"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Sep 14 01:28:30 2016 -0400"
      },
      "message": "repo: add comment for updating maintainer keys\n\nChange-Id: Ic1e7557f9597234033561ab9fb3104b87e30015e\n"
    },
    {
      "commit": "d9de945d8a7842cdb470ee07ee44d692ff5297b5",
      "tree": "840407148d499bec2675249582deb30f27d08140",
      "parents": [
        "e5c0ea0a959e72ddf6ace9c5a75d86de9e7fc1df",
        "163a3be18b92b9deb0a99795fab7b6ca819f1ecc"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Sep 14 05:20:36 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 14 05:20:36 2016 +0000"
      },
      "message": "Merge \"upload: short circuit when nothing is pending\""
    },
    {
      "commit": "e5c0ea0a959e72ddf6ace9c5a75d86de9e7fc1df",
      "tree": "750d5b10252bf5e1dac5f75f7a7de1e2428372d3",
      "parents": [
        "7a77c16d376f504bd06d017ba10c91e3a6073b08"
      ],
      "author": {
        "name": "Vadim Bendebury",
        "email": "vbendeb@chromium.org",
        "time": "Fri Sep 05 10:26:31 2014 -0700"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Sep 14 00:17:45 2016 -0400"
      },
      "message": "Consider local project to be default for \u0027repo start\u0027\n\nThe requirement to explicitly specify the local project when starting\na new repo branch is somewhat counter intuitive.\n\nThis patch uses the current directory\u0027s git tree as the default\nproject.\n\nTested by running\n\n  \u0027repo start \u003cname\u003e\u0027\n\nobserved that the result is the same as if running\n\n  \u0027repo start \u003cname\u003e .\u0027\n\nChange-Id: If106caa801b4cd5ba70dbe8354a227d59f100aa3\n"
    },
    {
      "commit": "163a3be18b92b9deb0a99795fab7b6ca819f1ecc",
      "tree": "947ff65483b92eddda1563fc1e46810ee31bf05a",
      "parents": [
        "7a77c16d376f504bd06d017ba10c91e3a6073b08"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Mon Apr 04 17:31:32 2016 -0400"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Sep 14 00:16:37 2016 -0400"
      },
      "message": "upload: short circuit when nothing is pending\n\nWhen nothing is pending, most of this code is already short-circuited.\nHoist the single check up to make this more obvious/slightly faster.\n\nChange-Id: Iec3a7e08eacd23a7c5f964900d5776bf5252c804\n"
    },
    {
      "commit": "7a77c16d376f504bd06d017ba10c91e3a6073b08",
      "tree": "bcaeddd86d4cf892db5e7866c0c49ba6059f6fd7",
      "parents": [
        "39252ba028012fd14e4e283217d842fb80206c52"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri Sep 02 11:12:28 2016 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri Sep 02 11:12:28 2016 +0900"
      },
      "message": "Update mailmap\n\nOrder the entries alphabetically and add a couple more.\n\nChange-Id: I8d98e8a5a1dd6868b566a42428030d2040b8af7a\n"
    },
    {
      "commit": "39252ba028012fd14e4e283217d842fb80206c52",
      "tree": "e4c5f2d98218dff3102ca95133fffffb61320c5c",
      "parents": [
        "71e4cea6deeccafbd3f4c16f2faa157a0a62750c"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Aug 23 14:06:59 2016 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Aug 23 14:19:00 2016 -0700"
      },
      "message": "gitc: Lower concurrent ls-projects requests\n\nToo many requests at the same time is causing 502 errors.\n\nChange-Id: Ic8fbb2fbb7fb6014733fa5be018d2dc02472f704\n"
    },
    {
      "commit": "71e4cea6deeccafbd3f4c16f2faa157a0a62750c",
      "tree": "b0e889845e7977ce1d7825d6da551b391e7151ba",
      "parents": [
        "c4c2b066d122d841258ab3efe9adc99a99dc76ea"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Tue Aug 16 12:05:09 2016 -0700"
      },
      "committer": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Thu Aug 18 17:06:26 2016 -0700"
      },
      "message": "RepoHook: do not list options twice during hash based approval\n\nInstead of\n\n  Do you want to allow this script to run (yes/yes-never-ask-again/NO)? (yes/always/NO)?\n\nask\n\n  Do you want to allow this script to run (yes/always/NO)?\n\nChange-Id: I5f5a2d0e88086a8d85e54fb8623a62d74a20956a\nSigned-off-by: Jonathan Nieder \u003cjrn@google.com\u003e\n"
    },
    {
      "commit": "c4c2b066d122d841258ab3efe9adc99a99dc76ea",
      "tree": "30e6c54e7e603fecc820bae20e792389f2cf312d",
      "parents": [
        "6a0a3648f18342a6cacd0550d8b79384599d64c9"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 17 13:16:31 2016 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 17 13:58:17 2016 +0900"
      },
      "message": "Increment the wrapper version\n\nThere have been a number of changes in the repo wrapper since the last\nincrement that was done in fee390ee:\n\n- 9711a98 init: Add --no-clone-bundle option\n- 631d0ec Support non-ASCII GNUPGHOME environment variable\n- 4088eb4 repo: Cleaned up pylint/pep8 violations\n- 5553628 repo: Add check of REPO_URL env variable\n- 745b4ad Fix gitc-init behavior\n- d3ddcdb Ignore clone.bundle on HTTP 501, i.e. Not Implemented\n\nChange-Id: I3f763ef0ec2df2d726dff429021b48ad474148f1\n"
    },
    {
      "commit": "6a0a3648f18342a6cacd0550d8b79384599d64c9",
      "tree": "cafc60ffe24e52f46b184e5ef8ac122f045045c2",
      "parents": [
        "6118faa1185cd49131eb61baf36a3b542ae346ff",
        "9711a98d6c72430491361a6c77206b1a48007064"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 17 04:57:28 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 17 04:57:28 2016 +0000"
      },
      "message": "Merge \"init: Add --no-clone-bundle option\""
    },
    {
      "commit": "6118faa1185cd49131eb61baf36a3b542ae346ff",
      "tree": "5332e11d2b4f368e9303bd32541e0cb722531f4e",
      "parents": [
        "183c52ab0298325c524ed722ef830d823b832569",
        "438eade413b44d3713f020e672ec74a8597efbfe"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 17 04:04:14 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 17 04:04:14 2016 +0000"
      },
      "message": "Merge \"init: Respect --quiet option when synching manifest repository\""
    },
    {
      "commit": "183c52ab0298325c524ed722ef830d823b832569",
      "tree": "d4b7d04d7a04830a43fb207d2393a75950629aa2",
      "parents": [
        "58f85f9a30d6f5a7809c6cc6fa2ed6c0a8811c3c",
        "76a4a9df86e9f969caf1fdd9e6d2f3ec5f18e94f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 17 01:00:11 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 17 01:00:12 2016 +0000"
      },
      "message": "Merge \"project: Set config option to skip lfs smudge filter\""
    },
    {
      "commit": "58f85f9a30d6f5a7809c6cc6fa2ed6c0a8811c3c",
      "tree": "bf4104a876874112ec8a768335bd32285f6129b5",
      "parents": [
        "befaec1e56e70582249f6cd4a5f9de5c012ad718",
        "40252c20f75188147558c0135bf71de907e01442"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Tue Aug 16 18:05:23 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 16 18:05:23 2016 +0000"
      },
      "message": "Merge \"RepoHook: allow users to approve hooks via manifests\""
    },
    {
      "commit": "40252c20f75188147558c0135bf71de907e01442",
      "tree": "d20ffbc8160430782680e10ce121b678cdc8e940",
      "parents": [
        "69297c1b771bbbd05b63e965a524de6860d15d8c"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Mon Aug 15 21:23:44 2016 -0400"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Aug 16 13:02:52 2016 -0400"
      },
      "message": "RepoHook: allow users to approve hooks via manifests\n\nThe constant prompting when registered hooks change can be tedious and\nhas a large multiplication factor when the project is large (e.g. the\nAOSP).  It gets worse as people want to write more checks, hooks, docs,\nand tests (or fix bugs), but every CL that goes in will trigger a new\nprompt to approve.\n\nLet\u0027s tweak our trust model when it comes to hooks.  Since people start\noff by calling `repo init` with a URL to a manifest, and that manifest\ndefines all the hooks, anchor trust in that.  This requires that we get\nthe manifest over a trusted link (e.g. https or ssh) so that it can\u0027t\nbe MITM-ed.  If the user chooses to use an untrusted link (e.g. git or\nhttp), then we\u0027ll fallback to the existing hash based approval.\n\nBug: Issue 226\nChange-Id: I77be9e4397383f264fcdaefb582e345ea4069a13\n"
    },
    {
      "commit": "76a4a9df86e9f969caf1fdd9e6d2f3ec5f18e94f",
      "tree": "6ad547c43b522e8f6df7fbd6a07d4cced9a692a7",
      "parents": [
        "befaec1e56e70582249f6cd4a5f9de5c012ad718"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Aug 16 12:11:12 2016 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Aug 16 21:55:36 2016 +0900"
      },
      "message": "project: Set config option to skip lfs smudge filter\n\nDuring sync, repo runs `git read-tree --reset -u -v HEAD` which causes\ngit-lfs\u0027s smudge filter to run. However this fails because git-lfs does\nnot work with bare repositories.\n\nAdd lfs.filter configuration to the project config as suggested in the\ncomments on the upstream git-lfs client issue [1]. This prevents the\nsmudge filter from running, and the sync completes successfully.\n\nFor any projects that have LFS objects, `git lfs pull` must be executed.\n\n[1] https://github.com/github/git-lfs/issues/1422\n\nBug: Issue 224\nChange-Id: I091ff37998131e2e6bbc59aa37ee352fe12d7fcd\n"
    },
    {
      "commit": "befaec1e56e70582249f6cd4a5f9de5c012ad718",
      "tree": "60168da9f0f3504846432d61c068b0a5bae510b2",
      "parents": [
        "69297c1b771bbbd05b63e965a524de6860d15d8c"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Aug 16 00:08:37 2016 -0400"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Aug 16 00:14:28 2016 -0400"
      },
      "message": "improve docs\n\nChange-Id: Ide4008f09c2f17f8fb3d85dfffe94544abfdd6a6\n"
    },
    {
      "commit": "9711a98d6c72430491361a6c77206b1a48007064",
      "tree": "d8e08c745b76b6a91dfee3857b5714d249ec8f6b",
      "parents": [
        "438eade413b44d3713f020e672ec74a8597efbfe"
      ],
      "author": {
        "name": "Hu xiuyun",
        "email": "xiuyun.hu@hisilicon.com",
        "time": "Fri Dec 11 11:16:41 2015 +0800"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Aug 15 09:51:48 2016 +0900"
      },
      "message": "init: Add --no-clone-bundle option\n\nBug: Issue 218\nChange-Id: I42ba1f5fb9168875da0df6bdf4fe44c8d6498d54\n"
    },
    {
      "commit": "438eade413b44d3713f020e672ec74a8597efbfe",
      "tree": "91cf69b50b2bb65a7734fec0fb22ac13a09f32d5",
      "parents": [
        "69297c1b771bbbd05b63e965a524de6860d15d8c"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sun Aug 14 18:02:32 2016 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Aug 15 09:51:48 2016 +0900"
      },
      "message": "init: Respect --quiet option when synching manifest repository\n\nChange-Id: Ib58b7dd971670e0888e6428333050700e776b0de\n"
    },
    {
      "commit": "69297c1b771bbbd05b63e965a524de6860d15d8c",
      "tree": "c9d7c7041ff71ca3cb12c6ee65cd72897bfb5dfd",
      "parents": [
        "8016f60a46845fdadbadd88c5746cdaabe476417",
        "631d0ec708b5341ba02b821c120755fd814fbc0b"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Aug 15 00:51:32 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 15 00:51:32 2016 +0000"
      },
      "message": "Merge \"Support non-ASCII GNUPGHOME environment variable\""
    },
    {
      "commit": "8016f60a46845fdadbadd88c5746cdaabe476417",
      "tree": "cf9940274c5c0c518a0e30ca87101f104bd8b133",
      "parents": [
        "f97e72e5ddfcd34400aba384775b793170044f5c",
        "f9fe3e14d2b56140c90a8969892e06aa71127305"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sun Aug 14 08:50:28 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Aug 14 08:50:28 2016 +0000"
      },
      "message": "Merge \"repo: Repo does not always handle \u0027.\u0027 parameter correctly\""
    },
    {
      "commit": "631d0ec708b5341ba02b821c120755fd814fbc0b",
      "tree": "53c234d1a176959e0e0cfc13ffca44d8a636e6a4",
      "parents": [
        "f97e72e5ddfcd34400aba384775b793170044f5c"
      ],
      "author": {
        "name": "Dāvis Mosāns",
        "email": "davispuh@gmail.com",
        "time": "Sat Jul 16 21:11:11 2016 +0300"
      },
      "committer": {
        "name": "Dāvis Mosāns",
        "email": "davispuh@gmail.com",
        "time": "Sat Jul 16 22:10:06 2016 +0300"
      },
      "message": "Support non-ASCII GNUPGHOME environment variable\n\nHere we don\u0027t need to encode this gpg_dir string when using\nPython 2.7 on Linux.\n\nChange-Id: I56724e9511d3b1aea61535e654a45c212130630d\n"
    },
    {
      "commit": "f97e72e5ddfcd34400aba384775b793170044f5c",
      "tree": "cd904224470fe41af46ebbf1e5894377d8d0088c",
      "parents": [
        "faaddc9b4e4c6f6cbac02e90415676fabd177b99"
      ],
      "author": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Fri Jun 24 12:17:14 2016 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Wed Jun 29 11:01:43 2016 -0700"
      },
      "message": "Bail out when manifest is referencing a bad SHA-1 revision.\n\nBUG: Issue 222\nChange-Id: Ie0a64b39922d6fdf1be2989eb514985be8490278\n"
    },
    {
      "commit": "faaddc9b4e4c6f6cbac02e90415676fabd177b99",
      "tree": "ca9fb9f43739196eeb1dd98503040683222a9771",
      "parents": [
        "a36af0767bd180ac82c9ae4a1ae8418aa2dbec3f",
        "01952e6634441291f5909c4e88639593a9a539f7"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Jun 29 05:42:20 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 29 05:42:20 2016 +0000"
      },
      "message": "Merge \"Adds additional crlf clobber avoidance.\""
    },
    {
      "commit": "a36af0767bd180ac82c9ae4a1ae8418aa2dbec3f",
      "tree": "21d9120cc3d666ec57db45d27e35b722b54d2e72",
      "parents": [
        "9d2b14d2ec39245103e9ceb664afb5f0227d9056",
        "037040f73e0940957dff77e74b40d5c85734e712"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Jun 29 01:43:41 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 29 01:43:41 2016 +0000"
      },
      "message": "Merge \"Fix variable assignment\""
    },
    {
      "commit": "037040f73e0940957dff77e74b40d5c85734e712",
      "tree": "07fcdde5ecda3988a915f88ea5e55a71b0c48dda",
      "parents": [
        "203153e7bba61b1b2d782e9e75aef919eab0d54b"
      ],
      "author": {
        "name": "Aymen Bouaziz",
        "email": "aymen.bouaziz@parrot.com",
        "time": "Tue Jun 28 12:27:23 2016 +0200"
      },
      "committer": {
        "name": "Aymen Bouaziz",
        "email": "aymen.bouaziz@parrot.com",
        "time": "Tue Jun 28 12:31:25 2016 +0200"
      },
      "message": "Fix variable assignment\n\nIf upstream string is empty, current_branch_only variable will be assigned\nto an empty string.\n\nThis is not what we expect here as this variable is a boolean.\n\nChange-Id: Ibba935e25a74c2be1e50c88b4b403cf394ba365e\n"
    },
    {
      "commit": "01952e6634441291f5909c4e88639593a9a539f7",
      "tree": "f7015669f919a3f1f09ce36bbbe751359c1148ad",
      "parents": [
        "8b39fb4bc01809f20a2998c55dede18717682a56"
      ],
      "author": {
        "name": "Fredrik Berggren",
        "email": "vesz.wormwood@gmail.com",
        "time": "Fri Apr 22 14:36:11 2016 +0200"
      },
      "committer": {
        "name": "Fredrik Berggren",
        "email": "vesz.wormwood@gmail.com",
        "time": "Wed Jun 22 08:36:45 2016 +0000"
      },
      "message": "Adds additional crlf clobber avoidance.\n\nAdds the hook-scripts to .gitattributes due to the shell-scripts not\nliking CRLF which they will get if a user sets \u0027autocrlf \u003d true\u0027\nin their global gitconfig.\n\nFurther, since the python interpreter can handle either CRLF or LF, \npython-scripts specific line-ending rules have been removed.\n\nChange-Id: I2d6bfd491b2f626b9ca93c40a3a7f2cfba6c54f0\n"
    },
    {
      "commit": "9d2b14d2ec39245103e9ceb664afb5f0227d9056",
      "tree": "505f7aa22c7aaf9082377dc534ac835020f8dd7d",
      "parents": [
        "6685106306550c6bf2ad68887efc1d075a6f72eb"
      ],
      "author": {
        "name": "Stefan Beller",
        "email": "sbeller@google.com",
        "time": "Tue Jun 21 11:48:57 2016 -0700"
      },
      "committer": {
        "name": "Stefan Beller",
        "email": "sbeller@google.com",
        "time": "Tue Jun 21 11:48:57 2016 -0700"
      },
      "message": "pylint: Fix unused-{argument,variable} warning\n\nThis commit fixes 4 out of the remaining 5 pylint warnings:\n\n$ pylint --rcfile\u003d.pylintrc *.py\n************* Module gitc_utils\nW:146, 0: TODO(sbasi/jorg): Come up with a solution to remove the sleep below. (fixme)\nW:130, 6: Unused variable \u0027name\u0027 (unused-variable)\n************* Module main\nW:382,32: Unused argument \u0027fp\u0027 (unused-argument)\nW:382,36: Unused argument \u0027code\u0027 (unused-argument)\nW:382,42: Unused argument \u0027msg\u0027 (unused-argument)\n\nChange-Id: Ie3d77b9a65b7daefaa9aa4b80f4b682c1678fd58\nSigned-off-by: Stefan Beller \u003csbeller@google.com\u003e\n"
    },
    {
      "commit": "6685106306550c6bf2ad68887efc1d075a6f72eb",
      "tree": "c71b70a0278d9f012f5d757554f1f056cd992808",
      "parents": [
        "d64e8eee518714c0d164a0acae03886a3ff675c9"
      ],
      "author": {
        "name": "Stefan Beller",
        "email": "sbeller@google.com",
        "time": "Fri Jun 17 16:40:08 2016 -0700"
      },
      "committer": {
        "name": "Stefan Beller",
        "email": "sbeller@google.com",
        "time": "Fri Jun 17 16:45:48 2016 -0700"
      },
      "message": "pylint: fix indentation in manifest_xml\n\nThis fixes pylint warning:\n\n************* Module manifest_xml\nW:975, 0: Bad indentation. Found 8 spaces, expected 6 (bad-indentation)\n\nChange-Id: I967212f9439430351836ebdc27e442d7b77476e2\nSigned-off-by: Stefan Beller \u003csbeller@google.com\u003e\n"
    },
    {
      "commit": "d64e8eee518714c0d164a0acae03886a3ff675c9",
      "tree": "a9da924fe3b8abca97ac7ac0f2b5d12293a909ba",
      "parents": [
        "8b39fb4bc01809f20a2998c55dede18717682a56"
      ],
      "author": {
        "name": "Stefan Beller",
        "email": "sbeller@google.com",
        "time": "Fri Jun 17 16:36:47 2016 -0700"
      },
      "committer": {
        "name": "Stefan Beller",
        "email": "sbeller@google.com",
        "time": "Fri Jun 17 16:37:24 2016 -0700"
      },
      "message": "pylint: ignore bad-whitespace\n\nThis ignores whitespaces errors, which we have quite a few of in argument\nlists, for example:\n\n************* Module git_config\nC:209, 0: No space allowed around keyword argument assignment\n  def HasSection(self, section, subsection \u003d \u0027\u0027):\n                                           ^ (bad-whitespace)\nC:320, 0: No space allowed around keyword argument assignment\n                   capture_stdout \u003d True,\n                                  ^ (bad-whitespace)\nC:321, 0: No space allowed around keyword argument assignment\n                   capture_stderr \u003d True)\n                                  ^ (bad-whitespace)\nC:427, 0: Exactly one space required after comma\n                     \u0027-o\u0027,\u0027ControlPath %s\u0027 % ssh_sock(),\n                         ^ (bad-whitespace)\nC:436, 0: Exactly one space required after comma\n    check_command \u003d command_base + [\u0027-O\u0027,\u0027check\u0027]\n                                        ^ (bad-whitespace)\nC:464, 0: Exactly one space required after comma\n             % (host,port, str(e)), file\u003dsys.stderr)\n                    ^ (bad-whitespace)\nC:707, 0: No space allowed around keyword argument assignment\n    return self._config.GetString(key, all_keys \u003d all_keys)\n                                                ^ (bad-whitespace)\nC:759, 0: No space allowed around keyword argument assignment\n    return self._config.GetString(key, all_keys \u003d all_keys)\n                                                ^ (bad-whitespace)\n\nChange-Id: Ia8f154f6741ce609787551f65877d7584c457903\nSigned-off-by: Stefan Beller \u003csbeller@google.com\u003e\n"
    },
    {
      "commit": "8b39fb4bc01809f20a2998c55dede18717682a56",
      "tree": "14aa67a4bc717afedcb57397a9bddeba23be3eee",
      "parents": [
        "7ecccf6225586b4215aec098ca3372559593c98f",
        "96c2d654897ffe82d7df9f1dd2295cda5809be73"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Apr 22 18:28:55 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 22 18:28:57 2016 +0000"
      },
      "message": "Merge \"Fix XmlManifest.Save with remotes that have \u0027alias\u0027 set\""
    },
    {
      "commit": "96c2d654897ffe82d7df9f1dd2295cda5809be73",
      "tree": "50f12eb584bb4ea64e4c43757ace386678c1f9c9",
      "parents": [
        "cee5c771664833e517f47c0a33e520fd967cbe57"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Apr 06 16:03:54 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Apr 22 10:32:06 2016 +0900"
      },
      "message": "Fix XmlManifest.Save with remotes that have \u0027alias\u0027 set\n\nWhen the alias attribute is set for a remote, the RemoteSpec attached to\na Project only contains the alias name used by git, not the original\nname used in the manifest. But that\u0027s not enough information to\nreconstruct the manifest, so save off the original manifest name as\nanother RemoteSpec parameter, only used to write the manifest out.\n\nBug: Issue 181\nBug: Issue 219\nChange-Id: Id7417dfd6ce5572e4e5fe14f22924fdf088ca4f3\n"
    },
    {
      "commit": "7ecccf6225586b4215aec098ca3372559593c98f",
      "tree": "377e571c9efb4513c7c3cac0e6f47c1993cbf54e",
      "parents": [
        "cee5c771664833e517f47c0a33e520fd967cbe57"
      ],
      "author": {
        "name": "Sebastian Schuberth",
        "email": "sschuberth@gmail.com",
        "time": "Tue Mar 29 14:11:20 2016 +0200"
      },
      "committer": {
        "name": "Sebastian Schuberth",
        "email": "sschuberth@gmail.com",
        "time": "Thu Apr 21 18:36:11 2016 +0000"
      },
      "message": "diffmanifests: support custom git pretty format strings\n\nChange-Id: I29f4f1351c421f393328514d145df1a96aed9ee2\n"
    },
    {
      "commit": "cee5c771664833e517f47c0a33e520fd967cbe57",
      "tree": "6c06aee936e47d50314c4ca327ff2795cda89958",
      "parents": [
        "79fba68e4010f522e3c0e16a099b6176e798ef35"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Apr 18 19:08:23 2016 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Apr 18 19:08:23 2016 +0900"
      },
      "message": "Add a .mailmap file\n\nChange-Id: I3c7e68fae0f8c082b2e0fbfc26cfb7dda31f1d34\n"
    },
    {
      "commit": "79fba68e4010f522e3c0e16a099b6176e798ef35",
      "tree": "dd4992df769b7b067c8fd226aece60a774fb9087",
      "parents": [
        "e868841782314e431134c24c350f5a353306fa7d"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Apr 13 18:03:00 2016 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Apr 13 18:03:00 2016 +0900"
      },
      "message": "sync: Update help text for --smart-sync to be more specific\n\nThe --smart-sync option should return the manifest for *the latest*\nknown good build.\n\nChange-Id: I2f3216b5b9e1af2ea5f9c3bf1c025813a3b77581\n"
    },
    {
      "commit": "e868841782314e431134c24c350f5a353306fa7d",
      "tree": "5891a48fdf4c390778dd688362560c7001c46c45",
      "parents": [
        "bdb866ea7630b1aecad0ddc7d72939e67ff39816"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Apr 13 17:55:34 2016 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Apr 13 17:55:36 2016 +0900"
      },
      "message": "Improve documentation of manifest server RPC methods\n\nMention that the RPC endpoints are used when running repo\nsync with the --smart-sync and --smart-tag options\n\nChange-Id: I4b0b82e8b714fe923a5b325a6135f0128bf636ff\n"
    },
    {
      "commit": "f9fe3e14d2b56140c90a8969892e06aa71127305",
      "tree": "5065ff8c40f8a7c8cf4574dd7afa6f573e76ca53",
      "parents": [
        "bdb866ea7630b1aecad0ddc7d72939e67ff39816"
      ],
      "author": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Tue Feb 23 18:10:42 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Apr 08 00:07:52 2016 +0000"
      },
      "message": "repo: Repo does not always handle \u0027.\u0027 parameter correctly\n\nThe repo script allows a manifest to specify a \u0027.\u0027 as the path the\ntop-level directory, which co-locates the .git and .repo directories,\nand places files from the git repository at the top-level:\n\n  \u003cproject name\u003d\"proj_name\" path\u003d\".\" /\u003e\n  \u003cproject name\u003d\"sierra.other.git\" path\u003d\"other\" /\u003e\n\nMost commands work correctly with this setup. Some commands, however,\nfail to find the project. For instance, \u0027repo sync\u0027 works, and \u0027repo sync .\u0027\nworks in a sub-project (\u0027other\u0027 in this case) but \u0027repo sync .\u0027 in the\ntop-level directory fails with the error:\n\nerror: project . not found\n\nThere are two reasons for this:\n\n1. The self.worktree attribute of the Project object is not normalized,\nso with a \u0027.\u0027 for path its value would be \u0027/my/project/root/.\u0027. This is\nfine when used as a path, since it\u0027s the same path as \u0027/my/project/root\u0027,\nbut when used in a string comparison it fails. This commit applies\nos.path.normpath() to that value before storing it.\n\n2. The _GetProjectByPath method in command.py was not checking the path\nagainst manifest.topdir, so even once it was normalized the project was\nnot found. This commit adds a check against manifest.topdir if the\nloop drops out without finding a project.\n\nChange-Id: Ic84d053f1bbb5a357cad566805d5a326ae8246d2\n"
    },
    {
      "commit": "bdb866ea7630b1aecad0ddc7d72939e67ff39816",
      "tree": "73dd76e6cc3753783e95c5de50e08d4a27485996",
      "parents": [
        "e121ad558dac2268bba4eb37528ec5a6a2aa507d"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Apr 05 17:22:02 2016 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Apr 05 17:44:09 2016 -0700"
      },
      "message": "Fix symlinking of new projects\n\nWe weren\u0027t copying these lists, so the +\u003d was actually changing the\nunderlying lists.\n\nWhen a new project was added to the manifest, we run _CheckDirReference\nagainst the manifest project with share_refs\u003dTrue, which added the\nworking_tree_* to the shareable_* lists. Then, when we load the new\nmanifest and create the new project, it uses the lists that already\ncontain the working_tree_* files, even though we passed\nshare_refs\u003dFalse.\n\nThis happens reliably under the above conditions, but doesn\u0027t seem to\nhappen when syncing a fresh tree. So we\u0027ve got a mixture of links that\nmay need to be cleaned up later. This patch will just stop it from\nhappening in the future.\n\nChange-Id: Ib7935bfad78af1e494a75e55134ec829f13c2a41\n"
    },
    {
      "commit": "e121ad558dac2268bba4eb37528ec5a6a2aa507d",
      "tree": "d95410b04f8cad31660248dfb93bf79453606722",
      "parents": [
        "1f0564406ba5aab11b21a83d193485ee6597f213",
        "d3ddcdbd8aa371993c9b27d1df7edfd22ed038e3"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Apr 05 21:39:29 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 05 21:39:29 2016 +0000"
      },
      "message": "Merge \"Ignore clone.bundle on HTTP 501, i.e. Not Implemented\""
    },
    {
      "commit": "1f0564406ba5aab11b21a83d193485ee6597f213",
      "tree": "533f5c7a21032a634161c365f781efe8b340ecfc",
      "parents": [
        "936d6185eb9bb802a3b25982bc71c6bc58633f43"
      ],
      "author": {
        "name": "Takeshi Kanemoto",
        "email": "takeshi.kanemoto@sonymobile.com",
        "time": "Tue Jan 26 14:11:35 2016 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Apr 05 07:28:27 2016 +0000"
      },
      "message": "Add --inverse-regex option to forall subcommand\n\nMake it possible to exclude projects using regex/wildcard.\n\nThe syntax is similar to that of the -r option, e.g.:\n\n  repo forall -i ^platform/ ^device/ -c \u0027echo $REPO_PROJECT\u0027\n\nChange-Id: Id250de5665152228c044c79337d3ac15b5696484\n"
    },
    {
      "commit": "936d6185eb9bb802a3b25982bc71c6bc58633f43",
      "tree": "2b3dd94d5f5d36feadc318da4128e4e9e1167f22",
      "parents": [
        "9322964d141d470df70ba6fb2310653ead25c652",
        "8ccfa74d121efcdc0bcc3d41e8a881aacdab93dc"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Mar 15 00:31:12 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 15 00:31:12 2016 +0000"
      },
      "message": "Merge changes from topic \u0027pylint-pep8-cleanup\u0027\n\n* changes:\n  command.py: Cleaned up pylint/pep8 violations\n  project.py: Cleaned up pylint/pep8 violations\n"
    },
    {
      "commit": "9322964d141d470df70ba6fb2310653ead25c652",
      "tree": "0bef31866e5316caa3f25540cf79575a4917e5f4",
      "parents": [
        "4aa4b211c62a8f01abfe1953b4274af69d374ecf"
      ],
      "author": {
        "name": "Mike Bjorge",
        "email": "mbjorge@google.com",
        "time": "Mon Feb 29 11:48:15 2016 -0800"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Mar 14 10:08:33 2016 +0900"
      },
      "message": "Update commit-msg hook to version from Gerrit 2.12.1\n\nChange-Id: I31b74aba998f8e83f370a759218777f2557a8872\n"
    },
    {
      "commit": "4aa4b211c62a8f01abfe1953b4274af69d374ecf",
      "tree": "7e0881b72c6401f3b6101de46fecb4f6e4bee1e8",
      "parents": [
        "203153e7bba61b1b2d782e9e75aef919eab0d54b"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Fri Mar 04 15:03:00 2016 -0500"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Sat Mar 05 21:52:31 2016 +0000"
      },
      "message": "RepoHook: set __file__ when running the hook\n\nA common design pattern is to use __file__ to find the location of the\nactive python module to assist in output or loading of related assets.\nThe current hook systems runs the pre-upload.py hook in a context w/out\nthat set leading to runtime errors:\n\n$ repo upload --cbr .\nERROR: Traceback (most recent call last):\n  File \".../repo/project.py\", line 481, in _ExecuteHook\n    self._script_fullpath, \u0027exec\u0027), context)\n  File \".../repohooks/pre-upload.py\", line 32, in \u003cmodule\u003e\n    path \u003d os.path.dirname(os.path.realpath(__file__))\nNameError: name \u0027__file__\u0027 is not defined\n\nDefine this variable in this context so code can safely use it.\n\nChange-Id: If6331312445fa61d9351b59f83abcc1c99ae6748\n"
    },
    {
      "commit": "8ccfa74d121efcdc0bcc3d41e8a881aacdab93dc",
      "tree": "ae7076d782385b46c88077da0ffeb78274583b6a",
      "parents": [
        "30b0f4e02239afa1bc9b84f7e8180aa94e4cffa6"
      ],
      "author": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Wed Feb 10 10:44:30 2016 -0700"
      },
      "committer": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Wed Mar 02 09:05:45 2016 -0700"
      },
      "message": "command.py: Cleaned up pylint/pep8 violations\n\nI noticed when running pylint (as the SUBMITTING_PATCHES file directs)\nthat there were a few violations reported. This makes it difficult\nto see violations I might have introduced. This commit corrects all\npylint violations in the command.py script.\n\nThis script now has a pylint score of 10.0.\n\nChange-Id: Ibb35fa9af0e0b9b40e02ae043682b3af23286748\n"
    },
    {
      "commit": "30b0f4e02239afa1bc9b84f7e8180aa94e4cffa6",
      "tree": "3c4e46a67dcf3bf480bc47cebb22f76936ab8f59",
      "parents": [
        "4cfb6d7167424ff1a9ffe5319148d62b8d41edb5"
      ],
      "author": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Wed Feb 10 10:44:30 2016 -0700"
      },
      "committer": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Wed Mar 02 09:05:40 2016 -0700"
      },
      "message": "project.py: Cleaned up pylint/pep8 violations\n\nI noticed when running pylint (as the SUBMITTING_PATCHES file directs)\nthat there were a number of violations reported. This makes it difficult\nto see violations I might have introduced. This commit corrects all\npylint violations in the project.py script.\n\nThis script now has a pylint score of 10.0, and no violations reported\nby pep8.\n\nChange-Id: I1462fd84f5b6b4c0dc893052671373e7ffd838f1\n"
    },
    {
      "commit": "203153e7bba61b1b2d782e9e75aef919eab0d54b",
      "tree": "747ac3c026fbf733376c1227c827af7ccfcdd548",
      "parents": [
        "4cfb6d7167424ff1a9ffe5319148d62b8d41edb5"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Fri Feb 26 18:53:54 2016 -0800"
      },
      "committer": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Fri Feb 26 18:53:54 2016 -0800"
      },
      "message": "Add rpc: to default protocol whitelist\n\nChange-Id: I57e1c3d93c0ce56da9c487df65eb3d258e0260e8\n"
    },
    {
      "commit": "4cfb6d7167424ff1a9ffe5319148d62b8d41edb5",
      "tree": "ec38f259d0bcc6592bef4c7fe2cb6b95ad5f73e4",
      "parents": [
        "b29e61133e05a8c500fc4ddd0388bd8447a46372"
      ],
      "author": {
        "name": "Alexandre Garnier",
        "email": "zigarn@gmail.com",
        "time": "Wed Sep 09 15:51:31 2015 +0200"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Feb 18 01:29:54 2016 +0000"
      },
      "message": "Better error display on forall\n\nIt was only displaying \u0027Project list error: GitError()\u0027\nwithout any useful info about the project nor the error\n\nChange-Id: Iad66cbaa03cad1053b5ae9ecc90d7772aa42ac13\n"
    },
    {
      "commit": "b29e61133e05a8c500fc4ddd0388bd8447a46372",
      "tree": "baf36d267484cb120ef69615a769e55b293c78d0",
      "parents": [
        "4088eb434ba65a9d0a2f578d7d54cc9567f44cbe"
      ],
      "author": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Tue Feb 16 18:30:44 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Feb 17 02:45:08 2016 +0000"
      },
      "message": "SUBMITTING_PATCHES: Expand instructions\n\nThis commit adds additional instructions on getting patches submitted,\nbased on my recent experience doing so.\n\nChange-Id: I8e0d37d316214cc9a39383414773aad181f83f18\n"
    },
    {
      "commit": "4088eb434ba65a9d0a2f578d7d54cc9567f44cbe",
      "tree": "9354ec12b3bd968426076c6bbaf3831328344649",
      "parents": [
        "55536286019c5c85314ea8a309a09c13976fac9a"
      ],
      "author": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Wed Feb 10 10:44:30 2016 -0700"
      },
      "committer": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Mon Feb 15 10:29:02 2016 -0700"
      },
      "message": "repo: Cleaned up pylint/pep8 violations\n\nI noticed when running pylint (as the SUBMITTING_PATCHES file directs)\nthat there were a number of violations reported. This makes it difficult\nto see violations I might have introduced. This commit corrects all\npylint violations in the repo script.\n\nFirst I ran this to clean up the formatting:\n\n autopep8 --max-line-length\u003d80 --indent-size 2 repo\n\nFollowing that the following violations remained:\n\n% pylint --rcfile\u003d.pylintrc repo\n************* Module repo\nW:220,21: Redefining name \u0027init_optparse\u0027 from outer scope (line 156)\n(redefined-outer-name)\nW:482, 2: No exception type(s) specified (bare-except)\nC:704, 0: Old-style class defined. (old-style-class)\n\nFor line 220, the parameter to _GitcInitOptions was renamed so as not to\nmask the init_optparse global.\n\nFor line 482, a pylint directive was added to disable the bare-execpt\nviolation for just that line.\n\nFor line 704, the _Options class was changed to subclass object.\n\nAdditionally, the comments at lines 107-113 were spaced out to line up\nwith the comment at line 112 that autopep8 moved.\n\nThis script now has a pylint score of 10.0\n\nChange-Id: I779b66eb6b061a195d3c4372b99dec1b6d2a214f\n"
    },
    {
      "commit": "55536286019c5c85314ea8a309a09c13976fac9a",
      "tree": "972106d82dd3a2186d393c0ca06dd9812a5991b2",
      "parents": [
        "5ed805a98ed06b1d2ca275e244a2aee1673ead0d"
      ],
      "author": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Wed Feb 03 15:49:43 2016 -0700"
      },
      "committer": {
        "name": "Mark E. Hamilton",
        "email": "mhamilt@sandia.gov",
        "time": "Tue Feb 09 17:27:29 2016 -0700"
      },
      "message": "repo: Add check of REPO_URL env variable\n\nWe want to be able to run repo on a system that is not connected to\nthe Internet and cannot access https://gerrit.googlesource.com. We\ncan put a clone of that repos there, but would prefer to use the\nstable version of the repo script instead of a locally modified\nversion.\n\nThis commit adds a check for the REPO_URL environment variable. If\nthat is set and not empty its value will be set in the REPO_URL\nglobal in repo.  Otherwise the standard path will be used.\n\nChange-Id: I0616f5f81ef75f3463b73623b892cb5eed6bb7ba\n"
    },
    {
      "commit": "5ed805a98ed06b1d2ca275e244a2aee1673ead0d",
      "tree": "3901dec5e1eb2f491e43b677f6278f276c9184a9",
      "parents": [
        "985ac6b9465652798009f63733f166c9d065443a",
        "827e547d9e8066086af8b154e2f3726907fe72c1"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Feb 04 22:58:20 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 04 22:58:20 2016 +0000"
      },
      "message": "Merge \"Fix typos for manifest dtd\""
    },
    {
      "commit": "985ac6b9465652798009f63733f166c9d065443a",
      "tree": "c5bd344fab2e1b8bf84faf9b4e8a4978f6901d9a",
      "parents": [
        "ecf0a6c92b62437f2c0a2017a0e98c7f92b162dd",
        "1a799d14b71c3f694aa62edf99310bc3e1a482d5"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Feb 04 22:44:19 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 04 22:44:20 2016 +0000"
      },
      "message": "Merge \"Fix prune when bare git has detached head\""
    },
    {
      "commit": "ecf0a6c92b62437f2c0a2017a0e98c7f92b162dd",
      "tree": "592a01e04a1ee28923ce8be0a0ffb337fadb695d",
      "parents": [
        "0b4cb325c6f412ac5ab33573b4f5e50b4945c924",
        "04197a5144d6a40ee2d85799b32505250480f365"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Feb 04 22:36:05 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 04 22:36:05 2016 +0000"
      },
      "message": "Merge \"GITC: Fix \u0027repo start \u003cbranch\u003e \u003crepo\u003e/\u003csubdir\u003e\u0027\""
    },
    {
      "commit": "04197a5144d6a40ee2d85799b32505250480f365",
      "tree": "a44651e81b1b56c999e57ccc1c540e841118f76e",
      "parents": [
        "745b4ad660f8050045b521c4e15b7d3ac0b3d70e"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Oct 07 16:53:10 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Feb 04 14:31:55 2016 -0800"
      },
      "message": "GITC: Fix \u0027repo start \u003cbranch\u003e \u003crepo\u003e/\u003csubdir\u003e\u0027\n\nAs soon as we wrote the gitc manifest, the folder for that repo became\nempty, causing the next GetProjects lookup to fail. Reorder the\nGetProjects calls so that they all happen while we still have the\nrepository contents available.\n\nIf you were already in a subdir, for cases like \u0027repo start \u003cbranch\u003e .\u0027,\nthis would still fail, since the working directory would disappear out\nfrom under you. That\u0027s fine most of the time, since we shouldn\u0027t be\ndoing operations based on the local directory, but git has a realpath\nfunction that tries to restore CWD by chdir\u0027ing back to it. So if the\nworking directory no longer exists, chdir to the topdir before\ncontinuing.\n\nChange-Id: Ibdf6cd37ff6e5a5f8338347c3919175491f7166f\n"
    },
    {
      "commit": "0b4cb325c6f412ac5ab33573b4f5e50b4945c924",
      "tree": "c09284588db5cd85958c9270bba63b41b67a15d4",
      "parents": [
        "e9becc079c647f6c9477eed83c0aecb2f591fdf4"
      ],
      "author": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Wed Jan 27 14:33:51 2016 -0800"
      },
      "committer": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Thu Jan 28 10:20:03 2016 -0800"
      },
      "message": "Add option to rebase onto project\u0027s manifest version\n\nSome teams have a continuous build server that would mark certain\nmanifest green and safe to sync to.  Then team members could repo\nsync to that particular manifest file and make sure they always\nsync to a green build.  But if she/he has some local changes and\nwants to rebase, currently it would be a manual process to find the\ncorrect version to rebase onto.  This patch helps with that use\ncase by automating the process to rebase onto the currently synced\nmanifest version.\n\nChange-Id: I847c9eb6addf7f84fd3f5594fbf8c0bcc103f9a5\n"
    },
    {
      "commit": "1a799d14b71c3f694aa62edf99310bc3e1a482d5",
      "tree": "de43af900d722c45189dedcd2c30321686af5e77",
      "parents": [
        "e9becc079c647f6c9477eed83c0aecb2f591fdf4"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Dec 15 13:40:05 2015 -0800"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Dec 15 14:22:40 2015 -0800"
      },
      "message": "Fix prune when bare git has detached head\n\nWe don\u0027t really use HEAD much in the bare git repositories, but there\nhave been reports of errors in git-symbolic-ref:\n\n  symbolic-ref: fatal: Refusing to point HEAD outside of refs/\n\nThat happen when the bare git repo is in the detached head state. It\u0027s\npossible that previous operations were killed while we were pruning\nbranches.\n\nUse DetachHead instead of SetHead if we\u0027re restoring the repo into a\ndetached head state.\n\nChange-Id: I9062e8957bc70367d3ded399685ac026fbb421fc\n"
    },
    {
      "commit": "827e547d9e8066086af8b154e2f3726907fe72c1",
      "tree": "222c3637800d01ec630484a56479a7b587d8c2d4",
      "parents": [
        "e9becc079c647f6c9477eed83c0aecb2f591fdf4"
      ],
      "author": {
        "name": "Kenny Ho",
        "email": "y2kenny@gmail.com",
        "time": "Thu Oct 22 20:59:42 2015 +0000"
      },
      "committer": {
        "name": "Kenny Ho",
        "email": "y2kenny@gmail.com",
        "time": "Fri Dec 11 00:05:54 2015 +0000"
      },
      "message": "Fix typos for manifest dtd\n\nChange-Id: If53721544eca570e2bcce4598cdc2670a679c681\n"
    },
    {
      "commit": "e9becc079c647f6c9477eed83c0aecb2f591fdf4",
      "tree": "6fc68e16b2bdba169d97a08e17d92ba4892d68ef",
      "parents": [
        "466b8c4ea26f119f2b0532ece764c543e78a873e"
      ],
      "author": {
        "name": "Hu Xiuyun",
        "email": "clouds08@qq.com",
        "time": "Wed Nov 25 15:52:26 2015 +0800"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Nov 26 02:25:43 2015 +0000"
      },
      "message": "Sync: Fix error exit code when both -n and -f are used\n\nWhen repo sync is used with -f (--force-error) and a project fails to\nsync, the sync will continue but then exit with an error status.\n\nHowever if -n (--network-only) is also used, the exit code is 0, even\nwhen a project failed.\n\nModify the logic to make sure the sync exits with the correct status.\n\nBug: Issue 214\nChange-Id: I0b5d97a34642c5aa3743750ef14a42c9d5743c1d\n"
    },
    {
      "commit": "466b8c4ea26f119f2b0532ece764c543e78a873e",
      "tree": "70af80b53e2d5a5e149e4af38e3eb1694083cf04",
      "parents": [
        "e1e0bd1f75e64ba4854f288741aa88dfe2f3cf61"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Nov 25 13:26:39 2015 -0800"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Nov 26 11:03:19 2015 +0900"
      },
      "message": "Set GIT_ALLOW_PROTOCOL to limit dangerous protocols\n\nSee git commit 33cfccbbf35a -- some protocols allow arbitrary command\nexecution as part of the URL. Instead of blindly allowing those,\nwhitelist the allowed URL protocols unless the user has already done so.\n\nBug: Issue 210\nChange-Id: I6bd8e721aa5e3dab53ef28cfdc8fde33eb74ef76\n"
    },
    {
      "commit": "e1e0bd1f75e64ba4854f288741aa88dfe2f3cf61",
      "tree": "1fd4d5261bf03d509db6b24fe849c3557895e63b",
      "parents": [
        "74cfd2709b0bc23fc3efb8951b4b5abb2bf4e4a7"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Nov 18 16:49:38 2015 -0800"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Nov 18 16:51:51 2015 -0800"
      },
      "message": "Check for broken links when updating linkfiles\n\nIf a linkfile is a broken link (destination does not exist), and it\nneeds to be updated, we didn\u0027t notice that it needed to be removed\nfirst. Use lexists instead of exists to check for this condition.\n\nChange-Id: I1f6a1f0193d3fd2b9f7a647836044997f6ab32eb\n"
    },
    {
      "commit": "74cfd2709b0bc23fc3efb8951b4b5abb2bf4e4a7",
      "tree": "3df8296e4e9673893cf5fd7ed77b888e606311bf",
      "parents": [
        "c2a64ddffd397f28c1187da1cc07f29825b7d0fb"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Oct 14 10:50:15 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Oct 27 03:04:17 2015 +0000"
      },
      "message": "Sync: Add option to prune refs during sync\n\nBy passing --prune to the sync command, the --prune option is\ngiven to the `git fetch`, causing refs that no longer exist on\nthe remote to be removed.\n\nChange-Id: I3cedacce14276d96ac2d5aabf2d07fd05e92bc02\n"
    },
    {
      "commit": "c2a64ddffd397f28c1187da1cc07f29825b7d0fb",
      "tree": "4232181bf284748fa1934cda2ae15e39d9e7bdcf",
      "parents": [
        "745b4ad660f8050045b521c4e15b7d3ac0b3d70e"
      ],
      "author": {
        "name": "Pascal Muetschard",
        "email": "pmuetschard@google.com",
        "time": "Thu Oct 22 13:26:36 2015 -0700"
      },
      "committer": {
        "name": "Pascal Muetschard",
        "email": "pmuetschard@google.com",
        "time": "Thu Oct 22 13:28:20 2015 -0700"
      },
      "message": "A couple of fixes to the init command\u0027s -p option.\n\nAdds windows as one of the allowed platforms flags.\nFixes -p foo to append \u0027platform-foo\u0027, instead of each letter (list.extend\nexpects a list and thus appends each char in the string, rather than the\nstring itself).\n\nChange-Id: I73a92127ac29a32fc31b335cc54a246302904140\n"
    },
    {
      "commit": "745b4ad660f8050045b521c4e15b7d3ac0b3d70e",
      "tree": "643e836eafdde0c08e1eec540eab6ae23b2ef29e",
      "parents": [
        "4c5f74e4521679d1dcc31c575d417387b9c51c87"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Oct 06 15:23:19 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Oct 07 15:43:22 2015 -0700"
      },
      "message": "Fix gitc-init behavior\n\nWith gitc-init, a gitc client may be specified using \u0027-c\u0027. If we\u0027re\nnot currently in that client, we need to change directories so that\nwe don\u0027t affect the local checkout, and to ensure that repo is\nchecked out in the new client.\n\nThis also makes \u0027-c\u0027 optional if already in a gitc client, to match\nthe rest of the init options.\n\nChange-Id: Ib514ad9fd101698060ae89bb035499800897e9bd\n"
    },
    {
      "commit": "4c5f74e4521679d1dcc31c575d417387b9c51c87",
      "tree": "e19f84c3ff67c767d0aaf488d51376d2cb357996",
      "parents": [
        "b1ad2190a2ef5f9529176075d7b3318e6f39e35c"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Oct 02 11:10:10 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Oct 02 11:12:05 2015 +0900"
      },
      "message": "Sync: Add HTTP Cookie File header on temporary cookie file\n\nThe .gitcookies file generated by googlesource.com does not have\nthe header:\n\n # (Netscape) HTTP Cookie File\n\nwhich causes python\u0027s MozillaCookieJar.load to fail with the\nerror:\n\n \"does not look like a Netscape format cookies file\"\n\nPrepend the expected header onto the generated cookie file.\n\nWe don\u0027t bother to check if the header already exists on the\nfile; repeating it does not cause any problem.\n\nBug: Issue 207\nChange-Id: I7d39720a1d36a6aae00f70691156514ebc04e579\n"
    },
    {
      "commit": "b1ad2190a2ef5f9529176075d7b3318e6f39e35c",
      "tree": "787b8bc1f179ada7a965bffce31a52afedeab401",
      "parents": [
        "f231db11a2f7c2cf28c1228146b0c087c4be882a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Sep 30 10:35:43 2015 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Oct 02 11:04:01 2015 +0900"
      },
      "message": "Sync: Don\u0027t fail when git cookies can\u0027t be loaded\n\nIf the git cookies file fails to load, use a default\ncookie jar instead.\n\nBug: Issue 207\nChange-Id: I7cb326c204f2784ab4dbd13801b3186667af5b78\n"
    },
    {
      "commit": "f231db11a2f7c2cf28c1228146b0c087c4be882a",
      "tree": "512f2faadd94a83d5cdceec2af44e7c91a83f1f9",
      "parents": [
        "79360640f4c7d5f044973aa1bdb6fb0f8f311f05"
      ],
      "author": {
        "name": "Simran Basi",
        "email": "sbasi@google.com",
        "time": "Wed Sep 23 11:38:14 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Oct 01 21:05:17 2015 +0000"
      },
      "message": "GITC: Add repo gitc-delete command.\n\nrepo gitc-delete deletes a GITC client and all the locally\nsaved sources. Useful for removing unnecessary clients and\nrecovering disk space.\n\nChange-Id: Idf23addcea52b8713d268c34a7b37da0c5e5cd26\n"
    },
    {
      "commit": "79360640f4c7d5f044973aa1bdb6fb0f8f311f05",
      "tree": "de0228e9e44b05ad3da07d4e8829a90bebb3871f",
      "parents": [
        "7b01b2fd01f4e37688242db19c93feb27f9b65c6"
      ],
      "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 29 13:46:34 2015 -0700"
      },
      "message": "Add GitcClientCommand class for GITC-specific commands\n\nThese won\u0027t show up as common commands in the help text unless in a GITC\nclient, and will refuse to execute.\n\nChange-Id: Iffe82adcc9d6ddde9cb4b204f83ff018042bdab0\n"
    },
    {
      "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"
    }
  ],
  "next": "d3ddcdbd8aa371993c9b27d1df7edfd22ed038e3"
}
