)]}'
{
  "log": [
    {
      "commit": "169d8ae93cb8294db9a82cd6de97e94ef53abf7c",
      "tree": "39c705a89b06feae7791ffdfd29f0b45c26ec4a5",
      "parents": [
        "aa90021fbc3382fdac6171572c85ee07369c91e1",
        "c9439facdde146e3a8ed6511499379e8b959c467"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sun May 28 00:37:59 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun May 28 00:37:59 2017 +0000"
      },
      "message": "Merge \"pre-auto-gc: Add support for Windows\""
    },
    {
      "commit": "aa90021fbc3382fdac6171572c85ee07369c91e1",
      "tree": "076c899c27e43caf5030b21f03527526c660c858",
      "parents": [
        "fddfa6fbac4fcabe712961fa45da8f440ee9426a"
      ],
      "author": {
        "name": "David Riley",
        "email": "davidriley@google.com",
        "time": "Wed Apr 05 13:50:52 2017 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sat May 27 13:32:00 2017 +0900"
      },
      "message": "Set result if sys.exit() is called by subcommand.\n\nAllows the finally branch to make sure of the return code.\n\nChange-Id: I7a796da5b60269cbd71aad953f1b9bb762b8eef8\n"
    },
    {
      "commit": "fddfa6fbac4fcabe712961fa45da8f440ee9426a",
      "tree": "0a51ec99f4b14db441f3a2164bf26b9508040d17",
      "parents": [
        "997a92bd583c4abe312dea91b68c717103b082cd"
      ],
      "author": {
        "name": "Jiri tyr",
        "email": "jiri.tyr@gmail.com",
        "time": "Mon Jan 09 23:47:52 2017 +0000"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sat May 27 04:26:15 2017 +0000"
      },
      "message": "Adding include element into the top-level element\n\nThe documentation of the XML file format contains DTD which contains\ndefinition of all allowed elements and attributes. The \"include\" element\nis defined but it\u0027s not referenced from the top-level \"manifest\"\nelement.\n\nThis patch is adding the \"include\" element into the list of elements of\nthe top-level \"manifest\" element.\n\nChange-Id: I33beb8ef2846bbf42ffd42e6ae6888828566d604\n"
    },
    {
      "commit": "997a92bd583c4abe312dea91b68c717103b082cd",
      "tree": "6a5ead95fa9b6a88fd4da7d4fc38d10f0eed8e9c",
      "parents": [
        "fbcbcabe9879c5af5b9267bcdf30ee8939dfe9b1",
        "eec726c6d880b8616b5b734155befaf54f936cba"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sat May 27 04:25:39 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat May 27 04:25:39 2017 +0000"
      },
      "message": "Merge \"Add option REPO_IGNORE_SSH_INFO to ignore ssh_info\""
    },
    {
      "commit": "fbcbcabe9879c5af5b9267bcdf30ee8939dfe9b1",
      "tree": "cad44d0577c667f11e2f23432e79cddc54e7a31d",
      "parents": [
        "666debc5180f806cd31fa12b34a072e45f508e1a",
        "e4e94d26ae81dbc9eb6e2f345fac7cd8c533cb9a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sat May 27 04:24:58 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat May 27 04:24:58 2017 +0000"
      },
      "message": "Merge \"init: add --submodules to sync manifest submodules\""
    },
    {
      "commit": "eec726c6d880b8616b5b734155befaf54f936cba",
      "tree": "17fa05674ea29f981b460d0dfab361846e42c9b9",
      "parents": [
        "ffb4b890997b1799f188ec44f005d949feb643a7"
      ],
      "author": {
        "name": "Timo Lotterbach",
        "email": "timo.lotterbach@bmw-carit.de",
        "time": "Fri Oct 07 10:52:08 2016 +0200"
      },
      "committer": {
        "name": "Timo Lotterbach",
        "email": "timo.lotterbach@bmw-carit.de",
        "time": "Fri May 26 15:11:11 2017 +0200"
      },
      "message": "Add option REPO_IGNORE_SSH_INFO to ignore ssh_info\n\nThis is required for setups, where Gerrit access using ssh is only available\nfor some networks.\nFor network without ssh access, repo will get ssh_info from Gerrit and\nuse ssh for communications - which will fail. To support this setup\nwe need to have an option to ignore the ssh_info provided by Gerrit and\nuse http(s).\n\nUsing git insteadOf as alternative results in the inability to add\nreviewers using \"repo upload --re\u003d...\", since the syntax of adding\nreviewers differs for ssh and https. repo is assuming an ssh\nconnection and uses \"git push --receive-pack\u003d...\", which will fail\nsince git silently uses https for push operation. repo must be aware\nthat https is used so it uses \"git push remote ...:refs/for/...%r\u003d...\"\nfor upload.\n\nChange-Id: Idd83baef0fb26ffcc9ac65e204b68d323ce177a1\n"
    },
    {
      "commit": "666debc5180f806cd31fa12b34a072e45f508e1a",
      "tree": "eb122f1e53ec8cef069cc1f5069131be6164cf54",
      "parents": [
        "c354a9b9226831e03a06ef44386937c88c866851"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri May 26 21:53:34 2017 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri May 26 21:53:34 2017 +0900"
      },
      "message": "gitc_delete: Remove unused imports\n\nChange-Id: I672189ba99e18dca3956e2396c921d1ef0ca2ddd\n"
    },
    {
      "commit": "c354a9b9226831e03a06ef44386937c88c866851",
      "tree": "c33dde025bc44390b8d19981cd436a35e815e3ae",
      "parents": [
        "06848b24150c83d4b1fe2ced328e954391f8a3e5"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri May 26 21:52:12 2017 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri May 26 21:52:23 2017 +0900"
      },
      "message": "abandon: fix usage of undefined variable\n\nAs reported by pyflakes:\n\n  subcmds/abandon.py:84: undefined name \u0027p\u0027\n\nThe name of the variable should be \u0027proj\u0027.\n\nChange-Id: Ic09eb92e8db6b510e99efce010bd0bb094d7cbfe\n"
    },
    {
      "commit": "06848b24150c83d4b1fe2ced328e954391f8a3e5",
      "tree": "78ec79f2014442fdc2aa0d06cc6cf4131d3eace0",
      "parents": [
        "3d7bbc9edf2e6714c58f72a053b182d3c7a160bf"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri May 26 21:44:57 2017 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri May 26 21:44:57 2017 +0900"
      },
      "message": "Update .mailmap\n\nChange-Id: Icabc7fb2161b661c2df9290a1ca6f75b9b1b8e1b\n"
    },
    {
      "commit": "e4e94d26ae81dbc9eb6e2f345fac7cd8c533cb9a",
      "tree": "1fe598a2b3e89ae9a56fd640e6cd5b53a8704c7a",
      "parents": [
        "ffb4b890997b1799f188ec44f005d949feb643a7"
      ],
      "author": {
        "name": "Martin Kelly",
        "email": "mkelly@xevo.com",
        "time": "Tue Mar 21 16:05:12 2017 -0700"
      },
      "committer": {
        "name": "Martin Kelly",
        "email": "mkelly@xevo.com",
        "time": "Tue May 23 16:51:31 2017 -0700"
      },
      "message": "init: add --submodules to sync manifest submodules\n\nrepo sync can sync submodules via the --fetch-submodules option.\nHowever, if the manifest repo has submodules, those will not be synced.\nHaving submodules in the manifest repo -- while not commonly done -- can\nbe useful for inheriting a manifest from another project using \u003cinclude\u003e\nand layering changes on top of it.  In this way, you can avoid having to\ndeal with merge conflicts between your own manifests and the other\nproject\u0027s manifests (for example, if you\u0027re managing an Android fork).\n\nAdd a --submodule option to init that automatically syncs the submodules\nin the manifest repo whenever the manifest repo changes.\n\nChange-Id: I45d34f04517774c1462d7f233f482d1d81a332a8\nSigned-off-by: Martin Kelly \u003cmkelly@xevo.com\u003e\n"
    },
    {
      "commit": "c9439facdde146e3a8ed6511499379e8b959c467",
      "tree": "440caabcb567eecb239bd743617dd2ea53175e3e",
      "parents": [
        "ffb4b890997b1799f188ec44f005d949feb643a7"
      ],
      "author": {
        "name": "Sebastian Schuberth",
        "email": "sschuberth@gmail.com",
        "time": "Wed Mar 01 10:56:32 2017 +0100"
      },
      "committer": {
        "name": "Sebastian Schuberth",
        "email": "sschuberth@gmail.com",
        "time": "Wed May 03 11:26:21 2017 +0000"
      },
      "message": "pre-auto-gc: Add support for Windows\n\nPreviously, this would always have exited with 1 on Windows, causing \"git\ngc --auto\" to abort. Fix this by adding support for Windows.\n\nChange-Id: Ie519b366a11b6b18b2d465e892e738de3f4bbc99\n"
    },
    {
      "commit": "3d7bbc9edf2e6714c58f72a053b182d3c7a160bf",
      "tree": "c7a8eda2e7ceb01fd5bf7aa62146164bc71abf2e",
      "parents": [
        "ffb4b890997b1799f188ec44f005d949feb643a7"
      ],
      "author": {
        "name": "heping",
        "email": "tdihp@hotmail.com",
        "time": "Wed Apr 12 19:51:47 2017 +0800"
      },
      "committer": {
        "name": "heping",
        "email": "tdihp@hotmail.com",
        "time": "Wed Apr 12 20:04:47 2017 +0800"
      },
      "message": "project.py: fix performance issue with --reference when the mirrored repository has many refs\n\nChange-Id: Id0183903597f872eee80ca32a8050125b187a3d4\n"
    },
    {
      "commit": "ffb4b890997b1799f188ec44f005d949feb643a7",
      "tree": "799140409f36ea5ad1ac57ca72a8eed0085594a7",
      "parents": [
        "04071c1c72437a930db017bd4c562ad06087986a"
      ],
      "author": {
        "name": "Marc Herbert",
        "email": "marc.herbert@intel.com",
        "time": "Tue Apr 04 22:03:53 2017 -0700"
      },
      "committer": {
        "name": "Marc Herbert",
        "email": "marc.herbert@intel.com",
        "time": "Tue Apr 04 22:10:34 2017 -0700"
      },
      "message": "sync.py: report the remote URL on fatal git remote errors\n\nrepo can be configured to download from any number of remote git repos.\nHowever when one fails repo doesn\u0027t report which one. Example:\nFatal: remote error: Daily ls-remote rate limit exceeded for IP xx.xx.xx.xx\n\nTEST\u003drepo init -q -u https://chromium.googlesource.com/chromiumos/manifest.git\n  # Apply patch in ./.repo/repo/\n  # Simulate a git remote error:\n  sed -i -e \u0027s#chromiumos/docs#chromiumos/XXdocs#\u0027 .repo/manifests/full.xml\n  repo sync --quiet --force-sync docs\n  # error message now shows the remote URL\n\nOptional test tip: reduce the time.sleep(random(...)) in ./.repo/repo/project.py\n\nChange-Id: I4509383b6a43a8e66064778e8ed612d8a735c8b6\n"
    },
    {
      "commit": "04071c1c72437a930db017bd4c562ad06087986a",
      "tree": "84d2d18bd35bb1ca64b8693616fec2811ac3a2ce",
      "parents": [
        "7de8c5db78da12aed8c93a06e7eb73bb37b63c9d"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Dec 28 16:07:16 2016 -0500"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Dec 28 16:07:16 2016 -0500"
      },
      "message": "manifest-format: fix EMPTY keyword usage\n\nThe keyword EMPTY doesn\u0027t use parens.\n\nBUG\u003dgit-repo:140\n\nChange-Id: I7cd28a09c401520a72e5c244a77d9d70385f1b61\n"
    },
    {
      "commit": "7de8c5db78da12aed8c93a06e7eb73bb37b63c9d",
      "tree": "d27cec30d63ef29d72078b09dd3f4d8b1c928dc2",
      "parents": [
        "bb9c42cf1d9e43b190b775def2f111b2277b86ef",
        "f4dda9a1be396808fad0cda8316d3a0d6f839ee1"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Fri Dec 09 02:33:42 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 09 02:33:42 2016 +0000"
      },
      "message": "Merge \"init: Add no-tags and current branch options\""
    },
    {
      "commit": "bb9c42cf1d9e43b190b775def2f111b2277b86ef",
      "tree": "5977de47f62409481cef2913df338b262dbe963f",
      "parents": [
        "b881d227f3c5ab99c04866723cbc06fed4225e78",
        "8ac0c96537f876127be879d0931ede1545f93d34"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Dec 06 07:51:01 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 06 07:51:01 2016 +0000"
      },
      "message": "Merge \"Fix removing broken symlink in reference dir\""
    },
    {
      "commit": "f4dda9a1be396808fad0cda8316d3a0d6f839ee1",
      "tree": "843fdfada5e3bc60f9c390b3006bd4a1c3448522",
      "parents": [
        "b881d227f3c5ab99c04866723cbc06fed4225e78"
      ],
      "author": {
        "name": "Naseer Ahmed",
        "email": "naseer.ahmed@gmail.com",
        "time": "Thu Dec 01 18:49:54 2016 -0500"
      },
      "committer": {
        "name": "Naseer Ahmed",
        "email": "naseer.ahmed@gmail.com",
        "time": "Thu Dec 01 19:03:41 2016 -0500"
      },
      "message": "init: Add no-tags and current branch options\n\nThis avoids fetching tags and branches for huge manifests\n\nChange-Id: I19c9724d75364440b881b297d42b906f541f73ff\n"
    },
    {
      "commit": "b881d227f3c5ab99c04866723cbc06fed4225e78",
      "tree": "04e410c06fea0b0969ea704ab3e251c87067bef1",
      "parents": [
        "8e2d1d521ee68c6eb561d64301aad8cc69fa32d1",
        "27226e742d7e1a3d371531c19a3fdd91a4f9ab4a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sat Oct 29 07:28:35 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Oct 29 07:28:35 2016 +0000"
      },
      "message": "Merge \"Add a check and more output to protect against invalid REPO_URLs\""
    },
    {
      "commit": "8e2d1d521ee68c6eb561d64301aad8cc69fa32d1",
      "tree": "e69e31d55dd342954f2ec0bed9c6d1737c63c6e3",
      "parents": [
        "ae81c964b6bef958e3d760e5c51d7d0fa8bf9ff9",
        "6c5944606af3c52626745b5256e9e5f0d5c362a2"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Oct 28 19:30:45 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 28 19:30:45 2016 +0000"
      },
      "message": "Merge \"Fix checkout error when depth passed to repo init and revision is a sha1\""
    },
    {
      "commit": "27226e742d7e1a3d371531c19a3fdd91a4f9ab4a",
      "tree": "d22b18a2dcc496705deb46b675a8ec13e8cbaca8",
      "parents": [
        "7a77c16d376f504bd06d017ba10c91e3a6073b08"
      ],
      "author": {
        "name": "Sebastian Schuberth",
        "email": "sschuberth@gmail.com",
        "time": "Fri Oct 28 14:27:43 2016 +0200"
      },
      "committer": {
        "name": "Sebastian Schuberth",
        "email": "sschuberth@gmail.com",
        "time": "Fri Oct 28 14:43:02 2016 +0200"
      },
      "message": "Add a check and more output to protect against invalid REPO_URLs\n\nIf you don\u0027t know that the url to git-repo itself can be overridden via\nREPO_URL, it\u0027s hard to debug cases where REPO_URL is accidentally set to\nanother repository, e.g. inside a Jenkins CI job. What makes is even\nharder is that the \".repo/repo\" directory gets silently removed in such\ncases as verifications fails, which makes it impossible to look at the\ncloned files to understand the problem.\n\nTo better protect against such an issue, warn if the cloned git-repo\nrepository does not contain a top-level \"repo\" file, and state that the\n\".repo/repo\" directory will be removed in case of a clone failure.\n\nChange-Id: I697b4999205a5967910c0237772ccaada01e74d4\n"
    },
    {
      "commit": "6c5944606af3c52626745b5256e9e5f0d5c362a2",
      "tree": "a34387f91d0a67c01455c2a211ae5401fe5a2bda",
      "parents": [
        "eceeb1b1f5edb0f42e690bffdf81828abd8ea7fe"
      ],
      "author": {
        "name": "Aymen Bouaziz",
        "email": "aymen.bouaziz@parrot.com",
        "time": "Tue Oct 25 18:03:51 2016 +0200"
      },
      "committer": {
        "name": "Aymen Bouaziz",
        "email": "aymen.bouaziz@parrot.com",
        "time": "Fri Oct 28 14:29:57 2016 +0200"
      },
      "message": "Fix checkout error when depth passed to repo init and revision is a sha1\n\nCurrently, if direct fetch of a sha1 is not supported by git server and\ndepth option is used, we fallback on syncing the upstream branch by\nignoring depth option.\n\nThis fallback doesn\u0027t work in next 2 cases:\n(1) upstream attribute is not specified in manifest\n(2) depth option is passed to repo init command\n    (not with clone-depth attribute in manifest)\n\nThis commit do the following:\n- fixes (1) by updating condition used to apply fallback\n  first we retry with depth set to None, then by syncing all branches\n- fixes (2) by passing depth as argument of _RemoteFetch() method\n  thus, its value is not set again to depth value passed to repo init\n  command when applying fallback\n\nChange-Id: Ifd6fffafc49ba229df624b0d7b64c83d47619d17\n"
    },
    {
      "commit": "ae81c964b6bef958e3d760e5c51d7d0fa8bf9ff9",
      "tree": "ef237e294e26c13c6189de37763f221b8cc1704a",
      "parents": [
        "e02c17c9eadb7cf591853f97f8780861379ea05f",
        "2e14792a9481736e4b532da64813a7cb856c48a0"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri Oct 28 07:52:31 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 28 07:52:31 2016 +0000"
      },
      "message": "Merge \"implement optional \u0027--all\u0027 in the abandon command\""
    },
    {
      "commit": "e02c17c9eadb7cf591853f97f8780861379ea05f",
      "tree": "2a0f2d51cf12d12153ef98864bc1028e106d9d37",
      "parents": [
        "6e310790334b2cd7f7ba72cf3dbd3585176ccbdf",
        "ec287902e6517f0f7d11738f411d111c1ed06df1"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Oct 28 06:49:07 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 28 06:49:07 2016 +0000"
      },
      "message": "Merge \"_CheckDirReference: log actual error before suggesting --force-sync\""
    },
    {
      "commit": "6e310790334b2cd7f7ba72cf3dbd3585176ccbdf",
      "tree": "5f2188eb4bcaf7288b2927165d03e308ddd7a534",
      "parents": [
        "4d5bb68d58f12885ea06fb73d5e17d8c780c9ff8"
      ],
      "author": {
        "name": "Joe Kilner",
        "email": "joekilner@google.com",
        "time": "Thu Oct 27 15:53:53 2016 -0700"
      },
      "committer": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Thu Oct 27 15:56:38 2016 -0700"
      },
      "message": "Add sso to list of known schemes for relative URLs\n\nrepo already special-cases sso:// URLs to behave similarly to https://\nand rpc:// elsewhere in repo, but it forgot to do so here.\n\nNoticed when trying to use relative URLs in a manifest obtained using\nan sso:// URL.\n\nChange-Id: Ia11469a09bbd6e444dbc4f22c82f9bbe9f5fd083\n"
    },
    {
      "commit": "ec287902e6517f0f7d11738f411d111c1ed06df1",
      "tree": "ee4b3071c42e75bbd4dd955b9b1535bc15e5cd0b",
      "parents": [
        "4d5bb68d58f12885ea06fb73d5e17d8c780c9ff8"
      ],
      "author": {
        "name": "Marc Herbert",
        "email": "marc.herbert@intel.com",
        "time": "Thu Oct 27 12:58:26 2016 -0700"
      },
      "committer": {
        "name": "Marc Herbert",
        "email": "marc.herbert@intel.com",
        "time": "Thu Oct 27 12:58:26 2016 -0700"
      },
      "message": "_CheckDirReference: log actual error before suggesting --force-sync\n\nA recent backward incompatible change created confusion and loss of\nproductivity and highlighted the very limited amount of information\nprovided when repo sync fails; merely recommending to --force-sync\nand blow-up git repos without any hint as to why. The addition of\nthis basic _error(...) call would have provided a clue and will in\nthe future.\n\nBUG\u003dIssue 232\nTEST\u003dsimulate a breakage similar to the ones reported at\n  https://groups.google.com/a/chromium.org/forum/#!topic/chromium-os-dev/2-0oCy_CX5s\n  cd .repo/projects/src/third_party/libapps.git/\n  file info; rm info; ln -s wronglink info\n  cd -\n  repo sync src/third_party/libapps/\n  # error message now shows the failure\n\nChange-Id: Idd2f177a096f1ad686caa8c67cb361d594ccaa57\n"
    },
    {
      "commit": "4d5bb68d58f12885ea06fb73d5e17d8c780c9ff8",
      "tree": "9388a9c030c05bb8780a8bfaa1ff962f2dac1afb",
      "parents": [
        "82f67987a3e665f9c66e8fb944042a1b4815b61b"
      ],
      "author": {
        "name": "Andrew Wheeler",
        "email": "agwheeler@gmail.com",
        "time": "Mon Feb 27 13:52:22 2012 -0600"
      },
      "committer": {
        "name": "Andrew Wheeler",
        "email": "agwheeler@gmail.com",
        "time": "Mon Oct 17 15:24:09 2016 -0500"
      },
      "message": "status: add -q/--quiet option\n\nThe --quiet option reduces the output to just\na list of projects with modified workspaces (and\norphans if -o is specified)\n\nA common use case is when performing a full-workspace\nmerge.  The integrator will kick-off a merge via:\n\n    repo forall -c git merge \u003csome tag\u003e\n\nAnd then produce a short list of conflicted projects via:\n\n    repo status -q\n\nThe integrator can then iteratively fix and clean up all conficted\ncomponents.  The merge is complete when:\n\n    repo status -q\n\n    returns no output.\n\nChange-Id: Ibbba8713eac35befd8287c95948874e23fd5c7e2\n"
    },
    {
      "commit": "2e14792a9481736e4b532da64813a7cb856c48a0",
      "tree": "eb9c9db4514da7032f3a172873ce6dc1247beca0",
      "parents": [
        "699bcd40be2c10e7e55d955e245f0621b8fab110"
      ],
      "author": {
        "name": "Kyunam.jo",
        "email": "kyunam.jo@lge.com",
        "time": "Wed Oct 12 16:33:19 2016 +0900"
      },
      "committer": {
        "name": "Kyunam Jo",
        "email": "kyunam.jo@lge.com",
        "time": "Mon Oct 17 02:29:42 2016 +0000"
      },
      "message": "implement optional \u0027--all\u0027 in the abandon command\n\nwhen you want to delete all local branches, you should be find\nall branches\u0027 name, and type them behind \u0027repo abandon\u0027 command.\n\nUsage:\n    repo abandon --all [\u003cproject\u003e...]\n\nChange-Id: I4d391f37fb9d89b8095488c585468eafc1a35f31\n"
    },
    {
      "commit": "82f67987a3e665f9c66e8fb944042a1b4815b61b",
      "tree": "074458f14fe3d5d245ce62c3f214b22597cf2b80",
      "parents": [
        "699bcd40be2c10e7e55d955e245f0621b8fab110",
        "7f1ccfbb7bb29195e53fcc374a648379f5f53d3a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Oct 17 01:10:16 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 17 01:10:16 2016 +0000"
      },
      "message": "Merge \"sync: Fix semaphore release bug that causes thread \u0027leaks\u0027\""
    },
    {
      "commit": "699bcd40be2c10e7e55d955e245f0621b8fab110",
      "tree": "8786606eec17b92304a1e9d4f39f7b041d65fab1",
      "parents": [
        "eceeb1b1f5edb0f42e690bffdf81828abd8ea7fe"
      ],
      "author": {
        "name": "Kyunam.jo",
        "email": "kyunam.jo@lge.com",
        "time": "Wed Oct 12 09:59:34 2016 +0900"
      },
      "committer": {
        "name": "Kyunam.jo",
        "email": "kyunam.jo@lge.com",
        "time": "Wed Oct 12 10:02:30 2016 +0900"
      },
      "message": "Removed duplication code in abandon.py\n\ncode about getting argument is duplicated.\nso this line is removed\n\nChange-Id: Id321b999c7dacdb403cd986cbf35f8db62efc157\n"
    },
    {
      "commit": "7f1ccfbb7bb29195e53fcc374a648379f5f53d3a",
      "tree": "1bd13675e42ba771a5c26343508cfa62831edcfa",
      "parents": [
        "eceeb1b1f5edb0f42e690bffdf81828abd8ea7fe"
      ],
      "author": {
        "name": "Andrew Wheeler",
        "email": "andrew@igmo.org",
        "time": "Fri Jun 17 16:51:07 2016 -0500"
      },
      "committer": {
        "name": "Andrew Wheeler",
        "email": "andrew@igmo.org",
        "time": "Tue Oct 11 14:10:34 2016 -0500"
      },
      "message": "sync: Fix semaphore release bug that causes thread \u0027leaks\u0027\n\nWhen repo syncs a manifest that utilizes multiple branches\nin the same project, then the sync will use an extra\nthread for each \"duplicate\".  For example, if\nthe manifest includes the project \"foo\" and \"bar\"\ntwice, then \"repo sync -jN\" will fetch with N+2 threads.\n\nThis is caused by _FetchHelper() releasing the thread semaphore\nobject each time it\u0027s called, even though _FetchProjectList()\nmay call this function multiple times within the scope of a\nsingle thread.\n\nFix by moving the thread semaphore release to\n_FetchProjectList(), which is only called once per thread\ninstance.\n\nChange-Id: I1da78b145e09524d40457db5ca5c37d315432bd8\n"
    },
    {
      "commit": "eceeb1b1f5edb0f42e690bffdf81828abd8ea7fe",
      "tree": "3fd305d999c46951092958f8f675ba67bdd7816a",
      "parents": [
        "16889ba43da81aead6bdb3acd1233381dd8e7562"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Sun Sep 25 18:24:27 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Sep 27 03:05:11 2016 +0000"
      },
      "message": "Support broken symlinks when cleaning obsolete paths\n\nWhen there\u0027s a symlink to a directory, os.walk still lists the symlink\nin dirs, even if it isn\u0027t configured to follow symlinks. This will fail\nthe listdirs check if the symlink is broken (either before or during the\ncleanup). So instead, check for directory symlinks and remove them using\nos.remove.\n\nBug: Issue 231\nChange-Id: I0ec45a26be566613a4a39bf694a3d9c6328481c2\n"
    },
    {
      "commit": "16889ba43da81aead6bdb3acd1233381dd8e7562",
      "tree": "a4e80b68626330ff020d21524bd5b43bdf221b84",
      "parents": [
        "40d39522708a48320105a3bfbb1f2145b72b1e16"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Sep 22 16:39:06 2016 +0000"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Sep 22 16:40:27 2016 +0000"
      },
      "message": "Revert \"Repo: fall back to http, if ssh connection fails for http repos\"\n\nThis reverts commit 488bf092d5992bd1b8f8681c444f2cc283d05bcb.\n\nIssue 230\n\nChange-Id: I3a5725301f576e1a2ac499cb6daa631895115640\n"
    },
    {
      "commit": "40d39522708a48320105a3bfbb1f2145b72b1e16",
      "tree": "08996b0e9e2154e4292928fe90b24a2e863cf31d",
      "parents": [
        "d648045366b3710c834531295bd643bceb0c612c",
        "4350791e0d652721015cc94509233c833dad8812"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Sep 21 22:23:44 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 21 22:23:44 2016 +0000"
      },
      "message": "Merge \"On project cleanup, don\u0027t remove nested projects\""
    },
    {
      "commit": "4350791e0d652721015cc94509233c833dad8812",
      "tree": "d28ada6016b8c95898a05bc328267a038566129b",
      "parents": [
        "628456833a9be237c7373254fbe0771b2e802a88"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Sep 01 16:26:02 2016 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Sep 20 17:16:12 2016 -0700"
      },
      "message": "On project cleanup, don\u0027t remove nested projects\n\nWhen there are nested projects in a manifest, like on AOSP right now:\n\n\u003cproject path\u003d\"build\" name\u003d\"platform/build\" /\u003e\n\u003cproject path\u003d\"build/blueprint\" name\u003d\"platform/build/blueprint\" /\u003e\n\u003cproject path\u003d\"build/kati\" name\u003d\"platform/build/kati\" /\u003e\n\u003cproject path\u003d\"build/soong\" name\u003d\"platform/build/soong\" /\u003e\n\nAnd the top \"build\" project is removed (or renamed to remove the\nnesting), repo just wipes away everything under build/ and re-creates\nthe projects that are still there. But it only checks to see if the\nbuild/ project is dirty, so if there are dirty files in a nested\nproject, they\u0027ll just be blown away, and a fresh worktree checked out.\n\nInstead, behave similarly to how `git clean -dxf` behaves and preserve\nany subdirectories that have git repositories in them. This isn\u0027t as\nstrict as git -- it does not check to see if the \u0027.git\u0027 entry is a\nreadable gitdir, just whether an entry named \u0027.git\u0027 exists.\n\nIf it encounters any errors removing files, we\u0027ll print them all out to\nstderr and tell the user that we were unable to clean up the obsolete\nproject, that they should clean it up manually, then sync again.\n\nChange-Id: I2f6a7dd205a8e0b7590ca5369e9b0ba21d5a6f77\n"
    },
    {
      "commit": "d648045366b3710c834531295bd643bceb0c612c",
      "tree": "3cb2563ade2dbc4617c3ed7b4517c86d17a4428e",
      "parents": [
        "628456833a9be237c7373254fbe0771b2e802a88"
      ],
      "author": {
        "name": "Steve Rae",
        "email": "steve.rae@raedomain.com",
        "time": "Wed Aug 10 15:00:00 2016 -0700"
      },
      "committer": {
        "name": "Steve Rae",
        "email": "steve.rae@raedomain.com",
        "time": "Tue Sep 20 15:31:20 2016 +0000"
      },
      "message": "implement optional \u0027pushurl\u0027 in the manifest file\n\nAllow the \u0027remote\u0027 element in the manifest file to define an optional\n\u0027pushurl\u0027 attribute which is passed into the .git/config file.\n\nChange-Id: If342d299d371374aedc4440645798888869c9714\nSigned-off-by: Steve Rae \u003csteve.rae@raedomain.com\u003e\n"
    },
    {
      "commit": "628456833a9be237c7373254fbe0771b2e802a88",
      "tree": "b4d840a6430972a2256644e3b47e1846a6e870d4",
      "parents": [
        "2aa61d0bc827b1eaaf9865f1e1445386571e3f30",
        "05dc46b0e3c008f9f83a576e59c74fd17735dfa9"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Sep 20 08:06:12 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 20 08:06:12 2016 +0000"
      },
      "message": "Merge \"Repo: improve error detection for new ssh connections\""
    },
    {
      "commit": "2aa61d0bc827b1eaaf9865f1e1445386571e3f30",
      "tree": "76a97f94648a57c4a2225165c3fb8f3d6f861022",
      "parents": [
        "4aed6f8c7db9f492a4b4073d3050a02ee1922c0f",
        "488bf092d5992bd1b8f8681c444f2cc283d05bcb"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Sep 20 08:05:57 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 20 08:05:57 2016 +0000"
      },
      "message": "Merge \"Repo: fall back to http, if ssh connection fails for http repos\""
    },
    {
      "commit": "4aed6f8c7db9f492a4b4073d3050a02ee1922c0f",
      "tree": "77babd1fef3774e663fc10d5fa039e177ea2637b",
      "parents": [
        "01b7d758d563ed3eca38cf8b57b7d71f2b6642a3",
        "bb5b1a076b86a67508bbcc94baf08deea50e1d09"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Sep 20 06:57:16 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 20 06:57:16 2016 +0000"
      },
      "message": "Merge \"Replace pylint with pyflakes/flake8\""
    },
    {
      "commit": "01b7d758d563ed3eca38cf8b57b7d71f2b6642a3",
      "tree": "f07830c842070251da6fd94a3759050611fe694a",
      "parents": [
        "267ac57361b268e6c3c64390e4803cfee3b85f2f",
        "2ff302929ca12b309ab35a3f957cd0179f382d74"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Sep 14 20:48:24 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 14 20:48:24 2016 +0000"
      },
      "message": "Merge \"When syncing a project with a shared object store, disable automatic pruning.\""
    },
    {
      "commit": "267ac57361b268e6c3c64390e4803cfee3b85f2f",
      "tree": "434efa456e72d988dc80a2db667dc3a0a09c16c7",
      "parents": [
        "e01ee026e63688606183025606a4879146dba20a",
        "e4433653db9026fc89865a2d7bbbfb0392aaa387"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Sep 14 14:06:42 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 14 14:06:42 2016 +0000"
      },
      "message": "Merge \"repo: add comment for updating maintainer keys\""
    },
    {
      "commit": "bb5b1a076b86a67508bbcc94baf08deea50e1d09",
      "tree": "2a6778983b838539292134a72fb6a0ec77b39456",
      "parents": [
        "e01ee026e63688606183025606a4879146dba20a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri Sep 02 14:20:38 2016 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Sep 14 09:49:02 2016 +0200"
      },
      "message": "Replace pylint with pyflakes/flake8\n\npylint reports a lot of warnings, but many of them are false positive,\nand it\u0027s difficult to configure it. It also seems that for some reason\nthe included config file is not working well with the latest version.\n\nUpdate the documentation to recommend using pyflakes and flake8 instead\nof pylint. Remove the pylint config and add a basic flake8 config with\nminimum settings:\n\n- Maximum line length 80 columns\n- Ignore warnings about indentation (repo uses 2 rather than expected 4)\n- Ignore warnings about import placement\n\nIn this commit no code cleanup is done, and it\u0027s expected that most of\nthe files will throw up quite a few warnings, at least for flake8. These\ncan be cleaned up in follow-up commits.\n\nThe existing pylint suppression comments are left as-is. These will be\nhelpful when cleaning up pyflakes warnings later.\n\nChange-Id: I2f7cb4340266ed07cc973ca6483b8f09d66a765b\n"
    },
    {
      "commit": "e01ee026e63688606183025606a4879146dba20a",
      "tree": "c2283ce6bf6ed9336c6879098d570c277d856b54",
      "parents": [
        "d9de945d8a7842cdb470ee07ee44d692ff5297b5",
        "2598ed06f1907b2657ae714adc2073b3b2aeda34"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Sep 14 07:45:49 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 14 07:45:50 2016 +0000"
      },
      "message": "Merge \"Fix submodule checkout error when using sync-s option\""
    },
    {
      "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": "2ff302929ca12b309ab35a3f957cd0179f382d74",
      "tree": "64d3150bea0efd2989a22f28e750c09614f9e772",
      "parents": [
        "7a77c16d376f504bd06d017ba10c91e3a6073b08"
      ],
      "author": {
        "name": "Gabe Black",
        "email": "gabeblack@chromium.org",
        "time": "Thu Oct 09 17:54:35 2014 -0700"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Wed Sep 14 00:19:44 2016 -0400"
      },
      "message": "When syncing a project with a shared object store, disable automatic pruning.\n\nThe shared object stores confuse git and make it throw away objects which are\nstill in use. We\u0027ll avoid that problem by disabling automatic pruning on those\nprojects, but there\u0027s nothing preventing a user from changing the config back\nor pruning a repository manually.\n\nBUG\u003dchromium:375945\nTEST\u003dRan repo sync on fresh ChromeOS checkout, starting with a branch of repo\nwith this change. Verified that the kernel projects and no others were\nidentified as having shared object stores, and that repo successfully disabled\nautomatic pruning in their configs. Re-enabled pruning and ran repo sync just\non one of the kernel directories. Verified that pruning was re-disabled as a\nresult.\n\nChange-Id: I728ed5b06f0087aeb5a23ba8f5410a7cd10af5b0\n"
    },
    {
      "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": "488bf092d5992bd1b8f8681c444f2cc283d05bcb",
      "tree": "015fa757c763eb9c9df5bd92250ffdd3cc4282f0",
      "parents": [
        "39252ba028012fd14e4e283217d842fb80206c52"
      ],
      "author": {
        "name": "Timo Lotterbach",
        "email": "timo.lotterbach@bmw-carit.de",
        "time": "Fri Jul 15 16:55:39 2016 +0200"
      },
      "committer": {
        "name": "Timo Lotterbach",
        "email": "timo.lotterbach@bmw-carit.de",
        "time": "Tue Aug 30 07:35:03 2016 +0000"
      },
      "message": "Repo: fall back to http, if ssh connection fails for http repos\n\nif a gerrit server has ssh and https access enabled, but user access\n(for some users) is limited to https, \u0027repo upload\u0027 command will fail\nfor them.\n\nGerrit returns a ssh configuration (gerrit/ssh_info), that does not work\nfor users limited to https.\n\nWith this patch repo will test, if the returned ssh configuration from\ngerrit/ssh_info is working. if not, it will fall back to https for upload.\n\nChange-Id: If98f472e994f350bf71f35610cd649b163f1ab33\n"
    },
    {
      "commit": "05dc46b0e3c008f9f83a576e59c74fd17735dfa9",
      "tree": "716f91a338c593ecc072cac8127bdb741c213ce3",
      "parents": [
        "39252ba028012fd14e4e283217d842fb80206c52"
      ],
      "author": {
        "name": "Timo Lotterbach",
        "email": "timo.lotterbach@bmw-carit.de",
        "time": "Fri Jul 15 16:48:42 2016 +0200"
      },
      "committer": {
        "name": "Timo Lotterbach",
        "email": "timo.lotterbach@bmw-carit.de",
        "time": "Tue Aug 30 07:34:33 2016 +0000"
      },
      "message": "Repo: improve error detection for new ssh connections\n\nthis check can only detect errors that happen within 1 sec after launching\nssh. But this is typically enough to catch configuration issues like\n\u0027connection refused\u0027 or \u0027authentication failed\u0027.\n\nChange-Id: I00b6f62d4c2889b1faa6c820e49a198554c92795\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": "8ac0c96537f876127be879d0931ede1545f93d34",
      "tree": "f98ae2391f541900934c74df232de5abf5dace0d",
      "parents": [
        "faaddc9b4e4c6f6cbac02e90415676fabd177b99"
      ],
      "author": {
        "name": "Cheuk Leung",
        "email": "cheuk.leung.consultant@gmail.com",
        "time": "Mon Jul 06 21:33:00 2015 +0200"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Jun 29 05:43:01 2016 +0000"
      },
      "message": "Fix removing broken symlink in reference dir\n\nRe-ordered to first create the symlink before checking the source\nfile and remove the destination if the source does not exists.\n\nChange-Id: Iae923ba2ef0ba5a8dc1b8e42d8cc3f3708f773af\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": "2598ed06f1907b2657ae714adc2073b3b2aeda34",
      "tree": "a60e2ef9da57d8d71216da6d7f5b33d7695ca791",
      "parents": [
        "203153e7bba61b1b2d782e9e75aef919eab0d54b"
      ],
      "author": {
        "name": "Aymen Bouaziz",
        "email": "aymen.bouaziz@parrot.com",
        "time": "Fri Jun 24 14:34:08 2016 +0200"
      },
      "committer": {
        "name": "Aymen Bouaziz",
        "email": "aymen.bouaziz@parrot.com",
        "time": "Mon Jun 27 20:16:45 2016 +0200"
      },
      "message": "Fix submodule checkout error when using sync-s option\n\nWhen sync-s\u003d\"true\" option is used, the checkout of a submodule will try\nto use the revision attribute of the parent project.\n\nIf this revision is a named reference, the checkout will fail if there\nis no reference with this name in the submodule.\n\nThe proposed solution is to use the git commit id as revisionExpr for\nsubmodules.\n\nChange-Id: Ie8390a11957fd6a9c61289c6861d13cb3fa11678\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"
    }
  ],
  "next": "1a799d14b71c3f694aa62edf99310bc3e1a482d5"
}
