)]}'
{
  "log": [
    {
      "commit": "84e7e16d35f7300bc5f4b6cca85deaf1b5a45263",
      "tree": "68d7dd3ec95ecaa64b6eb55747dbe7cda7e81b02",
      "parents": [
        "f46902a800f508061322a36b1969f51a7e95df16"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Fri Nov 10 21:28:41 2017 -0500"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Fri Nov 10 21:53:59 2017 -0500"
      },
      "message": "document repo hooks mechanism\n\nChange-Id: I9e25b92c846f887f515efcc706cf5a869645e0ec\n"
    },
    {
      "commit": "f46902a800f508061322a36b1969f51a7e95df16",
      "tree": "b0865343f7fa5702bf16c7662852b45f6119c084",
      "parents": [
        "c00d28b767240ef17a0402a7d55a7a6197ce2815"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Oct 31 12:27:17 2017 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Oct 31 13:07:55 2017 +0900"
      },
      "message": "forall: Clarify expansion of REPO_ environment values with -c\n\nIf a user executes:\n\n  repo forall -c echo $REPO_PROJECT\n\nthen $REPO_NAME is expanded by the user\u0027s shell first, and passed\nas $1 to the shell that executes echo. This will either result in\nno output, or output of whatever REPO_NAME is set to in the user\u0027s\nshell. Either way, this is an unexpected result.\n\nThe correct way to do it is:\n\n  repo forall -c \u0027echo $REPO_PROJECT\u0027\n\nsuch that $REPO_NAME is passed in to the shell literally, and then\nexpanded to the value set in the environment that was passed to\nthe shell.\n\nUpdate the documentation to make this clearer.\n\nChange-Id: I713caee914172ad8d8f0fafacd27026502436f0d\n"
    },
    {
      "commit": "c00d28b767240ef17a0402a7d55a7a6197ce2815",
      "tree": "58ca90c82590183ea9cd5f21c116eb8927ab7e44",
      "parents": [
        "788e9626ccefa2e40aab58b67a1487e2a26b8225"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Thu Oct 19 14:23:10 2017 -0700"
      },
      "committer": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Thu Oct 19 14:39:26 2017 -0700"
      },
      "message": "Set GIT_SSH_VARIANT when setting GIT_SSH\n\nMake it explicit that the ssh wrapper we use for control master\nsupport accepts OpenSSH-compatible command line arguments instead of\nasking Git to guess.\n\nThe GIT_SSH_VARIANT setting was introduced in Git v2.13.0-rc0~3^2~2\n(2017-02-01) as a more reliable detection method than relying on the\nssh command name.  Fortunately the default variant was \u0027ssh\u0027 (i.e.,\nOpenSSH-compatible) so this wasn\u0027t initially required.\n\nNow Git wants to start using more OpenSSH features\n(-o SendEnv\u003dGIT_PROTOCOL), and in order to do so its ssh variant\ndetection will need to be tweaked.  Set GIT_SSH_VARIANT explicitly\nso this helper can continue to work regardless of how Git modifies\nits autodetection.\n\nReported-by: William Yan \u003cwyan@google.com\u003e\nChange-Id: I6bf2c53b4eb5303a429eae6cb68e0a5ccce89064\n"
    },
    {
      "commit": "788e9626ccefa2e40aab58b67a1487e2a26b8225",
      "tree": "ba39c11ae8331c87303311062d626ce2f706a0c7",
      "parents": [
        "cd892a38a61e2cb5975189a8f6e61fe1cd72d2c1"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Fri Jan 27 11:41:12 2017 -0800"
      },
      "committer": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Thu Aug 31 13:49:59 2017 -0700"
      },
      "message": "Provide more specific error message for symlinks errors on Windows\n\nChange-Id: Ia6099beef37ae6b6143eba243fe7fbe02b74a9bb\n"
    },
    {
      "commit": "cd892a38a61e2cb5975189a8f6e61fe1cd72d2c1",
      "tree": "893d07c27770c4376f9e4a78395fc944761dd032",
      "parents": [
        "010fed771183c23c0e7d04a4e7292782f68de9db"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Thu Nov 03 15:59:05 2016 -0700"
      },
      "committer": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Thu Aug 31 13:49:49 2017 -0700"
      },
      "message": "Allow quotes in editor command on Windows\n\nThis change allows setting the EDITOR env. variable to point to a\nprogram location that contains quotes and spaces.\n\nFor example:\n\n\u003e set EDITOR\u003d\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\" -multiInst -nosession\n\u003e repo upload\n\nChange-Id: Ic95b00f7443982b1956a2992d0220e50b1cf6bbb\n"
    },
    {
      "commit": "010fed771183c23c0e7d04a4e7292782f68de9db",
      "tree": "438b928fa1adaa7105d88462299513ca59c47c9f",
      "parents": [
        "e8595e9df7980b0b7d9111de43d294c4439d474c"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Fri Nov 11 14:25:29 2016 -0800"
      },
      "committer": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Thu Aug 31 13:49:36 2017 -0700"
      },
      "message": "Replace all os.remove calls\n\nos.remove raises an exception when deleting read-only files on\nWindows. Replace all calls with calls to platform_utils.remove,\nwhich deals with deals with that issue.\n\nChange-Id: I4dc9e0c9a36b4238880520c69f5075eca40f3e66\n"
    },
    {
      "commit": "e8595e9df7980b0b7d9111de43d294c4439d474c",
      "tree": "1a7034b7854eb47965b8112ccaf3b33687cac583",
      "parents": [
        "227ad2ef42f47798d24814dfc2cef8119c313ab7"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Tue Nov 01 15:51:59 2016 -0700"
      },
      "committer": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Thu Aug 31 13:49:26 2017 -0700"
      },
      "message": "Support pager on Windows\n\nWindows does not support pipe|fork, but we can simulate by creating\nthe pager as a child process, redirecting stdout/in/err appropriately\nand then waiting for the child process to terminate after we are\ndone executing the repo command.\n\nChange-Id: I5dd2bdeb4095e4d93bc678802e53c6d4eda0235b\n"
    },
    {
      "commit": "227ad2ef42f47798d24814dfc2cef8119c313ab7",
      "tree": "0702d4dac67f59072edc6587122c27f4753021a5",
      "parents": [
        "2a4be948788dfe5ae9437b048fba229a96bbff2d"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Tue Nov 01 14:37:13 2016 -0700"
      },
      "committer": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Thu Aug 31 13:49:01 2017 -0700"
      },
      "message": "Implement islink, readlink and realpath using Win32 api\n\nChange-Id: I18452cbb32d24db73601ad10485dbe6bb278731c\n"
    },
    {
      "commit": "2a4be948788dfe5ae9437b048fba229a96bbff2d",
      "tree": "27c700887158c27b819992f507dfb2504dc7d101",
      "parents": [
        "9d743397bfceae24a12a566ac1f4d5f968ba2779"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Tue Nov 01 13:48:15 2016 -0700"
      },
      "committer": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Thu Aug 31 12:13:52 2017 -0700"
      },
      "message": "Handle Windows line endings when reading binary files\n\nWithout this change, \u0027.git\\HEAD\u0027 files, for examples, are sometime\nread incorrectly resulting in the current branch to be reset to\n\"master\" when running a \"repo init -b xxx\" on an already initialized\nrepository.\n\nChange-Id: I48c7ef85ff81626edf156914329a560e14252f2a\n"
    },
    {
      "commit": "9d743397bfceae24a12a566ac1f4d5f968ba2779",
      "tree": "cbc177296afd38e00f82b8a0b492801381ee9a66",
      "parents": [
        "2c57d619bca9b946eeaa4f5b88397b9e1460cf35",
        "2ec2a5d64c8f5bad7d2549720a928d4b52080d01"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 30 15:11:22 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 30 15:11:22 2017 +0000"
      },
      "message": "Merge \"Fixed upload to remotes with the url ssh://hostname\""
    },
    {
      "commit": "2c57d619bca9b946eeaa4f5b88397b9e1460cf35",
      "tree": "40a44a05a9d1a3cd12121f4afe8e8374f9e46da6",
      "parents": [
        "d1ebc89a083f2966f8c65246bb63e2deaadfab62",
        "bed59cec5e5a9a5668cf2c7df3a24545b1e76c09"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 30 15:11:10 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 30 15:11:10 2017 +0000"
      },
      "message": "Merge \"Add option \u0027--no-cert-checks\u0027 for \u0027upload\u0027 sub command.\""
    },
    {
      "commit": "d1ebc89a083f2966f8c65246bb63e2deaadfab62",
      "tree": "cd6bd047ba2c7b83a25ba045a48efa95393f7fbe",
      "parents": [
        "9ead97bb51f5b1ad1d0a45e0c5442f15e1e38fd7",
        "ad1abcb556bfff2744928a8f29d216aee43fdbe3"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 30 10:24:03 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 30 10:24:03 2017 +0000"
      },
      "message": "Merge changes from topic \"windows-support\"\n\n* changes:\n  Port os.rename calls to work on Windows\n  Workaround shutil.rmtree limitation on Windows\n  Add support for creating symbolic links on Windows\n  Make \"git command\" and \"forall\" work on Windows\n"
    },
    {
      "commit": "2ec2a5d64c8f5bad7d2549720a928d4b52080d01",
      "tree": "abe11bc2843de6a4d6743ced40d248fa8c2c0abe",
      "parents": [
        "9ead97bb51f5b1ad1d0a45e0c5442f15e1e38fd7"
      ],
      "author": {
        "name": "Christian Koestlin",
        "email": "christian.koestlin@gmail.com",
        "time": "Mon Dec 05 20:32:45 2016 +0100"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Aug 29 20:16:08 2017 +0000"
      },
      "message": "Fixed upload to remotes with the url ssh://hostname\n\nChange-Id: I1d0dd4d3f90eac45205f6f4ca98a29b0babdbc3f\n"
    },
    {
      "commit": "9ead97bb51f5b1ad1d0a45e0c5442f15e1e38fd7",
      "tree": "4edd8cc4d061a3c8971fd6d55a547320120ad10b",
      "parents": [
        "e43322625a423c2dc7aa8b0648c172ccbe7aefa7"
      ],
      "author": {
        "name": "Zac Livingston",
        "email": "zacl@codeaurora.org",
        "time": "Tue Jun 13 08:29:04 2017 -0600"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri Aug 25 09:10:29 2017 +0900"
      },
      "message": "When starting a branch, do not use a tag or change value for branch.merge\n\nWhen starting a branch, branch.merge is set to project revision unless\nthe revision is a SHA1. In that case, branch.merge is set to dest_branch\nif defined or manifest default revision otherwise. This special handling\nallows repo upload to work when the project revision is a SHA1.\n\nExtend the special handling to also happen when the project revision\nis a tag value or a change value so that repo upload will work in those\ncase as well.\n\nChange-Id: Iff81ece40e770cd02535e80dcb023564d42dcf47\n"
    },
    {
      "commit": "e43322625a423c2dc7aa8b0648c172ccbe7aefa7",
      "tree": "3ae70681f8fd7ec0f30ca5a98690e8c5aba44e26",
      "parents": [
        "c94d6eb90233421b431adbd5a01b7ec24729a285"
      ],
      "author": {
        "name": "Zac Livingston",
        "email": "zacl@codeaurora.org",
        "time": "Fri Jun 16 08:56:09 2017 -0600"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri Aug 25 00:00:02 2017 +0000"
      },
      "message": "Print a message when fetching is skipped for an immutable ref\n\nThe output indicates that fetching happens even when it is skipped.\n\nTo avoid confusion, print a message when fetching is skipped for\nan immutable ref so that the user knows when and why a fetch is skipped.\n\nChange-Id: Id6e4812cebc5e57d379feb76a9d034af0b93043b\n"
    },
    {
      "commit": "bed59cec5e5a9a5668cf2c7df3a24545b1e76c09",
      "tree": "f7569ff48632187517e5df8dd2d3cb5850691593",
      "parents": [
        "c94d6eb90233421b431adbd5a01b7ec24729a285"
      ],
      "author": {
        "name": "Łukasz Gardoń",
        "email": "garjack555@gmail.com",
        "time": "Tue Aug 08 10:18:11 2017 +0200"
      },
      "committer": {
        "name": "Łukasz Gardoń",
        "email": "garjack555@gmail.com",
        "time": "Wed Aug 23 14:06:14 2017 +0200"
      },
      "message": "Add option \u0027--no-cert-checks\u0027 for \u0027upload\u0027 sub command.\n\nThis option allow to bypass verification ssl certification while\nestablishing connection with Gerrit to upload review.\n\nChange-Id: If2e15f5a273c18a700eb5093ca8a4d5a4cbf80cd\n"
    },
    {
      "commit": "c94d6eb90233421b431adbd5a01b7ec24729a285",
      "tree": "ab8bb74e27b845419ef57048044d758ff3eb1d3f",
      "parents": [
        "d88f53e2b9634b9645f80b2d8e653beac24711fe"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Tue Aug 08 18:34:53 2017 +0000"
      },
      "committer": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Tue Aug 08 18:34:53 2017 +0000"
      },
      "message": "Revert \"Migrate git-repo to create private changes rather than drafts\"\n\nThis reverts commit d88f53e2b9634b9645f80b2d8e653beac24711fe. I merged\nit too hastily without paying enough attention to compatibility with\nreleased Gerrit versions.\n\nChange-Id: I4028d4737df1255f11e217da183a19a010597d5b\n"
    },
    {
      "commit": "d88f53e2b9634b9645f80b2d8e653beac24711fe",
      "tree": "7fc6d88e282aa7d11322549f900b6708f135ab3f",
      "parents": [
        "87984c6db4962043c2b9e5a5a4a30eaf6d066077"
      ],
      "author": {
        "name": "Changcheng Xiao",
        "email": "xchangcheng@google.com",
        "time": "Mon Aug 07 15:05:46 2017 +0200"
      },
      "committer": {
        "name": "Changcheng Xiao",
        "email": "xchangcheng@google.com",
        "time": "Mon Aug 07 15:08:18 2017 +0200"
      },
      "message": "Migrate git-repo to create private changes rather than drafts\n\nConsidering that some users might expect changes created with\n\u0027-d\u0027 option are not public. Private changes may be a better\nchoice here than work-in-progress changes.\n\nChange-Id: I46a8fb9ae38beb41cf96d6abe82bea6db2439669\n"
    },
    {
      "commit": "87984c6db4962043c2b9e5a5a4a30eaf6d066077",
      "tree": "ab8bb74e27b845419ef57048044d758ff3eb1d3f",
      "parents": [
        "ffc1401327b8240badd6fc62c6f85beca0350b44"
      ],
      "author": {
        "name": "Changcheng Xiao",
        "email": "xchangcheng@google.com",
        "time": "Wed Aug 02 16:55:03 2017 +0200"
      },
      "committer": {
        "name": "Changcheng Xiao",
        "email": "xchangcheng@google.com",
        "time": "Mon Aug 07 15:02:39 2017 +0200"
      },
      "message": "Add options for git-repo to support private and wip changes\n\nThis change adds options for git-repo tool to support private\nchanges and work-in-progress changes.\n\nChange-Id: I343491f5949f06f1580d53f9cc0dee2dca09130f\n"
    },
    {
      "commit": "ffc1401327b8240badd6fc62c6f85beca0350b44",
      "tree": "f22621190ac75296b704a537348c51b2c80b449e",
      "parents": [
        "8a6eeed7f5ba12f0aaa0fc9f62063a88039234d4",
        "7482a96443bf99234b5a150656014a1c54e336a6"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 02 07:19:45 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 02 07:19:45 2017 +0000"
      },
      "message": "Merge \"download: try to choose . as default project if none\""
    },
    {
      "commit": "8a6eeed7f5ba12f0aaa0fc9f62063a88039234d4",
      "tree": "89994e0e6a21839532385f029b1784e09a5b9c27",
      "parents": [
        "3bcd30545e58bc5d6932c9390e8909d57a836617",
        "7be072efa6522a94ee0bab16539a442cc4713d65"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Aug 02 07:01:08 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 02 07:01:08 2017 +0000"
      },
      "message": "Merge \"Always print percentage when syncing quietly\""
    },
    {
      "commit": "7be072efa6522a94ee0bab16539a442cc4713d65",
      "tree": "96c5577a829b6df2e7b2fd5f6ea35e7ba6177a26",
      "parents": [
        "224a31a765eb943443640301a715d2d4eb005b79"
      ],
      "author": {
        "name": "Tim Schumacher",
        "email": "timschumi2@arcor.de",
        "time": "Wed Jun 28 18:29:23 2017 +0200"
      },
      "committer": {
        "name": "Tim Schumacher",
        "email": "timschumi2@arcor.de",
        "time": "Sat Jul 15 16:44:55 2017 +0000"
      },
      "message": "Always print percentage when syncing quietly\n\nChange-Id: I574396e63520781067ed1e991c41caf7640e5731\n"
    },
    {
      "commit": "7482a96443bf99234b5a150656014a1c54e336a6",
      "tree": "b4ae06ce456f092d73890042f4b89b480555d699",
      "parents": [
        "224a31a765eb943443640301a715d2d4eb005b79"
      ],
      "author": {
        "name": "Nicolas Cornu",
        "email": "nicolac76@yahoo.fr",
        "time": "Thu Jun 29 09:15:54 2017 +0200"
      },
      "committer": {
        "name": "Nicolas Cornu",
        "email": "nicolac76@yahoo.fr",
        "time": "Wed Jul 12 10:15:06 2017 +0200"
      },
      "message": "download: try to choose . as default project if none\n\nChange-Id: I28b5e3be5f3c9a4c077af87d6a3e0cc3b96a1b9d\n"
    },
    {
      "commit": "3bcd30545e58bc5d6932c9390e8909d57a836617",
      "tree": "287bcc992e76ced897981d225e5efe8f399c9693",
      "parents": [
        "224a31a765eb943443640301a715d2d4eb005b79"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Jul 10 22:42:22 2017 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Jul 10 23:26:04 2017 +0000"
      },
      "message": "Fix \"list comprehension redefines \u0027x\u0027\" warnings from pyflakes\n\n  $ git ls-files | grep py$ | xargs pyflakes\n  subcmds/stage.py:101: list comprehension redefines \u0027p\u0027 from line 63\n  subcmds/sync.py:784: list comprehension redefines \u0027p\u0027 from line 664\n  subcmds/upload.py:467: list comprehension redefines \u0027avail\u0027 from line 454\n\nChange-Id: Ia65d1a72ed185ab3357e1a91ed4450c719e75a7c\n"
    },
    {
      "commit": "224a31a765eb943443640301a715d2d4eb005b79",
      "tree": "e32deed53d2576e43f8250d22c2a0e44f7e5d558",
      "parents": [
        "b54343d9fd682bcdb1510042d93fdf38979b9eb7"
      ],
      "author": {
        "name": "Martin Kelly",
        "email": "mkelly@xevo.com",
        "time": "Mon Jul 10 14:46:25 2017 -0700"
      },
      "committer": {
        "name": "Martin Kelly",
        "email": "mkelly@xevo.com",
        "time": "Mon Jul 10 14:50:52 2017 -0700"
      },
      "message": "init: add missing submodule arg\n\nThe submodule argument to Sync_LocalHalf was missing in\nMetaBranchSwitch, causing submodules not to get synced when the\n-b/--manifest-branch argument to init is used.\n\nChange-Id: Ie86d271abac2020725770be36ead83be3326e64b\nSigned-off-by: Martin Kelly \u003cmkelly@xevo.com\u003e\n"
    },
    {
      "commit": "b54343d9fd682bcdb1510042d93fdf38979b9eb7",
      "tree": "be75474d1f7346d38b2e0da426d4a7a467ca7c16",
      "parents": [
        "259f16520acafbe85ee68deb43fa74ae56e1c617"
      ],
      "author": {
        "name": "Nicolas Cornu",
        "email": "nicolac76@yahoo.fr",
        "time": "Mon Jul 10 10:31:24 2017 +0200"
      },
      "committer": {
        "name": "Nicolas Cornu",
        "email": "nicolac76@yahoo.fr",
        "time": "Mon Jul 10 13:20:01 2017 +0000"
      },
      "message": "Tell the user if it will upload a draft\n\nChange-Id: Ie004ec9d61603f3f618c47597947b82c59f2839c\n"
    },
    {
      "commit": "259f16520acafbe85ee68deb43fa74ae56e1c617",
      "tree": "4d02a1ae04b78863e7e295dff8b949a00e719b21",
      "parents": [
        "8419ab22d69ed0d89809f322aef16105ad6bb127",
        "913327f10c73c53edca6421a48c116b87b207b15"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Jun 28 04:24:03 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 28 04:24:03 2017 +0000"
      },
      "message": "Merge \"Add a newline after \"Fetching projects\" progress output\""
    },
    {
      "commit": "8419ab22d69ed0d89809f322aef16105ad6bb127",
      "tree": "531c8ee1efdc3455317aa09856312a8724b6ba2e",
      "parents": [
        "35d22217a5ed2f8b5b9b183217923071ccfe7f37"
      ],
      "author": {
        "name": "Nicolas Cornu",
        "email": "nicolac76@yahoo.fr",
        "time": "Fri Jun 16 12:09:06 2017 +0200"
      },
      "committer": {
        "name": "Nicolas Cornu",
        "email": "nicolac76@yahoo.fr",
        "time": "Fri Jun 16 12:23:26 2017 +0200"
      },
      "message": "sync: Continue job if some fetchs failed but force-broken is set\n\nWith --force-broken it continue to fetch other projects but nothing\nis added in directory because it abort some lines later.\n\nChange-Id: I32c4a4619b3028893dc4f98e8d4e5bc5c09adb27\n"
    },
    {
      "commit": "913327f10c73c53edca6421a48c116b87b207b15",
      "tree": "308e308ea5ab4d0cf396a814952983600e063bde",
      "parents": [
        "35d22217a5ed2f8b5b9b183217923071ccfe7f37"
      ],
      "author": {
        "name": "Tim Schumacher",
        "email": "timschumi2@arcor.de",
        "time": "Mon Jun 05 15:01:41 2017 +0200"
      },
      "committer": {
        "name": "Tim Schumacher",
        "email": "timschumi2@arcor.de",
        "time": "Tue Jun 13 13:03:39 2017 +0200"
      },
      "message": "Add a newline after \"Fetching projects\" progress output\n\nOutput before change:\n\n    Fetching project platform/packages/providers/UserDictionaryProvider\n    Fetching projects:  66% (773/1171)  Fetching project platform/external/regex-re2\n    Fetching project device/generic/mini-emulator-x86_64\n\nOutput after change:\n\n    Fetching project platform/packages/providers/UserDictionaryProvider\n    Fetching projects:  66% (773/1171)\n    Fetching project platform/external/regex-re2\n    Fetching project device/generic/mini-emulator-x86_64\n\nChange-Id: I4da84da58316c69294e4da2792f83885dc942701\n"
    },
    {
      "commit": "ad1abcb556bfff2744928a8f29d216aee43fdbe3",
      "tree": "c0d515e2d7c2d097ecb8b31e3e365d86696205b1",
      "parents": [
        "a65adf74f990eeac0d90011476376c7239cb7af5"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Tue Nov 01 11:34:55 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon May 29 19:33:07 2017 +0900"
      },
      "message": "Port os.rename calls to work on Windows\n\nos.rename fails on Windows if the destination exists, so replace\nos.rename to platform_utils.rename which handles the platform\ndifferences.\n\nChange-Id: I15a86f10f65eedee5b003b80f88a0c28a3e1aa48\n"
    },
    {
      "commit": "a65adf74f990eeac0d90011476376c7239cb7af5",
      "tree": "9278d9ce7c8d68a85dd049ed1ea5b64d84135fc0",
      "parents": [
        "d5cec5e752821ca2710101b626b3a3ca07fdb7f8"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Thu Nov 03 10:37:53 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon May 29 19:32:31 2017 +0900"
      },
      "message": "Workaround shutil.rmtree limitation on Windows\n\nBy default, shutil.rmtree raises an exception when deleting readonly\nfiles on Windows.\n\nReplace all shutil.rmtree with platform_utils.rmtree, which adds an\nerror handler to make files read-write when they can\u0027t be deleted.\n\nChange-Id: I9cfea9a7b3703fb16a82cf69331540c2c179ed53\n"
    },
    {
      "commit": "d5cec5e752821ca2710101b626b3a3ca07fdb7f8",
      "tree": "4ecee491de2d3d57b4d03f526701c8c06a133b17",
      "parents": [
        "2e7029116204cf2d6f516e4514091f0b492bc689"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Tue Nov 01 11:24:03 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon May 29 19:30:34 2017 +0900"
      },
      "message": "Add support for creating symbolic links on Windows\n\nReplace all calls to os.symlink with platform_utils.symlink.\n\nThe Windows implementation calls into the CreateSymbolicLinkW Win32\nAPI, as os.symlink is not supported.\n\nSeparate the Win32 API definitions into a separate module\nplatform_utils_win32 for clarity.\n\nChange-Id: I0714c598664c2df93383734e609d948692c17ec5\n"
    },
    {
      "commit": "2e7029116204cf2d6f516e4514091f0b492bc689",
      "tree": "0048544773ddc9d21706dfcc7307bdd3e2f6971f",
      "parents": [
        "35d22217a5ed2f8b5b9b183217923071ccfe7f37"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Tue Nov 01 11:23:38 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon May 29 19:29:30 2017 +0900"
      },
      "message": "Make \"git command\" and \"forall\" work on Windows\n\nPython on Windows does not support non blocking file operations.\nTo workaround this issue, we instead use Threads and a Queue to\nsimulate non-blocking calls. This is happens only when running\nwith the native Windows version of Python, meaning Linux and Cygwin\nare not affected by this change.\n\nChange-Id: I4ce23827b096c5138f67a85c721f58a12279bb6f\n"
    },
    {
      "commit": "35d22217a5ed2f8b5b9b183217923071ccfe7f37",
      "tree": "c964046a80b06fa502887e653c3ccd8482966332",
      "parents": [
        "a24671f661f1fae6678e2bcdd3c9fbae0ad7100f"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Tue Nov 01 11:24:52 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon May 29 13:56:18 2017 +0900"
      },
      "message": "Ensure repo waits for child process to terminate\n\nSee http://stackoverflow.com/questions/7004687/os-exec-on-windows:\n\nexecv on Windows does not behave as on Linux, i.e. a new process is\nspawned and the parent process terminates right away, which makes the\nshell prompt come back too soon.\n\nChange-Id: I1f8d23208765988629f081e9b949c67cf71c08ae\n"
    },
    {
      "commit": "a24671f661f1fae6678e2bcdd3c9fbae0ad7100f",
      "tree": "2ba72d9123bf35e8912edc21fb13273c0cd4ba93",
      "parents": [
        "e0684addeeb920ddf83168d5fbbbe50cb9287abd",
        "c79d3b8fd17352cacb975a74f94c878b7d1f5897"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon May 29 04:54:12 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon May 29 04:54:12 2017 +0000"
      },
      "message": "Merge \"init: allow relative path on --reference argument\""
    },
    {
      "commit": "e0684addeeb920ddf83168d5fbbbe50cb9287abd",
      "tree": "03a3dd940950463c0c88062d1fce2aae78708777",
      "parents": [
        "fef9f21b28d3b59804fdd5db2bbb86e797051dab"
      ],
      "author": {
        "name": "David Riley",
        "email": "davidriley@google.com",
        "time": "Wed Apr 05 00:02:59 2017 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon May 29 13:39:54 2017 +0900"
      },
      "message": "sync: Add support to dump a JSON event log of all sync events.\n\nChange-Id: Id4852968ac1b2bf0093007cf2e5ca951ddab8b3b\n"
    },
    {
      "commit": "fef9f21b28d3b59804fdd5db2bbb86e797051dab",
      "tree": "5d3370f9631ea267c9a1c51855de31eb62deda3e",
      "parents": [
        "6a470be220abd777dae8d62cce4155be9fd136aa"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Tue Nov 01 18:28:01 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sun May 28 21:18:13 2017 +0900"
      },
      "message": "Fix misplaced file separator string.replace call\n\nProject names are stored as path using the \u0027/\u0027 file separator, and\nstored in a dictionary as keys.\n\nChange-Id: Ide40dfe840958ac0d46caae5f77f1a49d71c9d90\n"
    },
    {
      "commit": "6a470be220abd777dae8d62cce4155be9fd136aa",
      "tree": "a44a68ef76c106a0d5cdfe3ebafaf7a25f547f31",
      "parents": [
        "169d8ae93cb8294db9a82cd6de97e94ef53abf7c"
      ],
      "author": {
        "name": "Renaud Paquay",
        "email": "rpaquay@google.com",
        "time": "Tue Nov 01 11:25:15 2016 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sun May 28 21:16:15 2017 +0900"
      },
      "message": "Use OS file separator\n\nChange-Id: I46b15bc1c1b4f2300a6fd98fe16c755da4910e7a\n"
    },
    {
      "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": "c79d3b8fd17352cacb975a74f94c878b7d1f5897",
      "tree": "0cf2224fec644b276df3d1f8b9c6445a0ab74155",
      "parents": [
        "aa90021fbc3382fdac6171572c85ee07369c91e1"
      ],
      "author": {
        "name": "YOUNG HO CHA",
        "email": "ganadist@gmail.com",
        "time": "Tue Jan 24 21:47:50 2017 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sun May 28 00:33:25 2017 +0000"
      },
      "message": "init: allow relative path on --reference argument\n\nChange-Id: I41d6be6bc035fdddb5a27c072994439986d58d58\nSigned-off-by: YOUNG HO CHA \u003cganadist@gmail.com\u003e\n"
    },
    {
      "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"
    }
  ],
  "next": "438eade413b44d3713f020e672ec74a8597efbfe"
}
