)]}'
{
  "log": [
    {
      "commit": "3794a78b80e8b8894a9707629fd8523547cf5cfa",
      "tree": "79164f4572a5064d5897f609c100aecabbdec1e1",
      "parents": [
        "33949c34d28eef7b4a27e0fb1a03221cd3c84113"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Nov 15 06:17:30 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Nov 15 06:21:24 2012 +0900"
      },
      "message": "Sync help text in repo from init.py\n\nChange Ia6032865f9296b29524c2c25b72bd8e175b30489 improved the\nhelp text for the init command, but the same improvement was not made\nin repo.\n\nChange-Id: Idc34e479b5237137b90e8b040824776e4f7883b0\n"
    },
    {
      "commit": "33949c34d28eef7b4a27e0fb1a03221cd3c84113",
      "tree": "fa5efe90998a6b14f6ae600e13eb4cef4cc4fe20",
      "parents": [
        "8f62fb7bd305337994bced7d23b347d0d39f5faf"
      ],
      "author": {
        "name": "Olof Johansson",
        "email": "olof.johansson@sonymobile.com",
        "time": "Tue Jul 10 14:32:23 2012 +0200"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Nov 15 03:29:01 2012 +0900"
      },
      "message": "Add repo info command\n\nThe info command will print information regarding the current manifest\nand local git branch. It will also show the difference of commits\nbetween the local branch and the remote branch.\n\nIt also incorporates an overview command into info which shows commits\nover all branches.\n\nChange-Id: Iafedd978f44c84d240c010897eff58bbfbd7de71\n"
    },
    {
      "commit": "8f62fb7bd305337994bced7d23b347d0d39f5faf",
      "tree": "7a00915a4e6138fe2c12d6f8d181b623df8962a2",
      "parents": [
        "c1b86a232383748811c6faf17f364e63e10f7dd4"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 12:09:38 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 12:09:38 2012 +0900"
      },
      "message": "Tidy up code formatting a bit more\n\nEnable the following Pylint warnings:\n\n  C0322: Operator not preceded by a space\n  C0323: Operator not followed by a space\n  C0324: Comma not followed by a space\n\nAnd make the necessary fixes.\n\nChange-Id: I74d74283ad5138cbaf28d492b18614eb355ff9fe\n"
    },
    {
      "commit": "c1b86a232383748811c6faf17f364e63e10f7dd4",
      "tree": "8f28c8e8a922ffd4165f48a1988500070936bd39",
      "parents": [
        "98ffba1401056e2d88d3f3898b6fbf5d7d3931a4"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 11:36:51 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 11:38:57 2012 +0900"
      },
      "message": "Fix inconsistent indentation\n\nThe repo coding style is to indent at 2 characters, but there are\nmany places where this is not followed.\n\nEnable pylint warning \"W0311: Bad indentation\" and make sure all\nindentation is at multiples of 2 characters.\n\nChange-Id: I68f0f64470789ce2429ab11104d15d380a63e6a8\n"
    },
    {
      "commit": "98ffba1401056e2d88d3f3898b6fbf5d7d3931a4",
      "tree": "7a39e4d55327bd186b66baf91e9cfed3d8a80c66",
      "parents": [
        "cecd1d864fc3cf02cf50d367111e0d0e173c5dc6"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 11:18:00 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 11:38:57 2012 +0900"
      },
      "message": "Fix: \"Statement seems to have no effect\"\n\nPylint raises an error on the call:\n\n  print\n\nChange it to:\n\n print()\n\nChange-Id: I507e1b3dd928fa6c32ea7e86260fb3d7b1428e6f\n"
    },
    {
      "commit": "cecd1d864fc3cf02cf50d367111e0d0e173c5dc6",
      "tree": "b4f660400560dce21cd7a00ffe5a5d74b54bcb81",
      "parents": [
        "fc241240d828d7e8302dc0876608a9d27ae1cbc7"
      ],
      "author": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Thu Nov 01 22:59:27 2012 -0700"
      },
      "committer": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Tue Nov 13 17:33:56 2012 -0800"
      },
      "message": "Change print statements to work in python3\n\nThis is part of a series of changes to introduce Python3 support.\n\nChange-Id: I373be5de7141aa127d7debdbce1df39148dbec32\n"
    },
    {
      "commit": "fc241240d828d7e8302dc0876608a9d27ae1cbc7",
      "tree": "83936a7c4dde92e5ccffb9d884591f633f421390",
      "parents": [
        "9f3406ea4635e0f8cef1d0ec4dbfe6b1554375d6"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 09:19:39 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 09:19:39 2012 +0900"
      },
      "message": "Convert prompt answers to lower case before checking\n\nWhen prompting for yes/no answers, convert the answer to lower\ncase before comparing.  This makes it easier to catch answers\nlike \"Yes\", \"yes\", and \"YES\" with a comparison only for \"yes\".\n\nChange-Id: I06da8281cec81a7438ebb46ddaf3344d12abe1eb\n"
    },
    {
      "commit": "9f3406ea4635e0f8cef1d0ec4dbfe6b1554375d6",
      "tree": "588758e23de5b24ffb3132aaf6ab35e6163da2d6",
      "parents": [
        "b1525bffae609455331d8587c14d22a5f58e203b"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 08:52:25 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 08:54:43 2012 +0900"
      },
      "message": "Minor documentation formatting and grammatical fixes\n\nChange-Id: Iaac6377c787b3bb42242780e9d1116e718e0188d\n"
    },
    {
      "commit": "b1525bffae609455331d8587c14d22a5f58e203b",
      "tree": "0ff74be8591170da14bbf8171144a72bc746b19c",
      "parents": [
        "685f080d626ccdc7ed0d76cccb38810285fc40e0"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 08:51:38 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 08:54:04 2012 +0900"
      },
      "message": "Fix documentation reference to local_manifest.xml\n\nDocumentation of the remove-project element still refers explicitly\nto local_manifest.xml.\n\nChange it to the more generic \"a local manifest\".\n\nChange-Id: I6278beab99a582fae26a4e053adc110362c714c2\n"
    },
    {
      "commit": "685f080d626ccdc7ed0d76cccb38810285fc40e0",
      "tree": "0c3abe43692eae04422d6ad4ebf15f2f8ea95261",
      "parents": [
        "8898e2f26d749c8548683e9c4871440a4ccfa87e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 08:34:39 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 08:34:39 2012 +0900"
      },
      "message": "More code style cleanup\n\nClean up a few more unnecessary usages of lambda in `repo` that were missed\nin the previous sweep that only considered files ending in .py.\n\nRemove a duplicate import.\n\nChange-Id: I03cf467a5630cbe4eee6649520c52e94a7db76be\n"
    },
    {
      "commit": "8898e2f26d749c8548683e9c4871440a4ccfa87e",
      "tree": "aaabab9f4e568f873d3674795944623e464ba451",
      "parents": [
        "52f1e5d9111c586624de48b5f705e10b67d109b3"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 07:51:03 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 08:17:11 2012 +0900"
      },
      "message": "Remove magic hack\n\nIt should be assumed that on modern development environments, python\nis accessible to /usr/bin/env\n\nChange the shebang as necessary and remove the magic hack.\n\nThis also means losing the -E option on the call to python, so that\nPYTHONPATH and PYTHONHOME will be respected and local configuration\nproblems in those vars would be noticed\n\nChange-Id: I6f0708ca7693f05a4c3621c338f03619563ba630\n"
    },
    {
      "commit": "52f1e5d9111c586624de48b5f705e10b67d109b3",
      "tree": "64861a0d67e6194626a5fa8cd1c8d044bd353e1b",
      "parents": [
        "8e3d355d448671e7c9b3409a3bbde971f90d7c28"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 04:53:24 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 05:05:32 2012 +0900"
      },
      "message": "Make load order of local manifests deterministic\n\nLocal manifest files stored in the local_manifests folder are loaded\nin alphabetical order, so it\u0027s easier to know in which order project\nremovals/additions/modifications will be applied.\n\nIf local_manifests.xml exists, it will be loaded before the files in\nlocal_manifests.\n\nChange-Id: Ia5c0349608f1823b4662cd6b340b99915bd973d5\n"
    },
    {
      "commit": "8e3d355d448671e7c9b3409a3bbde971f90d7c28",
      "tree": "5a65a2b0990d70dd57962b337ef7b6074e5ea4ff",
      "parents": [
        "4a4776e9abfca33caca9f71f0f48c920065dbaf4",
        "b0936b0e2015a9f4f68824aac09d6248b14f2f9d"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Nov 12 17:35:47 2012 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 12 17:35:47 2012 -0800"
      },
      "message": "Merge \"Print an error message when aborted by user\""
    },
    {
      "commit": "4a4776e9abfca33caca9f71f0f48c920065dbaf4",
      "tree": "9c29393cb2936a445c9297840715f36de2986ee9",
      "parents": [
        "2fa715f8b56b8f512806cbd1b3e0bf1b98c23c7e",
        "0b8df7be79d2b8b5d5a884fc2b0d070b42861459"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Nov 12 17:35:40 2012 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 12 17:35:40 2012 -0800"
      },
      "message": "Merge \"Handle manifest parse errors in main\""
    },
    {
      "commit": "2fa715f8b56b8f512806cbd1b3e0bf1b98c23c7e",
      "tree": "af56b9c56fc08936b9e2d8989497dd75fb085043",
      "parents": [
        "6287543e3508fbd3b92c975771c73e11fd4a5977",
        "717ece9d81ab428ff7358fb3d8a941f8371b626c"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Nov 12 17:35:30 2012 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 12 17:35:30 2012 -0800"
      },
      "message": "Merge \"Better handling of duplicate remotes\""
    },
    {
      "commit": "6287543e3508fbd3b92c975771c73e11fd4a5977",
      "tree": "ba76a70bf31554c25c1d7b132bd3149aceb5c434",
      "parents": [
        "5566ae5ddea409279b13e538b513a73062862c3e",
        "a6053d54f1178dc527b383844972c6077ee91a4e"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Nov 12 17:30:55 2012 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 12 17:30:55 2012 -0800"
      },
      "message": "Merge \"Change usages of xrange() to range()\""
    },
    {
      "commit": "b0936b0e2015a9f4f68824aac09d6248b14f2f9d",
      "tree": "5a9bad3ed6212c4fe53728fee30a761a2f917b77",
      "parents": [
        "0b8df7be79d2b8b5d5a884fc2b0d070b42861459"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 09:56:16 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 09:56:16 2012 +0900"
      },
      "message": "Print an error message when aborted by user\n\nChange-Id: If7378c5deaace0ac6ab2be961e38644d9373557d\n"
    },
    {
      "commit": "0b8df7be79d2b8b5d5a884fc2b0d070b42861459",
      "tree": "bdc8e3ebbc9687ba75caea4df49915cc586ac085",
      "parents": [
        "717ece9d81ab428ff7358fb3d8a941f8371b626c"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 09:51:57 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 09:54:47 2012 +0900"
      },
      "message": "Handle manifest parse errors in main\n\nAdd handling of manifest parse errors in the main method, and\nprint an error.  This will prevent python tracebacks being\ndumped in many cases.\n\nChange-Id: I75e73539afa34049f73c993dbfda203f1ad33b45\n"
    },
    {
      "commit": "717ece9d81ab428ff7358fb3d8a941f8371b626c",
      "tree": "6016811bf8504da6042727f46ff8510d61a84a42",
      "parents": [
        "5566ae5ddea409279b13e538b513a73062862c3e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 08:49:16 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 09:35:37 2012 +0900"
      },
      "message": "Better handling of duplicate remotes\n\nIn the current implementation, an error is raised if a remote with the\nsame name is defined more than once.  The check is only that the remote\nhas the same name as an existing remote.\n\nWith the support for multiple local manifests, it is more likely than\nbefore that the same remote is defined in more than one manifest.\n\nChange the check so that it only raises an error if a remote is defined\nmore than once with the same name, but different attributes.\n\nChange-Id: Ic3608646cf9f40aa2bea7015d3ecd099c5f5f835\n"
    },
    {
      "commit": "5566ae5ddea409279b13e538b513a73062862c3e",
      "tree": "8eee7a90ecf3692659eb2249c1a7b48c81de28a2",
      "parents": [
        "2d5a0df798b7b16ccf9c17b2435a9640cf0d81c0"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 03:04:18 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 08:19:51 2012 +0900"
      },
      "message": "Print deprecation warning when local_manifest.xml is used\n\nThe preferred way to specify local manifests is to drop the file(s)\nin the local_manifests folder.  Print a deprecation warning when\nthe legacy local_manifest.xml file is used.\n\nChange-Id: Ice85bd06fb612d6fcceeaa0755efd130556c4464\n"
    },
    {
      "commit": "2d5a0df798b7b16ccf9c17b2435a9640cf0d81c0",
      "tree": "ca99d70bdf9e4602beff0181f29f36a9d28eec7d",
      "parents": [
        "f7fc8a95beb1337e23f146cad8086c1fc05902ee"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 02:50:36 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 08:19:51 2012 +0900"
      },
      "message": "Add support for multiple local manifests\n\nAdd support for multiple local manifests stored in the local_manifests\nfolder under the .repo home directory.\n\nLocal manifests will be processed in addition to local_manifest.xml.\n\nChange-Id: Ia0569cea7e9ae0fe3208a8ffef5d9679e14db03b\n"
    },
    {
      "commit": "f7fc8a95beb1337e23f146cad8086c1fc05902ee",
      "tree": "53c36c8d5cd0aee9d30dc62b61cf47af69c94bf7",
      "parents": [
        "1ad7b555df77d27fac485ac2815dd6ce9b8b8dfd"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 04:00:28 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 05:53:41 2012 +0900"
      },
      "message": "Handle XML errors when parsing the manifest\n\nCatch ExpatError and exit gracefully with an error message, rather\nthan exiting with a python traceback.\n\nChange-Id: Ifd0a7762aab4e8de63dab8a66117170a05586866\n"
    },
    {
      "commit": "1ad7b555df77d27fac485ac2815dd6ce9b8b8dfd",
      "tree": "5fd10d46045bdbeeffc209ea6e67af0cd68f1dd9",
      "parents": [
        "7e6dd2dff012062b8dd812f923339790323b3840",
        "8d070cfb254a21ec3f7a07c123165edf1ce379eb"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Nov 07 12:39:25 2012 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 07 12:39:25 2012 -0800"
      },
      "message": "Merge \"Always show --manifest-server-* options\""
    },
    {
      "commit": "7e6dd2dff012062b8dd812f923339790323b3840",
      "tree": "0ca1a9e444eb7ebfa40d79ade53939da187da791",
      "parents": [
        "e072a92a9bb9fdf61bbd1df4e8864f8fd52d5a82"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Oct 25 12:40:51 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 07 08:39:57 2012 +0900"
      },
      "message": "Fix pylint warning W0108: Lambda may not be necessary\n\nRemove unnecessary usage of lambda.\n\nChange-Id: I06d41933057d60d15d307ee800cca052a44754c6\n"
    },
    {
      "commit": "8d070cfb254a21ec3f7a07c123165edf1ce379eb",
      "tree": "6d74d599c13bf8c8591d777198cb04b0646c7722",
      "parents": [
        "e072a92a9bb9fdf61bbd1df4e8864f8fd52d5a82"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Nov 06 13:14:31 2012 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Nov 06 13:14:31 2012 -0800"
      },
      "message": "Always show --manifest-server-* options\n\nThe --manifest-server-* flags broke the smartsync subcmd since\nthe corresponding variables weren\u0027t getting set.  This change\nensures that they will always be set, regardless of whether we are\nusing sync -s or smartsync.\n\nChange-Id: I1b642038787f2114fa812ecbc15c64e431bbb829\n"
    },
    {
      "commit": "a6053d54f1178dc527b383844972c6077ee91a4e",
      "tree": "24038d692a1db41c400c9d40da9ac6b5ccfaaa7a",
      "parents": [
        "e072a92a9bb9fdf61bbd1df4e8864f8fd52d5a82"
      ],
      "author": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Thu Nov 01 13:36:50 2012 -0700"
      },
      "committer": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Thu Nov 01 13:36:50 2012 -0700"
      },
      "message": "Change usages of xrange() to range()\n\nIn Python3, range() creates a generator rather than a list.\n\nNone of the parameters in the ranges changed looked large enough\nto create an impact in memory in Python2.  Note: the only use of\nrange() was for iteration and did not need to be changed.\n\nThis is part of a series of changes to introduce Python3 support.\n\nChange-Id: I50b665f9296ea160a5076c71f36a65f76e47029f\n"
    },
    {
      "commit": "e072a92a9bb9fdf61bbd1df4e8864f8fd52d5a82",
      "tree": "1b685c35a064db6605cdf7be0004788362302dd4",
      "parents": [
        "7601ee260887caae6c5df7a7aa0033fdb844b744",
        "1f7627fd3ccab0fbab88ad2d082b67f5719af92c"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Nov 01 10:13:33 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 01 10:13:34 2012 -0700"
      },
      "message": "Merge \"Use python3 urllib when urllib2 not available\""
    },
    {
      "commit": "7601ee260887caae6c5df7a7aa0033fdb844b744",
      "tree": "ceec04042a27d9d8d4a785ae48f7ebecd25d4b21",
      "parents": [
        "b42b4746af736cdc4e9309c150ec3bff704d19d3",
        "60798a32f6e42377b70a715b5c1cd21e7950d00f"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Nov 01 10:01:17 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 01 10:01:18 2012 -0700"
      },
      "message": "Merge \"Use \u0027stat\u0027 package instead of literals for mkdir()\""
    },
    {
      "commit": "1f7627fd3ccab0fbab88ad2d082b67f5719af92c",
      "tree": "3c03eb8efbdc001472f09fa31cf11bf1d2ec01c5",
      "parents": [
        "1d947b30342163b723c96db563967323535fef45"
      ],
      "author": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Wed Oct 31 09:21:55 2012 -0700"
      },
      "committer": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Wed Oct 31 14:26:48 2012 -0700"
      },
      "message": "Use python3 urllib when urllib2 not available\n\nThis is part of a series of changes to introduce Python3 support.\n\nChange-Id: I605b145791053c1f2d7bf3c907c5a68649b21d12\n"
    },
    {
      "commit": "b42b4746af736cdc4e9309c150ec3bff704d19d3",
      "tree": "bda62589c57f591aa68b0c8d98fea5c5941a1c22",
      "parents": [
        "e21526754be58523c673d29731ee01d80e0ffc31"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Oct 31 12:27:27 2012 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Oct 31 12:27:27 2012 -0700"
      },
      "message": "project: Require git \u003e\u003d 1.7.2 for setting config on command line\n\nThis option causes the git call to fail, which probably indicates a\nprogramming error; callers should check the git version and change the\ncall appropriately if -c is not available. Failing loudly is preferable\nto failing silently in the general case.\n\nFor an example of correctly checking at the call site, see I8fd313dd.\nIf callers prefer to fail silently, they may set GIT_CONFIG_PARAMETERS\nin the environment rather than using the config kwarg to pass\nconfiguration.\n\nChange-Id: I0de18153d44d3225cd3031e6ead54461430ed334\n"
    },
    {
      "commit": "e21526754be58523c673d29731ee01d80e0ffc31",
      "tree": "da87019198b421827c9e3cbaecce88077fb76caa",
      "parents": [
        "1d947b30342163b723c96db563967323535fef45"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Oct 31 12:24:38 2012 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Oct 31 12:27:17 2012 -0700"
      },
      "message": "sync: Only parallelize gc for git \u003e\u003d 1.7.2\n\nThis minimum version is required for the -c argument to set config on\nthe command line. Without this option, git by default uses as many\nthreads per invocation as there are CPUs, so we cannot safely\nparallelize without hosing a system.\n\nChange-Id: I8fd313dd84917658162b5134b2d9aa34a96f2772\n"
    },
    {
      "commit": "60798a32f6e42377b70a715b5c1cd21e7950d00f",
      "tree": "6719d9a3d74ca6c253a5891368fad0c49af0ed53",
      "parents": [
        "57365c98cc227255f50ab3d71462204c804eb975"
      ],
      "author": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Thu Oct 25 17:53:09 2012 -0700"
      },
      "committer": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Wed Oct 31 09:11:16 2012 -0700"
      },
      "message": "Use \u0027stat\u0027 package instead of literals for mkdir()\n\nThis is part of a series of changes to introduce Python3 support.\n\nChange-Id: Ic988ad181d32357d82dfa554e70d8525118334c0\n"
    },
    {
      "commit": "1d947b30342163b723c96db563967323535fef45",
      "tree": "b6b02d02df01792b356b9e50ceeaadcaf3a2e8c5",
      "parents": [
        "2d113f35460051823ea54d61c5c939565518f969"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Oct 25 12:23:11 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Oct 30 10:28:20 2012 +0900"
      },
      "message": "Even more coding style cleanup\n\nFixing some more pylint warnings:\n\nW1401: Anomalous backslash in string\nW0623: Redefining name \u0027name\u0027 from outer scope\nW0702: No exception type(s) specified\nE0102: name: function already defined line n\n\nChange-Id: I5afcdb4771ce210390a79981937806e30900a93c\n"
    },
    {
      "commit": "2d113f35460051823ea54d61c5c939565518f969",
      "tree": "d48501902b807b83855d9361a3d3c6588f43e40c",
      "parents": [
        "de7eae482664d4bda61238b6adb679b3b92535d2",
        "c5aa4d3528e15180fc1d305a571bf3cadea60c65"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 16:10:21 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 26 16:10:21 2012 -0700"
      },
      "message": "Merge \"Update minimum git version to 1.7.2\""
    },
    {
      "commit": "de7eae482664d4bda61238b6adb679b3b92535d2",
      "tree": "fab047f944470100c621b39da83bd80991f7bdbf",
      "parents": [
        "2fe99e8820a84f545ad45d53921dc94b8bc9d4f3",
        "cd81dd6403fc8dbe6ec5920c517d9083902c3c1f"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:30:38 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 26 12:30:38 2012 -0700"
      },
      "message": "Merge \"Revert \"Represent git-submodule as nested projects\"\""
    },
    {
      "commit": "2fe99e8820a84f545ad45d53921dc94b8bc9d4f3",
      "tree": "2f5707377de43d2eef4ae7cbc3c47cfeefccbbff",
      "parents": [
        "bed45f940072e6383bf219bc315a65692e93d682",
        "80d2ceb22267b7dc61b107934ff5264b6439a785"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:27:36 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 26 12:27:36 2012 -0700"
      },
      "message": "Merge \"repo selfupdate: Fix _PostRepoUpgrade takes 2 arguments\""
    },
    {
      "commit": "cd81dd6403fc8dbe6ec5920c517d9083902c3c1f",
      "tree": "935f3f82d2eb32c06b812f66d56d138074309ef8",
      "parents": [
        "80d2ceb22267b7dc61b107934ff5264b6439a785"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:18:00 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:24:57 2012 -0700"
      },
      "message": "Revert \"Represent git-submodule as nested projects\"\n\nThis reverts commit 69998b0c6ff724bf620480140ccce648fec7d6a9.\nBroke Android\u0027s non-gitmodule use case.\n\nConflicts:\n\tproject.py\n\tsubcmds/sync.py\n\nChange-Id: I68ceeb63d8ee3b939f85a64736bdc81dfa352aed\n"
    },
    {
      "commit": "80d2ceb22267b7dc61b107934ff5264b6439a785",
      "tree": "8d5c31dc12bf71d3d7f707341c413b3c0801a344",
      "parents": [
        "55e4d464a7f8cf366290ba2d3c8bdd8297d71d32"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:23:05 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:24:57 2012 -0700"
      },
      "message": "repo selfupdate: Fix _PostRepoUpgrade takes 2 arguments\n\nChange-Id: I1cf9e0674ea366ddce96c949e0bc085e3452b25a\n"
    },
    {
      "commit": "c5aa4d3528e15180fc1d305a571bf3cadea60c65",
      "tree": "71d847d4ff986b377dea895093adb9609974f98c",
      "parents": [
        "bed45f940072e6383bf219bc315a65692e93d682"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Oct 26 11:34:11 2012 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Oct 26 11:34:11 2012 -0700"
      },
      "message": "Update minimum git version to 1.7.2\n\nWe now use the -c flag which was introduced in git 1.7.2.\n\nChange-Id: I9195c0f6ac9fa63e783a03628049fe2c67d258ff\n"
    },
    {
      "commit": "bed45f940072e6383bf219bc315a65692e93d682",
      "tree": "8ecdc0ac0fa61221366b183a09a224731327d4d5",
      "parents": [
        "55e4d464a7f8cf366290ba2d3c8bdd8297d71d32",
        "75cc3533801a012c1fe6676e76148416a70693ca"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Oct 26 09:52:15 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 26 09:52:16 2012 -0700"
      },
      "message": "Merge \"Show user about not initializing repo in current directory\""
    },
    {
      "commit": "55e4d464a7f8cf366290ba2d3c8bdd8297d71d32",
      "tree": "d81deb7e0fa393f8a5e43219db8a798b0ef71b35",
      "parents": [
        "c9129d90deb7377324b5178a231657e3d8c74019"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Oct 01 16:12:28 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 26 07:03:59 2012 -0700"
      },
      "message": "Add a PGP key for cco3@android.com\n\nThis change adds a PGP key to allow cco3@android.com to sign releases.\n\nChange-Id: I18a70c8b7d8f272dd1aad9d6b2e4a237ef35af33\n"
    },
    {
      "commit": "75cc3533801a012c1fe6676e76148416a70693ca",
      "tree": "c31c72c68ad62b857d01ad67f9af3236c35182a0",
      "parents": [
        "57365c98cc227255f50ab3d71462204c804eb975"
      ],
      "author": {
        "name": "Yang Zhenhui",
        "email": "zhenhui.yang@sonymobile.com",
        "time": "Tue Oct 23 15:41:54 2012 +0800"
      },
      "committer": {
        "name": "Bruce Zu",
        "email": "bruce.zu@sonymobile.com",
        "time": "Fri Oct 26 15:40:17 2012 +0800"
      },
      "message": "Show user about not initializing repo in current directory\n\nIf the parent of current directory has an initialized repo,\nfor example, if the current directory is\n\u0027/home/users/harry/platform/ics\u0027, and there is an initialized repo\nin harry\u0027s home directory \u0027/home/users/harry/.repo\u0027, when user\nrun \u0027repo init\u0027 command, repo is always initialized to parent\ndirectory in \u0027/home/users/harry/.repo\u0027, but most of time user\nintends to initialize repo in the current directory, this patch\ntells user how to do it.\n\nChange-Id: Id7a76fb18ec0af243432c29605140d60f3de85ca\n"
    },
    {
      "commit": "c9129d90deb7377324b5178a231657e3d8c74019",
      "tree": "f0dd3f9ade22e48f4ab9cb8447a360e2e01a5aca",
      "parents": [
        "57365c98cc227255f50ab3d71462204c804eb975"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Oct 01 16:12:28 2012 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 25 17:48:35 2012 -0700"
      },
      "message": "Update PGP keys during _PostRepoUpgrade in `sync`\n\nPreviously, if a key was added, a client wouldn\u0027t add the key during\nthe sync step.  This would cause issues if a new key were added and a\nsubsequent release were signed by that key.\n\nChange-Id: I4fac317573cd9d0e8da62aa42e00faf08bfeb26c\n"
    },
    {
      "commit": "57365c98cc227255f50ab3d71462204c804eb975",
      "tree": "04ade83292c018ffd23beae5b228e4b6f688530e",
      "parents": [
        "dc96476af37558c8eaf6d25087d4a604612642dd",
        "188572170e8cdf28df55a5ca90ed70d14b72b804"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 25 17:38:05 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 17:38:05 2012 -0700"
      },
      "message": "Merge \"sync: Run gc --auto in parallel\""
    },
    {
      "commit": "dc96476af37558c8eaf6d25087d4a604612642dd",
      "tree": "dfdfde22a3ba610bdba5764a184ada1c3996e23e",
      "parents": [
        "2577cec0952899040cd8c6523f69ece4cdc005ac",
        "091f893625269fd12adadf7d1f60c21b4b83e779"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 25 17:36:03 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 17:36:04 2012 -0700"
      },
      "message": "Merge \"project: Support config args in git command callables\""
    },
    {
      "commit": "2577cec0952899040cd8c6523f69ece4cdc005ac",
      "tree": "792f82c975d0d5d039ac3a6c6adc8404d87e8b2c",
      "parents": [
        "e48d34659ebda45431512ab2478558f8e4cdd46c",
        "d947858325ae70ff9c0b2f463a9e8c4ffd00002a"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 25 17:35:15 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 17:35:15 2012 -0700"
      },
      "message": "Merge \"sync: Keep a moving average of last fetch times\""
    },
    {
      "commit": "e48d34659ebda45431512ab2478558f8e4cdd46c",
      "tree": "ab38328b72acf6cb6898f2b6ed3cb859c48249fe",
      "parents": [
        "ab8f911a6721424ddc7cda7ebd2a07270a5909b1",
        "67700e9b90a38cc3719c818bc967153e8b7b429e"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 25 17:33:36 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 17:33:36 2012 -0700"
      },
      "message": "Merge \"sync: Order projects according to last fetch time\""
    },
    {
      "commit": "ab8f911a6721424ddc7cda7ebd2a07270a5909b1",
      "tree": "cf4b0cfab756dc78747894189ef918a262811d48",
      "parents": [
        "608aff7f624e35348ff9fab74bad1d6921944238"
      ],
      "author": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Thu Oct 25 13:44:11 2012 -0700"
      },
      "committer": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Thu Oct 25 13:55:49 2012 -0700"
      },
      "message": "Fix pylint warnings introduced by the submodule patch\n\n\"69998b0 Represent git-submodule as nested projects\" has introduced a\nfew pylint warnings.\n\nW0612:1439,8:Project._GetSubmodules.get_submodules: Unused variable \u0027sub_gitdir\u0027\nW0613:1424,36:Project._GetSubmodules.get_submodules: Unused argument \u0027path\u0027\nW0612:1450,25:Project._GetSubmodules.parse_gitmodules: Unused variable \u0027e\u0027\nW0622:516,8:Sync.Execute: Redefining built-in \u0027all\u0027\n\nChange-Id: I84378e2832ed1b5ab023e394d53b22dcea799ba4\n"
    },
    {
      "commit": "608aff7f624e35348ff9fab74bad1d6921944238",
      "tree": "e1bdbb8af5927dd226d8e22dc382fd24c4cdfa5e",
      "parents": [
        "13657c407d0424d0866993bea39ed01094caa1c1",
        "a5be53f9c809009e67f217c00b8f30246aacc237"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 25 10:03:36 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 10:03:37 2012 -0700"
      },
      "message": "Merge \"Use modern Python exception syntax\""
    },
    {
      "commit": "13657c407d0424d0866993bea39ed01094caa1c1",
      "tree": "74f69003f5f71602e7ed0a6d2d5dd92d03f95caa",
      "parents": [
        "e4ed8f65f376009f70fab0e7978fdfc223f23a76",
        "d75c669fac50f5224b567127291976fd36b31546"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 25 10:00:41 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 10:00:42 2012 -0700"
      },
      "message": "Merge \"Add regex matching to repo list command\""
    },
    {
      "commit": "e4ed8f65f376009f70fab0e7978fdfc223f23a76",
      "tree": "00a9118857c613eefdd967d330bc5230ced01555",
      "parents": [
        "fdb44479f8b99e7795021f1b8588a677dcf5fd51",
        "4f7bdea9d24c4eb52f83ada2b67b88ad67cb57a7"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 25 09:51:06 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 09:51:07 2012 -0700"
      },
      "message": "Merge \"Add pylint configuration and instructions\""
    },
    {
      "commit": "fdb44479f8b99e7795021f1b8588a677dcf5fd51",
      "tree": "910ad941d3f9882271e3bb0efecafb2e7e104c85",
      "parents": [
        "69998b0c6ff724bf620480140ccce648fec7d6a9",
        "9ed12c5d9cda1f010bc173b0bc622d59e96b0dd0"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 25 09:46:38 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 09:46:38 2012 -0700"
      },
      "message": "Merge \"Change PyDev project version to \"python 2.6\"\""
    },
    {
      "commit": "188572170e8cdf28df55a5ca90ed70d14b72b804",
      "tree": "d64ad4724552898c9c49ba19f715c74c5caa504c",
      "parents": [
        "091f893625269fd12adadf7d1f60c21b4b83e779"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Oct 23 17:02:59 2012 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Thu Oct 25 08:12:48 2012 -0700"
      },
      "message": "sync: Run gc --auto in parallel\n\nWe can\u0027t just let this run wild with a high (or even low) -j, since\nthat would hose a system. Instead, limit the total number of threads\nacross all git gc subprocesses to the number of CPUs reported by the\nmultiprocessing module (available in Python 2.6 and above).\n\nChange-Id: Icca0161a1e6116ffa5f7cfc6f5faecda510a7fb9\n"
    },
    {
      "commit": "d75c669fac50f5224b567127291976fd36b31546",
      "tree": "84a7973f8d169b73168d314aa4061424bbd07d2c",
      "parents": [
        "69998b0c6ff724bf620480140ccce648fec7d6a9"
      ],
      "author": {
        "name": "Olof Johansson",
        "email": "olof.johansson@sonymobile.com",
        "time": "Tue Oct 09 08:25:55 2012 +0200"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Oct 25 15:49:13 2012 +0900"
      },
      "message": "Add regex matching to repo list command\n\nThe repo list -r command will execute a regex search for every\nargument provided on both the project name and the project\nworktree path.\n\nUseful for finding rarely used gits.\n\nChange-Id: Iaff90dd36c240b3d5d74817d11469be22d77ae03\n"
    },
    {
      "commit": "091f893625269fd12adadf7d1f60c21b4b83e779",
      "tree": "bec3e027600f88a73108aa3c0f2f8f122903733d",
      "parents": [
        "d947858325ae70ff9c0b2f463a9e8c4ffd00002a"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Oct 23 17:01:04 2012 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Oct 24 14:52:08 2012 -0700"
      },
      "message": "project: Support config args in git command callables\n\nChange-Id: I9d4d0d2b1aeebe41a6b24a339a154d258af665eb\n"
    },
    {
      "commit": "d947858325ae70ff9c0b2f463a9e8c4ffd00002a",
      "tree": "edf33164dfdd829eae74244198f790629d2fabc8",
      "parents": [
        "67700e9b90a38cc3719c818bc967153e8b7b429e"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Oct 23 16:35:39 2012 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Oct 24 14:52:07 2012 -0700"
      },
      "message": "sync: Keep a moving average of last fetch times\n\nTry to more accurately estimate which projects take the longest to\nsync by keeping an exponentially weighted moving average (a\u003d0.5) of\nfetch times, rather than just recording the last observation. This\nshould discount individual outliers (e.g. an unusually large project\nupdate) and hopefully allow truly slow repos to bubble to the top.\n\nChange-Id: I72b2508cb1266e8a19cf15b616d8a7fc08098cb3\n"
    },
    {
      "commit": "67700e9b90a38cc3719c818bc967153e8b7b429e",
      "tree": "57768c3936f66cb28b623c13e59c2bc1dba247ff",
      "parents": [
        "5c6eeac8f0350fd6b14cf226ffcff655f1dd9582"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Oct 23 15:00:54 2012 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Oct 24 14:51:58 2012 -0700"
      },
      "message": "sync: Order projects according to last fetch time\n\nSome projects may consistently take longer to fetch than others, for\nexample a more active project may have many more Gerrit changes than a\nless active project, which take longer to transfer. Use a simple\nheuristic based on the last fetch time to fetch slower projects first,\nso we do not tend to spend the end of the sync fetching a small number\nof outliers.\n\nThis algorithm is probably not optimal, and due to inter-run latency\nvariance and Python thread scheduling, we may not even have good\nestimates of a project sync time.\n\nChange-Id: I9a463f214b3ed742e4d807c42925b62cb8b1745b\n"
    },
    {
      "commit": "a5be53f9c809009e67f217c00b8f30246aacc237",
      "tree": "7ab0da1fd31968eee882de81df8c9b93ae52fdfb",
      "parents": [
        "9ed12c5d9cda1f010bc173b0bc622d59e96b0dd0"
      ],
      "author": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Sun Sep 09 15:37:57 2012 -0700"
      },
      "committer": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Tue Oct 23 21:35:59 2012 -0700"
      },
      "message": "Use modern Python exception syntax\n\n\"except Exception as e\" instead of \"except Exception, e\"\n\nThis is part of a transition to supporting Python 3.  Python \u003e\u003d 2.6\nsupport \"as\" syntax.\n\nNote: this removes Python 2.5 support.\n\nChange-Id: I309599f3981bba2b46111c43102bee38ff132803\n"
    },
    {
      "commit": "9ed12c5d9cda1f010bc173b0bc622d59e96b0dd0",
      "tree": "0579b811fe078ff5f97cb21a9ec34b500b1c2eae",
      "parents": [
        "5c6eeac8f0350fd6b14cf226ffcff655f1dd9582"
      ],
      "author": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Tue Oct 23 21:28:12 2012 -0700"
      },
      "committer": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Tue Oct 23 21:35:46 2012 -0700"
      },
      "message": "Change PyDev project version to \"python 2.6\"\n\nRepo is dropping support for Python \u003c2.5 soon, so this updates the\nPyDev configuration appropriately.\n\nChange-Id: If327951e3a9fd9ff7513b931bfcfe6172dc8e4c5\n"
    },
    {
      "commit": "4f7bdea9d24c4eb52f83ada2b67b88ad67cb57a7",
      "tree": "49c93020cd026d13f43325b43d13266542cdc5a1",
      "parents": [
        "69998b0c6ff724bf620480140ccce648fec7d6a9"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Oct 22 12:50:15 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Oct 24 10:18:13 2012 +0900"
      },
      "message": "Add pylint configuration and instructions\n\npylint configuration file (.pylintrc) is added, and submission\ninstructions are updated to include pylint usage steps.\n\nDeprecated pylint suppression (`disable-msg`) is updated in a few\nmodules to make it work properly with the latest version (0.26).\n\nChange-Id: I4ec2ef318e23557a374ecdbf40fe12645766830c\n"
    },
    {
      "commit": "69998b0c6ff724bf620480140ccce648fec7d6a9",
      "tree": "b6f9c4c00b04a0f140074c4c2dba91ed4f055b11",
      "parents": [
        "5c6eeac8f0350fd6b14cf226ffcff655f1dd9582"
      ],
      "author": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Wed Jan 11 11:28:42 2012 +0800"
      },
      "committer": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Tue Oct 23 16:08:58 2012 -0700"
      },
      "message": "Represent git-submodule as nested projects\n\nWe need a representation of git-submodule in repo; otherwise repo will\nnot sync submodules, and leave workspace in a broken state.  Of course\nthis will not be a problem if all projects are owned by the owner of the\nmanifest file, who may simply choose not to use git-submodule in all\nprojects.  However, this is not possible in practice because manifest\nfile owner is unlikely to own all upstream projects.\n\nAs git submodules are simply git repositories, it is natural to treat\nthem as plain repo projects that live inside a repo project.  That is,\nwe could use recursively declared projects to denote the is-submodule\nrelation of git repositories.\n\nThe behavior of repo remains the same to projects that do not have a\nsub-project within.  As for parent projects, repo fetches them and their\nsub-projects as normal projects, and then checks out subprojects at the\ncommit specified in parent\u0027s commit object.  The sub-project is fetched\nat a path relative to parent project\u0027s working directory; so the path\nspecified in manifest file should match that of .gitmodules file.\n\nIf a submodule is not registered in repo manifest, repo will derive its\nproperties from itself and its parent project, which might not always be\ncorrect.  In such cases, the subproject is called a derived subproject.\n\nTo a user, a sub-project is merely a git-submodule; so all tips of\nworking with a git-submodule apply here, too.  For example, you should\nnot run `repo sync` in a parent repository if its submodule is dirty.\n\nChange-Id: I541e9e2ac1a70304272dbe09724572aa1004eb5c\n"
    },
    {
      "commit": "5c6eeac8f0350fd6b14cf226ffcff655f1dd9582",
      "tree": "3225695b9d2a97342a49127717ea5e2bc5935a63",
      "parents": [
        "e98607248eec2b149d84efe944c12cbef419b82e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Oct 11 16:44:48 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Oct 22 12:30:14 2012 +0900"
      },
      "message": "More coding style cleanup\n\nFixing more issues found with pylint.  Some that were supposed to\nhave been fixed in the previous sweep (Ie0db839e) but were missed:\n\nC0321: More than one statement on a single line\nW0622: Redefining built-in \u0027name\u0027\n\nAnd some more:\n\nW0631: Using possibly undefined loop variable \u0027name\u0027\nW0223: Method \u0027name\u0027 is abstract in class \u0027name\u0027 but is not overridden\nW0231: __init__ method from base class \u0027name\u0027 is not called\n\nChange-Id: Ie119183708609d6279e973057a385fde864230c3\n"
    },
    {
      "commit": "e98607248eec2b149d84efe944c12cbef419b82e",
      "tree": "5a0e8ea0fc7f7b5c55ea6cb725a49e656afdef82",
      "parents": [
        "2f6ab7f5b8f21b2dbfe9ae102674bd1694e94f03"
      ],
      "author": {
        "name": "JoonCheol Park",
        "email": "jooncheol@gmail.com",
        "time": "Thu Oct 11 02:31:44 2012 +0900"
      },
      "committer": {
        "name": "JoonCheol Park",
        "email": "jooncheol@gmail.com",
        "time": "Fri Oct 12 06:02:35 2012 +0900"
      },
      "message": "Support HTTP authentication using user input as fallback\n\nIf repo could not find authentication credentials from ~/.netrc, this\npatch tries to get user and password from user\u0027s console input. This\ncould be a good choice if user doesn\u0027t want to save his plain password\nin ~/.netrc or if user doesn\u0027t know about the netrc usage.\n\nThe user will be prompted only if authentication infomation does not\nexist in the password manager. Since main.py firstly loads auth\ninfomation from ~/.netrc, this will be executed only as fallback\nmechanism.\n\nExample:\n$ repo upload .\nUpload project xxx/ to remote branch master:\n branch yyy ( 1 commit, ...):\n to https://review.zzz.com/gerrit/ (y/N)? y\n\n(repo may try to access to https://review.zzz.com/gerrit/ssh_info and\nwill get the 401 HTTP Basic Authentication response from server. If no\nauthentication info in ~/.netrc, This patch will ask username/passwd)\n\nAuthorization Required (Message from Web Server)\nUser: pororo\nPassword:\n....\n[OK ] xxx/\n\nChange-Id: Ia348a4609ac40060d9093c7dc8d7c2560020455a\n"
    },
    {
      "commit": "2f6ab7f5b8f21b2dbfe9ae102674bd1694e94f03",
      "tree": "040f9045751d83902ea8c479304fdfa2a0061a54",
      "parents": [
        "3a6cd4200e42fbb5a21b3fb8d3c9738c0320cc63"
      ],
      "author": {
        "name": "Mickaël Salaün",
        "email": "mic@digikod.net",
        "time": "Sun Sep 30 00:37:55 2012 +0200"
      },
      "committer": {
        "name": "Mickaël Salaün",
        "email": "mic@digikod.net",
        "time": "Wed Oct 10 08:30:15 2012 +0200"
      },
      "message": "Rename \"dir\" variables\n\nThe variable name \"dir\" conflicts with the name of a Python built-in\nfunction: http://docs.python.org/library/functions.html#dir\n\nChange-Id: I850f3ec8df7563dc85e21f2876fe5e6550ca2d8f\n"
    },
    {
      "commit": "3a6cd4200e42fbb5a21b3fb8d3c9738c0320cc63",
      "tree": "68ae5094d6530453887fb35a73fd5fa55f55a034",
      "parents": [
        "25f17682ca4ecd8acc887462d4bebc7c429cf110",
        "8a68ff96057ec58e524a3e41a2d8dca7b5d016bc"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 09 14:29:46 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 09 14:29:46 2012 -0700"
      },
      "message": "Merge \"Coding style cleanup\""
    },
    {
      "commit": "25f17682ca4ecd8acc887462d4bebc7c429cf110",
      "tree": "8416b3cc2ac42cbf43452da418121f0b056ca878",
      "parents": [
        "e3b1c45aebed329cbc9ad172b1d8e812cf208117",
        "297e7c6ee69077cb063b90a32d22b0b812a95841"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 09 13:46:10 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 09 13:46:10 2012 -0700"
      },
      "message": "Merge \"Expand ~ to user\u0027s home directory for --reference\""
    },
    {
      "commit": "8a68ff96057ec58e524a3e41a2d8dca7b5d016bc",
      "tree": "22f6971e8d3c4a90d11d3704602d073a852328b4",
      "parents": [
        "e3b1c45aebed329cbc9ad172b1d8e812cf208117"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Sep 24 12:15:13 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Tue Oct 09 12:45:30 2012 +0200"
      },
      "message": "Coding style cleanup\n\nFix the following issues reported by pylint:\n\nC0321: More than one statement on a single line\nW0622: Redefining built-in \u0027name\u0027\nW0612: Unused variable \u0027name\u0027\nW0613: Unused argument \u0027name\u0027\nW0102: Dangerous default value \u0027value\u0027 as argument\nW0105: String statement has no effect\n\nAlso fixed a few cases of inconsistent indentation.\n\nChange-Id: Ie0db839e7c57d576cff12d8c055fe87030d00744\n"
    },
    {
      "commit": "297e7c6ee69077cb063b90a32d22b0b812a95841",
      "tree": "5e9c8fea016c7943dd3b933e228e238d171b091b",
      "parents": [
        "7119f94abaa48b3b7fb990f2a12ec5458ef3f133"
      ],
      "author": {
        "name": "Victor Boivie",
        "email": "victor.boivie@sonymobile.com",
        "time": "Fri Oct 05 14:50:05 2012 +0200"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Mon Oct 08 15:03:20 2012 +0200"
      },
      "message": "Expand ~ to user\u0027s home directory for --reference\n\nThis allows a user to have a \u0027repo init\u0027 as:\n  $ repo init -u ... --reference\u003d~/mirror\n\nChange-Id: Ib85b7c8ffca9d732132c68fe9a8d7f0ab1fa9288\n"
    },
    {
      "commit": "e3b1c45aebed329cbc9ad172b1d8e812cf208117",
      "tree": "629984135b1cea3c0a32454eaecbe806ed09ca58",
      "parents": [
        "7119f94abaa48b3b7fb990f2a12ec5458ef3f133"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Oct 03 18:04:02 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Fri Oct 05 10:34:19 2012 +0200"
      },
      "message": "Remove unreachable code\n\nChange 9bb1816b removed part of a block of code, but left the\nremaining part unreachable.  Remove it.\n\nChange-Id: Icdc6061d00e6027df32dee9a3bad3999fe7cdcbc\n"
    },
    {
      "commit": "7119f94abaa48b3b7fb990f2a12ec5458ef3f133",
      "tree": "37c7705cdb457bc9e43de7dc2317981de101378c",
      "parents": [
        "01f443d75a8116aaca5612ee44cceb1ff1a18f2f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Oct 03 17:20:06 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Thu Oct 04 10:31:09 2012 +0200"
      },
      "message": "Update commit-msg hook to version from Gerrit v2.5-rc0\n\nChange-Id: I0d11ac0c24cd53386e996b7dd9bd37c89c789f60\n"
    },
    {
      "commit": "01f443d75a8116aaca5612ee44cceb1ff1a18f2f",
      "tree": "02f8bc525cfa95d1fae0fd106278f3bf24d87896",
      "parents": [
        "b926116a1483d04df99252ed02418bf8e58094a3"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Oct 03 19:11:28 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Thu Oct 04 10:31:09 2012 +0200"
      },
      "message": "Correct call to `sys.exit()`\n\nIt should be `sys.exit()` not `os.exit()`.\n\nChange-Id: Iaeeef456ddf2d17f5df2b712e50e3630bed856c3\n"
    },
    {
      "commit": "b926116a1483d04df99252ed02418bf8e58094a3",
      "tree": "67bbae4a818085b42de7a6a3ee41aaa5fdade55c",
      "parents": [
        "3ff9decfd4e2f1fed71658d0f78a17895f80ff5f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Oct 03 15:47:02 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Thu Oct 04 10:31:09 2012 +0200"
      },
      "message": "Remove `ImportError` class\n\nThe definition of `ImportError` redefines the Python built-in\nclass of the same name.\n\nIt is not used anywhere, so remove it.\n\nChange-Id: I557ce28c93a3306fff72873dc6f477330fc33128\n"
    },
    {
      "commit": "3ff9decfd4e2f1fed71658d0f78a17895f80ff5f",
      "tree": "5ecf68da509291eaf368772f3f5c3571060651a8",
      "parents": [
        "9779565abf06d2f1e48548197be350a06c1eab9b",
        "14a6674e32b3000dbe8b7c96b0d1bb4fb0021720"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Oct 03 16:49:12 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 03 16:49:12 2012 -0700"
      },
      "message": "Merge \"manifest: record the original revision when in -r mode.\""
    },
    {
      "commit": "14a6674e32b3000dbe8b7c96b0d1bb4fb0021720",
      "tree": "024482226fefd4c188f20f56047325b69d388a9f",
      "parents": [
        "34acdd253439448b6c08c3abfc5e7b8bd03f383f"
      ],
      "author": {
        "name": "Brian Harring",
        "email": "ferringb@google.com",
        "time": "Fri Sep 28 20:21:57 2012 -0700"
      },
      "committer": {
        "name": "Brian Harring",
        "email": "ferringb@google.com",
        "time": "Fri Sep 28 22:31:27 2012 -0700"
      },
      "message": "manifest: record the original revision when in -r mode.\n\nCurrently when doing a sync against a revision locked manifest,\nsync has no option but to fall back to sync\u0027ing the entire refs space;\nit doesn\u0027t know which ref to ask for that contains the sha1 it wants.\n\nThis sucks if we\u0027re in -c mode; thus when we generate a revision\nlocked manifest, record the originating branch- and try syncing that\nbranch first.  If the sha1 is found within that branch, this saves\nus having to pull down the rest of the repo- a potentially heavy\nsaving.\n\nIf that branch doesn\u0027t have the desired sha1, we fallback to sync\u0027ing\neverything.\n\nChange-Id: I99a5e44fa1d792dfcada76956a2363187df94cf1\n"
    },
    {
      "commit": "9779565abf06d2f1e48548197be350a06c1eab9b",
      "tree": "2df81e18395ef2a4782e0a889abaaebcea0e40f1",
      "parents": [
        "cf76b1bcec6386f9530636e64746502f9856b5cf"
      ],
      "author": {
        "name": "David Holmer",
        "email": "odinguru@gmail.com",
        "time": "Wed Sep 26 01:58:48 2012 -0400"
      },
      "committer": {
        "name": "David Holmer",
        "email": "odinguru@gmail.com",
        "time": "Wed Sep 26 01:58:48 2012 -0400"
      },
      "message": "Fix incorrect default_groups when parsing projects from XML manifest\n\nChange Details:\n* Switch first default group to \u0027all\u0027 instead of \u0027default\u0027\n\nChange Benefits:\n* More consistent with default_groups in the counterpart Save() function\n* Fixes bug where command \u0027repo manifest\u0027 added an extra \u0027default\u0027\n  group to every output project element groups attribute. This bug was\n  particularly confusing for projects which had \u0027groups\u003d\"notdefault\"\u0027\n  as they were output as \u0027groups\u003d\"notdefault,default\"\u0027 by \u0027repo manifest\u0027\n\nChange-Id: I5611c027a982d3394899466248b971910bec8c6b\n"
    },
    {
      "commit": "cf76b1bcec6386f9530636e64746502f9856b5cf",
      "tree": "15bd204cace8d3d43161f8ef91130984159e9049",
      "parents": [
        "e00aa6b923d28a3c910f85e7726e4ba1d2a9aebd"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Sep 14 10:31:42 2012 +0900"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 21 11:20:59 2012 -0700"
      },
      "message": "sync: Support manual authentication to the manifest server\n\nAdd two new command line options, -u/--manifest-server-username and\n-p/--manifest-server-password, which can be used to specify a username\nand password to authenticate to the manifest server when using the\n-s/--smart-sync or -t/--smart-tag option.\n\nIf -u and -p are not specified when using the -s or -t option, use\nauthentication credentials from the .netrc file (if there are any).\n\nAuthentication credentials from -u/-p or .netrc are not used if the\nmanifest server specified in the manifest file already includes\ncredentials.\n\nChange-Id: I6cf9540d28f6cef64c5694e8928cfe367a71d28d\n"
    },
    {
      "commit": "e00aa6b923d28a3c910f85e7726e4ba1d2a9aebd",
      "tree": "07c848b81c58e5d4a8e34ecae8606ee5fa62679e",
      "parents": [
        "86d973d24ec6771504c37eddc535dff8e03c724f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Sep 11 14:33:51 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Tue Sep 18 09:54:57 2012 +0200"
      },
      "message": "Clean up imports\n\nmanifest_xml: import `HEAD` and `R_HEADS` from correct module\nversion: import `HEAD` from correct module\n\n`HEAD` and `R_HEADS` should be imported from the git_refs module,\nwhere they are originally defined, rather than from the project\nmodule.\n\nrepo: remove unused import of readline\n\ncherry_pick: import standard modules on separate lines\nsmartsync: import subcmd modules explicitly from subcmd\n\nUse:\n  `import re\n  import sys`\nand\n  `from subcmds.sync import Sync`\n\nInstead of:\n  `import sys, re`\nand\n  `from sync import Sync`\n\nChange-Id: Ie10dd6832710939634c4f5c86b9ba5a9cd6fc92e\n"
    },
    {
      "commit": "86d973d24ec6771504c37eddc535dff8e03c724f",
      "tree": "1676f107c59efd1d92bd92cb48a9dc726bf00e59",
      "parents": [
        "34acdd253439448b6c08c3abfc5e7b8bd03f383f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Aug 24 10:21:02 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Tue Sep 11 09:45:48 2012 +0200"
      },
      "message": "sync: Support authentication to manifest server with .netrc\n\nWhen using the --smart-sync or --smart-tag option, and the specified\nmanifest server is hosted on a server that requires authentication,\nrepo sync fails with the error: HTTP 401 Unauthorized.\n\nAdd support for getting the credentials from the .netrc file.\n\nIf a .netrc file exists in the user\u0027s home directory, and it contains\ncredentials for the hostname of the manifest server specified in the\nmanifest, use the credentials to authenticate with the manifest server\nusing the URL syntax extension for Basic Authentication:\n\n  http://user:password@host:port/path\n\nCredentials from the .netrc file are only used if the manifest server\nURL specified in the manifest does not already include credentials.\n\nChange-Id: I06e6586e8849d0cd12fa9746789e8d45d5b1f848\n"
    },
    {
      "commit": "34acdd253439448b6c08c3abfc5e7b8bd03f383f",
      "tree": "f3290384d6d47fa8187678f75ed9885dbbfad20e",
      "parents": [
        "d94aaef39e301cc912968c07d1783232bf34a174"
      ],
      "author": {
        "name": "Jooncheol Park",
        "email": "jooncheol@gmail.com",
        "time": "Mon Aug 27 02:25:59 2012 +0900"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 07 08:38:08 2012 -0700"
      },
      "message": "Fix ManifestParseError when first child node is comment\n\nIf the first line of manifest.xml is a XML comment, root.childNodes[0]\nis not a \u0027manifest\u0027 element node. The python minidom module will makes\na \u0027Comment\u0027 node as root.childNodes[0]. Since the original code only\nchecks whether the first child node is \u0027manifest\u0027, it couldn\u0027t do any\ncommand including \u0027sync\u0027 due to the \u0027ManifestParseError\u0027 exception. This\npatch could allow the comments between \u0027\u003c?xml ...?\u003e\u0027 and \u0027\u003cmanifest\u003e\u0027 in\nthe manifest.xml file.\n\nChange-Id: I0b81dea4f806965eca90f704c8aa7df49c579402\n"
    },
    {
      "commit": "d94aaef39e301cc912968c07d1783232bf34a174",
      "tree": "48b884fef63992e8b80127c40687a7cf5ff4c8f7",
      "parents": [
        "bd489c4eaa592af98b8b4f09b0a465e0d2b6046a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Sep 07 09:52:04 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Fri Sep 07 10:17:00 2012 +0200"
      },
      "message": "sync: Correct imports of `R_HEADS` and `HEAD`\n\n`R_HEADS` is imported twice, from both the git_refs and project\nmodules.\n\nIt is actually defined in git_refs, and in project it is imported\nfrom there, so the import of `R_HEADS` from project in the sync\nmodule is redundant.  Remove it.\n\n`HEAD` is imported from project, but like `R_HEADS` it is actually\ndefined in git_refs.  Import it from git_refs instead.\n\nChange-Id: I8e2b0217d0d9f9f4ee5ef5b8cd0b026174ac52f4\n"
    },
    {
      "commit": "bd489c4eaa592af98b8b4f09b0a465e0d2b6046a",
      "tree": "6954a16b023daaea026d122251157c0b2db39367",
      "parents": [
        "2dc810c2e4028878b9c3484866a5973d5c33479d"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 23 10:21:26 2012 +0900"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 06 11:18:25 2012 -0700"
      },
      "message": "sync: catch exceptions when connecting to the manifest server\n\nWhen connecting to the manifest server, exceptions can occur but\nare not caught, resulting in the repo sync exiting with a python\ntraceback.\n\nAdd handling of the following exceptions:\n\n- IOError, which can be raised for example if the manifest server\nURL is malformed.\n- xmlrpclib.ProtocolError, which can be raised if the connection\nto the manifest server fails with HTTP error.\n- xmlrpclib.Fault, which can be raised if the RPC call fails for\nsome other reason.\n\nChange-Id: I3a4830aef0941debadd515aac776a3932e28a943\n"
    },
    {
      "commit": "2dc810c2e4028878b9c3484866a5973d5c33479d",
      "tree": "567de855659b91a4629d4b555b71612e4c8ed70c",
      "parents": [
        "bb1b5f5f863fca0e85764f5b35c117f5724d15c0"
      ],
      "author": {
        "name": "Matt Gumbel",
        "email": "matthew.k.gumbel@intel.com",
        "time": "Thu Aug 30 09:39:36 2012 -0700"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 06 10:54:46 2012 -0700"
      },
      "message": "Fix errors when clone.bundle missing on server\n\nCatch curl failures to download clone.bundle; don\u0027t let git try to parse\nthe 404 page as a bundle file (was causing much user confusion).\n\nThis should eliminate false error messages from init and sync such as:\n  error: \u0027.repo/manifests.git/clone.bundle\u0027 does not look like a v2 bundle file\n  fatal: Could not read bundle \u0027.repo/manifests.git/clone.bundle\u0027.\n  error: RPC failed; result\u003d22, HTTP code \u003d 400\n\nSigned-off-by: Matt Gumbel \u003cmatthew.k.gumbel@intel.com\u003e\nChange-Id: I7994f7c0baecfb45bb5a5850c48bd2a0ffabe773\n"
    },
    {
      "commit": "bb1b5f5f863fca0e85764f5b35c117f5724d15c0",
      "tree": "0b6b8d0d6d027f2d0e0dd6fabdd4eafc6c919026",
      "parents": [
        "e2126652a3a1e08724a54091793bb29a79d31014"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Aug 13 13:11:18 2012 -0700"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 05 11:46:48 2012 -0700"
      },
      "message": "Allow projects to be specified as notdefault\n\nInstead of every group being in the group \"default\", every project\nis now in the group \"all\".   A group that should not be downloaded\nby default may be added to the group \"notdefault\".\n\nThis allows all group names to be positive (instead of removing groups\ndirectly in the manifest with -default) and offers a clear way of\nselecting every project (--groups all).\n\nChange-Id: I99cd70309adb1f8460db3bbc6eff46bdcd22256f\n"
    },
    {
      "commit": "e2126652a3a1e08724a54091793bb29a79d31014",
      "tree": "a931f598a6a2dcd7bc449ca7167799a18b0b493d",
      "parents": [
        "9a27d0111d5cf88c6b9409261707a5d7d50aaa64"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Sep 05 10:35:06 2012 +0200"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 05 11:38:41 2012 -0700"
      },
      "message": "Make \"repo sync -j\u003ccount\u003e\" stop properly on Ctrl-C.\n\nThe threaded \u0027repo sync\u0027 implementation would very often freeze the\nprocess when interrupted by the user with Ctrl-C. The only solution\nbeing to kill -9 the process explicitly from another terminal.\n\nThe reason for this is best explained here:\n\nhttp://snakesthatbite.blogspot.fr/2010/09/cpython-threading-interrupting.html\n\nThis patch makes all helper sync threads \u0027daemon\u0027, which allows the\nprocess to terminate immediately on Ctrl-C.\n\nNote that this will forcefully kill all threads in case of interruption; this\nis generally a bad thing, but:\n\n  1/ This is equivalent to calling kill -9 in another terminal, which\n     is the _only_ thing that can currently stop the process.\n\n  2/ There doesn\u0027t seem to be a way to tell the worker threads to\n     gently stop when they are in a blocking operation anyway (even\n     in the non-threaded case).\n\n+ Do the same for \"repo status -j\u003ccount\u003e\".\n\nChange-Id: Ieaf45b0eacee36f35427f8edafd87415c2aa7be4\n"
    },
    {
      "commit": "9a27d0111d5cf88c6b9409261707a5d7d50aaa64",
      "tree": "4a80e3e4c1fd1367a120371375c8d3703edb4701",
      "parents": [
        "918ff85c1e9d9606e4924a0af9a8ddc2e4db692a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Aug 21 14:23:49 2012 +0900"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 05 06:00:47 2012 -0700"
      },
      "message": "manifest-format.txt: Add documentation for GetManifest RPC method\n\nAdd documentation of the GetManifest RPC method in the\nmanifest-server section.\n\nChange-Id: I5cda5929bc8a0ca9d3f2b9da63216427041d2823\n"
    },
    {
      "commit": "918ff85c1e9d9606e4924a0af9a8ddc2e4db692a",
      "tree": "0805e0f28ceef0c2375e53e8011fd0bfd292e869",
      "parents": [
        "3d07da82abe52d0971ea2de75f69db3359af506f"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Aug 07 10:44:01 2012 -0700"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 04 09:30:18 2012 -0700"
      },
      "message": "`repo manifest`: default to stdout if no \"-o\"\n\nChange-Id: I1b0ff9ed5df6386f0c2a851c6c48d063199fe663\n"
    },
    {
      "commit": "3d07da82abe52d0971ea2de75f69db3359af506f",
      "tree": "9ed504bb825957a058f259b5390eef1b902745d9",
      "parents": [
        "e15c65abc25cd1d5d77ec6815a3c011b9f57ddac"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Aug 15 14:22:08 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Thu Aug 23 12:15:49 2012 +0200"
      },
      "message": "init: Improved help text for the --mirror option\n\nChange-Id: Ia6032865f9296b29524c2c25b72bd8e175b30489\n"
    },
    {
      "commit": "e15c65abc25cd1d5d77ec6815a3c011b9f57ddac",
      "tree": "43bd95e2e83abcd88c5d05b6a65393877c51028b",
      "parents": [
        "daa851f6cd9edb3851a3884fd2864f0f3dc583b2"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Aug 22 10:46:11 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Thu Aug 23 12:15:26 2012 +0200"
      },
      "message": "Remove unused imports\n\nThere are several imports that are not used.  Remove them.\n\nChange-Id: I2ac3be66827bd68d3faedcef7d6bbf30ea01d3f2\n"
    },
    {
      "commit": "daa851f6cd9edb3851a3884fd2864f0f3dc583b2",
      "tree": "32479f87b1a60352934074b8999aa3ef975066a1",
      "parents": [
        "a43f42f9ffed69ee807852230e514b7c4bff5855"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Aug 21 13:52:18 2012 +0900"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 22 09:39:41 2012 -0700"
      },
      "message": "manifest-format.txt: Fix a couple of minor spelling mistakes\n\nChange-Id: Ic2d266c8cf08827a71846db9d3711feb02885f01\n"
    },
    {
      "commit": "a43f42f9ffed69ee807852230e514b7c4bff5855",
      "tree": "14779d2ed495d0d06a080ba261ec8caced24bd43",
      "parents": [
        "bb8337fe0fbdd27c91ca0208f9492cf7bf738af0"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Aug 21 16:26:07 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Tue Aug 21 14:06:10 2012 +0200"
      },
      "message": "Patches should be submitted to master, not maint\n\nUpdate SUBMITTING_PATCHES accordingly.\n\nChange-Id: I6fd57a84c67d3762f1f23276d95cac2aeecd5e8f\n"
    },
    {
      "commit": "bb8337fe0fbdd27c91ca0208f9492cf7bf738af0",
      "tree": "0ae1dffe2eed0bd32b89ab126de70562661593b3",
      "parents": [
        "17f85eab24739c2982bf0613a13b155f712e045d",
        "e7a3bcbbb8083e812ce07a5459f0e6d30edfb9fe"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Aug 14 11:21:19 2012 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Aug 14 11:34:34 2012 -0700"
      },
      "message": "Merge branch \u0027master\u0027 into maint\n\nmaster\u0027s original purpose was to forge ahead on using git submodules,\nbut this route has been abandoned.\n\nChange-Id: I164a9efc7821bcd1b941ad76649764722046081b\n"
    },
    {
      "commit": "17f85eab24739c2982bf0613a13b155f712e045d",
      "tree": "0ae1dffe2eed0bd32b89ab126de70562661593b3",
      "parents": [
        "b9477bc2dd8ef1e931f208733976c56a0f2344a3"
      ],
      "author": {
        "name": "Dmitry Fink",
        "email": "dmitry@finik.net",
        "time": "Mon Aug 06 14:52:29 2012 -0700"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 07 11:42:54 2012 -0700"
      },
      "message": "Omit all default groups when generating a manifest\n\nOne of the recent changes introduced implicit path:xxx and name:xxx groups\nto every project, however they are not being stripped when generating\na manifest using \"repo manifest\" command resulting in clutter\n\nChange-Id: Iec8610ba794b2fe4a6cdf0f59ca561595b66f9b5\n"
    },
    {
      "commit": "b9477bc2dd8ef1e931f208733976c56a0f2344a3",
      "tree": "02351b9af113f854c9b5e84c5f6567d78c40d06b",
      "parents": [
        "5e7127d00baf5bdad3e52cf8784c8aaa736395e1"
      ],
      "author": {
        "name": "Mickaël Salaün",
        "email": "mic@digikod.net",
        "time": "Sun Aug 05 13:39:26 2012 +0200"
      },
      "committer": {
        "name": "Mickaël Salaün",
        "email": "mic@digikod.net",
        "time": "Mon Aug 06 23:51:43 2012 +0200"
      },
      "message": "project.py: Replace the relpath function with os.path.relpath\n\nChange-Id: Ib313340344968211cecfc0a718f6072e41da1a91\n"
    },
    {
      "commit": "5e7127d00baf5bdad3e52cf8784c8aaa736395e1",
      "tree": "b28b86ba1eb092483d0f5e02f73e6532a167e8c9",
      "parents": [
        "5d0efdb14a31d651a0f6061ffb73452a20b7ed77"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 14:57:37 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 15:18:10 2012 -0700"
      },
      "message": "Use curl command line tool for clone.bundle\n\nurllib2 is not thread safe and may be causing sync to lock up or\nnot work correctly on various platforms. Instead use the command\nline curl program.\n\nChange-Id: I36eaf18bb4df089d26ea99d533cb015e7c616eb0\n"
    },
    {
      "commit": "5d0efdb14a31d651a0f6061ffb73452a20b7ed77",
      "tree": "a7c781f860bb675d88cfcc8708a28894aa761229",
      "parents": [
        "f35b2d9c31f62a488a0d470f269c85cda5b02d72"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 12:13:01 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 12:13:01 2012 -0700"
      },
      "message": "sync: Honor --no-clone-bundle with -j1\n\nChange-Id: I7c12902e386121a374d525be673092360c67c53d\n"
    },
    {
      "commit": "f35b2d9c31f62a488a0d470f269c85cda5b02d72",
      "tree": "64b0e9105d915467be2a130f8e8848bcd66c4b54",
      "parents": [
        "e0904f721b51fb1f3f11fb4755e476d759b7b3e3"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 11:46:22 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 11:46:22 2012 -0700"
      },
      "message": "Fix mirror mode\n\nChange-Id: Ica0e8392562a7ae5aad7e45441c1540e5e2b0238\n"
    },
    {
      "commit": "e0904f721b51fb1f3f11fb4755e476d759b7b3e3",
      "tree": "3fe7b7c3826fbf7cf913551f759c4f1612c3b36d",
      "parents": [
        "9830553748a2a4a1930361b41a1076dbaa6d9f4a"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Aug 01 20:44:23 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Aug 01 20:44:23 2012 -0700"
      },
      "message": "Fix unsupported operand type(s) for +: \u0027int\u0027 and \u0027str\u0027\n\nChange-Id: I88455107d63daaa60c3b33c010aa8c730a590c70\n"
    },
    {
      "commit": "9830553748a2a4a1930361b41a1076dbaa6d9f4a",
      "tree": "c98e7b66c28c1cef5648b917b1a2311de9e61acc",
      "parents": [
        "2bc7f5cb3af981d673b44ce9a1ff5a272535def6"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Aug 01 17:41:26 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Aug 01 17:41:26 2012 -0700"
      },
      "message": "Fix percent done on resumed /clone.bundle\n\nThe Content-Length when resuming is the number of bytes that\nremain in the file. To compute the total size as expected by\nthe progress meter, we must add the bytes already stored.\n\nWhile we are in this method fix uses of % operator to ensure\na tuple is always supplied.\n\nChange-Id: Ic899231b5bc0ab43b3ddb1d29845f6390e820115\n"
    },
    {
      "commit": "2bc7f5cb3af981d673b44ce9a1ff5a272535def6",
      "tree": "ef9e474c5edde414a226cb26acf72a98807322ed",
      "parents": [
        "b292b98c3e9a9f666ca780ba60fdb4f306eca343"
      ],
      "author": {
        "name": "Chad Jones",
        "email": "chadj@google.com",
        "time": "Thu Jun 28 13:12:13 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jul 31 22:18:47 2012 -0700"
      },
      "message": "Fix bug in version_tuple to handle strings with -rc#\n\nExample of version string that caused a problem: git version 1.7.11-rc3\n\nChange-Id: I8a68b6b37f7b2ded23a1f8ae0d12131050a8807b\nCC: sop@google.com\n"
    },
    {
      "commit": "b292b98c3e9a9f666ca780ba60fdb4f306eca343",
      "tree": "75cea727be50c2e5b86d5c0fa62baae379315bf7",
      "parents": [
        "2f127de7520a0b689bfe5082360eeb53a05d6e2d"
      ],
      "author": {
        "name": "Yestin Sun",
        "email": "sunyi0804@gmail.com",
        "time": "Mon Jul 02 07:32:50 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jul 31 22:13:13 2012 -0700"
      },
      "message": "Add remote alias support in manifest\n\nThe `alias` is an optional attribute in element `remote`. It can be\nused to override attibute `name` to be set as the remote name in each\nproject\u0027s .git/config. Its value can be duplicated while attribute\n`name` has to be unique across the manifest file. This helps each\nproject to be able to have same remote name which actually points\nto different remote url.\n\nIt eases some automation scripts to be able to checkout/push to same\nremote name but actually different remote url, like:\n\nrepo forall -c \"git checkout -b work same_remote/work\"\nrepo forall -c \"git push same_remote work:work\"\n\nfor example:\nThe manifest with \u0027alias\u0027 will look like:\n\n\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\n\u003cmanifest\u003e\n  \u003cremote alias\u003d\"same_alias\" fetch\u003d\"git://git.external1.org/\" name\u003d\"ext1\"\n      review\u003d\"http://review.external1.org\"/\u003e\n  \u003cremote alias\u003d\"same_alias\" fetch\u003d\"git://git.external2.org/\" name\u003d\"ext2\"\n      review\u003d\"http://review.external2.org\"/\u003e\n  \u003cremote alias\u003d\"same_alias\" fetch\u003d\"ssh://git.internal.com:29418\" name\u003d\"int\"\n      review\u003d\"http://review.internal.com\"/\u003e\n  \u003cdefault remote\u003d\"int\" revision\u003d\"int-branch\" sync-j\u003d\"2\"/\u003e\n  \u003cproject name\u003d\"path/to/project1\" path\u003d\"project1\" remote\u003d\"ext1\"/\u003e\n  \u003cproject name\u003d\"path/to/project2\" path\u003d\"project2\" remote\u003d\"ext2\"/\u003e\n  \u003cproject name\u003d\"path/to/project3\" path\u003d\"project3\"/\u003e\n  ...\n\u003c/manifest\u003e\n\nIn each project, use command \"git remote -v\"\n\nproject1:\nsame_alias  git://git.external1.org/project1 (fetch)\nsame_alias  git://git.external1.org/project1 (push)\n\nproject2:\nsame_alias  git://git.external2.org/project2 (fetch)\nsame_alias  git://git.external2.org/project2 (push)\n\nproject3:\nsame_alias  ssh://git.internal.com:29418/project3 (fetch)\nsame_alias  ssh://git.internal.com:29418/project3 (push)\n\nChange-Id: I2c48263097ff107f0c978f3e83966ae71d06cb90\n"
    }
  ],
  "next": "2f127de7520a0b689bfe5082360eeb53a05d6e2d"
}
