)]}'
{
  "log": [
    {
      "commit": "b148ac9d9aefb18baddbf9e28ed33b1b8c6e96e6",
      "tree": "64564abdc213acb66c83f6782566caf51e194678",
      "parents": [
        "a67df63ef18f7bcd1398dc5c3622c01c3fcad15d"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Nov 16 09:33:39 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sat Nov 17 12:40:42 2012 +0900"
      },
      "message": "Allow command options to be set from environment variables\n\nExtend the Command base class to allow options to be set from values\nin environment variables, if the user has not given the option on the\ncommand line and the environment variable is set.\n\nDerived classes of Command can override the implementation of the method\n_GetEnvironmentOptions to configure which of its options may be set from\nenvironment variables.\n\nChange-Id: I7c780bcf9644d6567893d9930984c054bce7351e\n"
    },
    {
      "commit": "75ee0570da09abb1d2bbefe0d25f0560727e6b71",
      "tree": "c62ab4990212282d9c18c694ec21830ad33481f2",
      "parents": [
        "88b86728a4451b97a2c6dcae2feb98014c077793"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Nov 15 17:33:11 2012 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Nov 15 18:50:11 2012 -0800"
      },
      "message": "Raise a NoManifestException when the manifest DNE\n\nWhen a command (eg, `repo forall`) expects the manifest project to\nexist, but there is no manifest, an IOException gets raised.  This\nchange defines a new Exception type to be raised in these cases and\nraises it when project.py fails to read the manifest.\n\nChange-Id: Iac576c293a37f7d8f60cd4f6aa95b2c97f9e7957\n"
    },
    {
      "commit": "e66291f6d0f29938d6671cf8702d0fdab45a1199",
      "tree": "2e61f134ed4d472524296e3b8940614e16f6b4f4",
      "parents": [
        "3794a78b80e8b8894a9707629fd8523547cf5cfa",
        "7ba25bedf97643528ecef049cabe0b9d1c589131"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Nov 14 16:22:41 2012 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 14 16:22:41 2012 -0800"
      },
      "message": "Merge \"Simplify error handling in subcommand execution\""
    },
    {
      "commit": "7ba25bedf97643528ecef049cabe0b9d1c589131",
      "tree": "b49cc04a8d030c784e7f46f6338c1c7f5c5977ac",
      "parents": [
        "98ffba1401056e2d88d3f3898b6fbf5d7d3931a4"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Nov 14 14:18:06 2012 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Nov 14 14:18:06 2012 -0800"
      },
      "message": "Simplify error handling in subcommand execution\n\nInstead of using a nested try (which repo is plagued with), use a single\ntry when executing the appropriate subcommand.\n\nChange-Id: I32dbfc010c740c0cc42ef8fb6a83dfe87f87e54a\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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "ae0a36c9a59e7f872578b17b3b7fa8f72df3cb59",
      "tree": "2cfb4182ad08064d001463aa5aa9079ab638f78a",
      "parents": [
        "76abcc1d1ea2da6cf0ce381486e2f9bf4ca55c36"
      ],
      "author": {
        "name": "Xiaodong Xu",
        "email": "stid.smth@gmail.com",
        "time": "Tue Jan 31 11:10:09 2012 +0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Mar 14 15:01:34 2012 -0700"
      },
      "message": "Add support for Apache Digest authentication for repo init.\n\nrepo tool supports only Basic authentication for now. For those\nwho want to use this tool to manage their own projects, in case\nthe administrator has configured the Apache server with Digest\nauthentication method, users will fail to be authenticated when\nthey run the command \u0027repo init\u0027.\nAdd the digest authentication password manager to the handler\nlist will fix this issue.\n\nSince Git HTTP protocol will require the user be authenticated\nfor fetch operation first before pushing commits to the remote,\nit is unlikely for the administrator to implement anonymous\nread (aka pull) access and write access (aka push) for\nauthenticated user. Both read and write have to be authenticated.\nBe aware that the user may have to add an extra line in his\n~/.netrc file:\n-------------------\naccount example.com\n-------------------\nwhere \u0027example.com\u0027 is the realm for Apache Digest authentication.\n\nChange-Id: I76eb27b205554426d9ce1965deaaf727b87916cd\nSigned-off-by: Xiaodong Xu \u003cstid.smth@gmail.com\u003e\n"
    },
    {
      "commit": "ecff4f17b08f791466b73d935c772de57f2257e6",
      "tree": "44b8e4a958369d33a7e46a8a5d629b2c1486feec",
      "parents": [
        "cc14fa9820a4c9fb7a403bbe1264856c6437bf96"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 15:01:33 2011 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 15:02:15 2011 -0800"
      },
      "message": "Describe the repo launch version in `repo version`\n\n  repo version v1.7.8\n         (from https://android.googlesource.com/tools/repo.git)\n  repo launcher version 1.14\n         (from /home/sop/bin/repo)\n  git version 1.7.8.rc2.256.gcc761\n  Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)\n  [GCC 4.4.3]\n\nChange-Id: Ifcbe5b0e226a1a6ca85455eb62e4da5e9a0f0ca0\n"
    },
    {
      "commit": "3ce2a6b46bb368f000d25782e24d701f68f32659",
      "tree": "0d22b2e9993bd3a378bb9dc56df134c038621397",
      "parents": [
        "841be34968c91c3ea8d8694bc5910e6388f58cbb"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Fri Apr 29 09:59:12 2011 -0400"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 14:38:19 2011 -0800"
      },
      "message": "Propagate result codes from subcmds to sys.exit().\n\nAllows scripts driving repo to know when git failures have\noccurred, not just repo internal errors.\n\nChange-Id: Id20fbbb405c35a148e72c87b822da3f3bf93839c\n"
    },
    {
      "commit": "b660539c4ac691312b44c13c6311568749537290",
      "tree": "fc73316785d794fdb2c9f6c85bb5ff13a2422388",
      "parents": [
        "752371d91b9c7d1e9d6859cdf4cd8fef2f7b245c"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 15:58:07 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 15:58:07 2011 -0700"
      },
      "message": "Fix sync on Python 2.6.6\n\nPython 2.6.6 has the same bug as Python 2.7, where HTTP\nauthentication just stops working, but does not have the\nsetter method to clear the retry counter. Work around by\nsetting the field directly if it exists.\n\nChange-Id: I6a742e606bb7750dc66c33fc7c5d1310541db2c8\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "df5ee52050a5b8ea4e0bb69c007dac556c18ec03",
      "tree": "760f85dcd1039e3ba6110d39cc041c664730e7cb",
      "parents": [
        "fab96c68e3acfb5403ffe65577563f3cb39e2530"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 14:05:21 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 14:06:11 2011 -0700"
      },
      "message": "Fix Python 2.4 support\n\nChange-Id: I89521ae52fa564f0d849cc51e71fee65b3c47bab\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "fab96c68e3acfb5403ffe65577563f3cb39e2530",
      "tree": "972a82f40c3e7de6b88f174f5f5b2a3418f92e40",
      "parents": [
        "bf1fbb20ab33cc479881a2b755e336872971dd78"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 12:00:38 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 12:18:07 2011 -0700"
      },
      "message": "Work around Python 2.7 urllib2 bug\n\nIf the remote is using authenticated HTTP, but does not have\n$GIT_URL/clone.bundle files in each repository, an initial sync\nwould fail around 8 projects in due to the library not resetting\nthe number of failures after getting a 404.\n\nWork around this by updating the retry counter ourselves.\n\nThe urllib2 library is also not thread-safe. Make it somewhat\nsafer by wrapping the critical section with a lock.\n\nChange-Id: I886e2750ef4793cbe2150c3b5396eb9f10974f7f\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "f322b9abb4cadc67b991baf6ba1b9f2fbd5d7812",
      "tree": "ce75a04fed2e84457800325d158de13645cef67e",
      "parents": [
        "db728cd866d4950779620993e12e76f09eb6e2ee"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Sep 19 14:50:58 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Sep 28 10:07:36 2011 -0700"
      },
      "message": "sync: Support downloading bundle to initialize repository\n\nAn HTTP (or HTTPS) based remote server may now offer a \u0027clone.bundle\u0027\nfile in each repository\u0027s Git directory. Over an http:// or https://\nremote repo will first ask for \u0027$URL/clone.bundle\u0027, and if present\ndownload this to bootstrap the local client, rather than relying\non the native Git transport to initialize the new repository.\n\nBundles may be hosted elsewhere. The client automatically follows a\nHTTP 302 redirect to acquire the bundle file. This allows servers\nto direct clients to cached copies residing on content delivery\nnetworks, where the bundle may be closer to the end-user.\n\nBundle downloads are resumeable from where they last left off,\nallowing clients to initialize large repositories even when the\nconnection gets interrupted.\n\nIf a bundle does not exist for a repository (a HTTP 404 response\ncode is returned for \u0027$URL/clone.bundle\u0027), the native Git transport\nis used instead. If the client is performing a shallow sync, the\nbundle transport is not used, as there is no way to embed shallow\ndata into the bundle.\n\nChange-Id: I05dad17792fd6fd20635a0f71589566e557cc743\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "7b947de1ee015ab4d981d34566becba8222931ec",
      "tree": "891f01d5cac0a03042558a7893cdebec089ebe5e",
      "parents": [
        "6392c879454bd4fa0e770195ee8424e383d17df2"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Sep 23 11:50:31 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Sep 23 11:50:31 2011 -0700"
      },
      "message": "Ignore missing ~/.netrc\n\nChange-Id: Ifa6065d57a6cb11ad57ddd44bc88d9690fe234ab\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "3a0e782790ab83e3b1e93fe2fd57f7197ace2f76",
      "tree": "efc9b50a3df851750531015480372ad64104eb62",
      "parents": [
        "490d09a31415d3fd1b16f650188bfd8e701ae8e8"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Sep 22 17:06:41 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Sep 22 18:08:18 2011 -0700"
      },
      "message": "Add global option --time to track execution\n\nThis prints a simple line after a command ends, providing\ninformation about how long it executed for using real wall\nclock time. Its mostly useful for looking at sync times.\n\nChange-Id: Ie0997df0a0f90150270835d94b58a01a10bc3956\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "bd0312a4841e9488cf43ae4afb3b58d44eebbbb1",
      "tree": "bb0a60c3068ceb640d9618cb8d7afa716b9609c0",
      "parents": [
        "334851e4b6390f4c78e463b977003f1d967c88ed"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Sep 19 10:04:23 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Sep 19 14:52:32 2011 -0700"
      },
      "message": "Support ~/.netrc for HTTP Basic authentication\n\nIf repo tries to access a URL over HTTP and the user needs to\nauthenticate, offer a match from ~/.netrc. This matches behavior\nwith the Git command line client.\n\nChange-Id: I803f3c5d562177ea0330941350cff3cc1e1bef08\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "334851e4b6390f4c78e463b977003f1d967c88ed",
      "tree": "7c8c5004c7cbb3079b460aee97095955013147ff",
      "parents": [
        "014d0609899dba70a1af0b32de377ca08c54aded"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Sep 19 08:05:31 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Sep 19 14:51:47 2011 -0700"
      },
      "message": "Enhance HTTP support\n\nSetting REPO_CURL_VERBOSE\u003d1 in the environment will register a debug\nlevel HTTPHandler on the urllib2 library, showing HTTP requests and\nresponses on the stderr channel of repo.\n\nDuring any HTTP or HTTPS request created inside of the repo process,\na custom User-Agent header is now defined:\n\n  User-Agent: git-repo/1.7.5 (Linux) git/1.7.7 Python/2.6.5\n\nChange-Id: Ia5026fb1e1500659bd2af27416d85e205048bf26\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "014d0609899dba70a1af0b32de377ca08c54aded",
      "tree": "cffe8353d15a9cf3ab03f3c2e8f244570650fbb4",
      "parents": [
        "44da16e8a0e919c60a6eb7b5503cf915864d7336"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sun Sep 11 12:57:15 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sun Sep 11 13:11:04 2011 -0700"
      },
      "message": "Honor http_proxy variable globally\n\nIf the http_proxy environment variable was set, honor it during\nthe entire repo session for any Python created HTTP connections.\n\nChange-Id: Ib4ae833cb2cdd47ab0126949f6b399d2c142887d\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2bf9db0d3b0b4cf4e11187ea7438ddeb1262fe21",
      "tree": "5f1947cbb7afb8c0c1e4485f705aaf9df6d79a47",
      "parents": [
        "f00e0ce556fc22fef180c74a9d78f1908d9aeb0b"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Jul 14 15:23:39 2009 -0400"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sun Jan 09 17:39:22 2011 -0800"
      },
      "message": "Add \"repo branch\" as an alias for \"repo branches\"\n\nFor those of us that are used to typing \"git branch\".\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n(cherry picked from commit 33f0e786bb35ea11da1e3d1746c431da5f1d93eb)\n"
    },
    {
      "commit": "0048b69c038306fe74408a63cdd0773b0d86a8fe",
      "tree": "ca5fb88b7b5a6a196d066172f4e59f37e626f5cf",
      "parents": [
        "2b8db3ce3e7344b9f3b5216637c5af0d54be5656"
      ],
      "author": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Tue Dec 21 13:39:23 2010 -0800"
      },
      "committer": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Tue Dec 21 13:39:23 2010 -0800"
      },
      "message": "Fixed race condition in \u0027repo sync -jN\u0027 that would open multiple masters.\n\nThis fixes the SSH Control Masters to be managed in a thread-safe\nfashion.  This is important because \"repo sync -jN\" uses threads to\nsync more than one repository at the same time.  The problem didn\u0027t\nshow up earlier because it was masked if all of the threads tried to\nconnect to the same host that was used on the \"repo init\" line.\n"
    },
    {
      "commit": "c8a300f6397dad7db00c3654ff6e50e9519ed7c9",
      "tree": "4bd29d3d580e53965b66ed2d10e13507584fe577",
      "parents": [
        "1b34c9118ed86a15b0bc1094804c095dd7be33cb"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon May 18 13:19:57 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 09:31:28 2009 -0700"
      },
      "message": "Refactor Manifest to be XmlManifest\n\nWe\u0027ll soon be supporting two different manifest formats, but we\ncan\u0027t immediately remove support for the current XML one that is\nin wide spread use within Android.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "fb2316146f6e3036e0cc3e08653920964a428a15",
      "tree": "f19c5c65a035f547ada03496f1576524e4602665",
      "parents": [
        "8bd5e60b16080008771afcaa7de7084487b84780"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 18:53:46 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 16:50:47 2009 -0700"
      },
      "message": "Automatically use SSH control master support during sync\n\nBy creating a background ssh \"control master\" process which lives\nfor the duration of our sync cycle we can easily cut the time for\na no-op sync of 132 projects from 60s to 18s.\n\nBug: REPO-11\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "db45da12089bf131579d100ff7990cbc18d07325",
      "tree": "c81dbff8a644272dc12cfcdc129ee1f0db3a559f",
      "parents": [
        "50fa1ac6db388c0aa16751b5ad69d296e5eea047"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 13:49:13 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 13:49:13 2009 -0700"
      },
      "message": "Add -p to `repo forall` to improve output formatting\n\nWhen trying to read log output from many projects at once it can\nbe difficult to make sense of which messages came from where.\n\nFor many professional developers it is common to want to view the\nlast week\u0027s worth of your work, so you can write a weekly summary\nof your activity for your status report.\n\nThis is easier with the new -p option:\n\n  repo forall -pc git log --reverse --since\u003d1.week.ago --author\u003dsop\n\nproduces a report of all commits written by me in the last week,\nformatted in a paged output display, with headers inserted in\nfront of each project\u0027s output.\n\nWhere this can be even more useful is with git log\u0027s pickaxe,\ne.g. now we can use:\n\n  repo forall -pc git log -Sbar v1.0..v1.1\n\nto locate all additions or removals of the symbol \u0027bar\u0027 since v1.0,\nup to and including v1.1.  Before displaying the matching commits in\na project, a project header is shown, giving the user some context\ninformation for the matching results.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "ad3193a0e587073dee0edef46bdf24f6c6e09779",
      "tree": "84ed1894e6f590455ee361beb049c1c271c4e0e7",
      "parents": [
        "b81ac9e65444d0f54d2b6dd24d20b74945c9a36a"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 09:54:51 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 09:54:51 2009 -0700"
      },
      "message": "Fix `repo --trace` to show ref and config loads\n\nThe value of the varible TRACE was copied during the import, which\nhappens before the --trace option can be processed.  So instead we\nnow use a function to determine if the value is set, as the function\ncan be safely copied early during import.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "0ed2bd1d95fb85dac1721f4c71abc8e07ec30e64",
      "tree": "d6ac77f59b42c493f92156d697e56d481d8c6cae",
      "parents": [
        "c7a4eefa7e775b64916a66b52ca6c5f31e2cf5c8"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 09 18:26:31 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 09 18:26:31 2009 -0700"
      },
      "message": "Add global --trace command line option\n\nThis has the same effect as saying \"export REPO_TRACE\u003d1\" in\nyour shell prior to starting repo, but is documented in the\ncommand usage and perhaps easier to use.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "c95583bf4f17b8467f815b6391ffc6c7add08804",
      "tree": "c69bf8a061279b79326fb00f2197efcd8726864c",
      "parents": [
        "6a5644d392069b67f17c8ce6cb10f07cce71cc1c"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 03 17:47:06 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 03 17:47:06 2009 -0800"
      },
      "message": "Don\u0027t permit users to run repo status in a mirror client\n\nIf a client was created with \"repo init --mirror\" then there are\nno working directories present, and no files checked out.  Using\na command like \"repo status\" in this context makes no sense, and\nactually throws back a Pytyon traceback at the console when the\nunderlying commands fail out.\n\nWe now tag commands with the MirrorSafeCommand type if they are\nable to be executed within a mirror directory safely.  Using a\ncommand in a mirror which lacks this base class results in a\nuseful error letting you know the command isn\u0027t supported.\n\nBug: REPO-14\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "47c1a63a07ebd67efac00ca9e0d877633aea5881",
      "tree": "1d52cf3c114a4389a0ec79102604aa8ca6afdde7",
      "parents": [
        "559b846b17a5b720c1247d07e292150466f27f96"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 02 18:24:23 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 02 18:24:23 2009 -0800"
      },
      "message": "Add \u0027repo version\u0027 to describe what code we are running\n\nI meant to have this in here, so clients can more easily report\nwhat version of repo they are running.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "559b846b17a5b720c1247d07e292150466f27f96",
      "tree": "1b0c5ed818859db0ef13b943dc005af4fbdd3289",
      "parents": [
        "7c6c64d463d3baa361ef7bef8ff3149134819c96"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 02 12:56:08 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 02 12:56:08 2009 -0800"
      },
      "message": "Report better errors when a project revision is invalid\n\nIf a manifest specifies an invalid revision property, give the\nuser a better error message detaling the problem, instead of an\nugly Python traceback with a strange Git error message.\n\nBug: REPO-2\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "c9ef744c7b5f6bcab446cf0a0bc9cc1b016dd5f8",
      "tree": "ff1bd7309698ef0dd312daf205512b1fa96d3e8d",
      "parents": [
        "438ee1cad98ac32509718976e63c36a449bfb679"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Nov 03 10:32:09 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Nov 03 11:00:44 2008 -0800"
      },
      "message": "Install a default pre-auto-gc hook in all repositories\n\nThis hook is evaluated by `git gc --auto` to determine if it is a\ngood idea to execute a GC at this time, or defer it to some later\ndate.  When working on a laptop its a good idea to avoid GC if you\nare on battery power as the extra CPU and disk IO would consume a\ndecent amount of the charge.\n\nThe hook is the standard sample hook from git.git contrib/hooks,\nlast modified in git.git by 84ed4c5d117d72f02cc918e413b9861a9d2846d7.\nI added the GPLv2 header to the script to ensure the license notice\nis clear, as it does not match repo\u0027s own APLv2 license.\n\nWe only update hooks during initial repository creation or on\na repo sync.  This way we don\u0027t incur huge overheads from the\nhook stat operations during \"repo status\" or even the normal\n\"repo sync\" cases.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "7965f9fed083f07255d62f2a4a49fb54424356e4",
      "tree": "60b0eff346743da51bf3f4952bd40623e046c362",
      "parents": [
        "de646819b8e43a906d86a579c68118cad31934cc"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Oct 29 15:20:02 2008 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Oct 29 15:24:34 2008 -0700"
      },
      "message": "Move the Editor configuration out of Manifest\u0027s constructor\n\nThis way we can build more than one Manifest instance in memory\nand not muck around with the Editor configuration each time we\nbuild a new instance.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "7542d664de7a9d42f64a81bc8c0b86bcbb384376",
      "tree": "9a991d3c21b9f38cbd08f3c7d5852db0c3db2b5a",
      "parents": [
        "0734600ce0f24016d190311621ea59649bc92bad"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 21 07:11:36 2008 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 21 07:12:42 2008 -0700"
      },
      "message": "Remove the Python 2.4 dependency and use just \u0027python\u0027\n\nMany Linux distributions are including python2.5 by default, as\nit is the latest stable release of the language.  Using python2.4\n(and asking users to specifically install it) is just cruel and\nunusual punishment.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "cf31fe9b4fb650b27e19f5d7ee7297e383660caf",
      "tree": "d04ca6a45d579dca5e5469606c48c405aee68f4b",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
