)]}'
{
  "log": [
    {
      "commit": "85b24acd6a11af3d84cc71fc35ebdb6d3c78065f",
      "tree": "ec326002ea5e985a4f1f5cd5e9f8f002dcd75236",
      "parents": [
        "2cd1f0452eb746ae727218f5dbda0fd1ae0b2e34"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Tue May 06 15:57:48 2014 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed May 07 10:46:24 2014 +0100"
      },
      "message": "Use JSON instead of pickle\n\nUse JSON as it is shown to be much faster than pickle.\nAlso clean up the loading and saving functions.\n\nChange-Id: I45b3dee7b4d59a1c0e0d38d4a83b543ac5839390\n"
    },
    {
      "commit": "2cd1f0452eb746ae727218f5dbda0fd1ae0b2e34",
      "tree": "dd8ee9139452c6eb3c759f199cab78d762545cdf",
      "parents": [
        "65e3a78a9e9336dae396cef09b8b23621f4bdc6e"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Mon May 05 21:24:05 2014 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Wed May 07 08:44:20 2014 +0100"
      },
      "message": "Use next(iterator) rather than iterator.next()\n\niterator.next() was replaced with iterator.__next__() in Python 3.\nUse next(iterator) instead which will select the correct method for\nreturning the next item.\n\nChange-Id: I6d0c89c8b32e817e5897fe87332933dacf22027b\n"
    },
    {
      "commit": "65e3a78a9e9336dae396cef09b8b23621f4bdc6e",
      "tree": "2d1836404960bd37669b598494d333728f0e6d2a",
      "parents": [
        "7446c5954aa2ca2d0353a5a3e91f6f7e4b9b17e7",
        "6efdde9f6eeca185aafa7393f6e61fd3aefa1cbe"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed May 07 06:30:28 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 07 06:30:30 2014 +0000"
      },
      "message": "Merge \"Prevent warning twice about Python 3 usage\""
    },
    {
      "commit": "6efdde9f6eeca185aafa7393f6e61fd3aefa1cbe",
      "tree": "3ab98d4a7fdd3e250c60a3d069d8b2bb9132938a",
      "parents": [
        "666d534636d262cbfd971509dd0f0be0cddb2e11"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Mon May 05 20:37:05 2014 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Tue May 06 12:44:22 2014 +0000"
      },
      "message": "Prevent warning twice about Python 3 usage\n\nOnly warn about using Python 3 when running the repo script directly.\nThis prevents the user being warned twice.\n\nChange-Id: I2ee51ea2fa0127ea310598320e460ec9f38c6488\n"
    },
    {
      "commit": "7446c5954aa2ca2d0353a5a3e91f6f7e4b9b17e7",
      "tree": "640c3f8649dcde8ea09f43495ccbd4ccd10c8a7e",
      "parents": [
        "666d534636d262cbfd971509dd0f0be0cddb2e11"
      ],
      "author": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Tue May 06 09:19:39 2014 +0100"
      },
      "committer": {
        "name": "Anthony King",
        "email": "anthonydking@slimroms.net",
        "time": "Tue May 06 12:42:35 2014 +0000"
      },
      "message": "Use sorted() rather than .sort()\n\ndict.keys() produces a dict_keys object in Python 3, which does\nnot support .sort(). Use sorted() which will give the same outcome.\n\nChange-Id: If6b33db07a31995b4e44959209d08d8fb74ae339\n"
    },
    {
      "commit": "666d534636d262cbfd971509dd0f0be0cddb2e11",
      "tree": "f7341695337a3179d7c77c5fb1272d6e4f83f595",
      "parents": [
        "f2af7564256a65221e0ebc45d716672a42cd537a"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu May 01 13:09:57 2014 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu May 01 13:20:32 2014 -0700"
      },
      "message": "Ensure HEAD is correct when skipping remote fetch\n\nA recent optimization (2fb6466f795eb30c1dfa598501f5b5d2981e6a5f) skips\nperforming a remote fetch if we already know we have the sha1 we want.\nHowever, that optimization skipped initialization steps that ensure HEAD\npoints to the correct sha1.  This change makes sure not to skip those\nsteps.\n\nHere is an example of how to test this change:\n\n\"\"\"\"\"\"\"\"\"\nurl\u003d\u003cmanifest url\u003e\nbranch1\u003d\u003cbranch name\u003e\nbranch2\u003d\u003cbranch name\u003e\nproject\u003d\u003cproject with revision set to different sha1 in each branch\u003e\n\nrepo init -u $url -b $branch1 --mirror\nrepo sync $project\nfirst\u003d$(cd $project.git; git rev-parse HEAD)\n\nrepo init -b $branch2\nrepo sync $project\nsecond\u003d$(cd platform/build.git; git rev-parse HEAD)\n\nif [[ $first \u003d\u003d $second ]]\nthen\n    echo \u0027problem!\u0027\nelse\n    echo \u0027no problem!\u0027\nfi\n\"\"\"\"\"\"\"\"\"\n"
    },
    {
      "commit": "f2af7564256a65221e0ebc45d716672a42cd537a",
      "tree": "c28070ea8606341574ed207648726b2322baa2b1",
      "parents": [
        "544e7b0a9774a6366b6a06d25992c46fd5d4f31f"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Apr 30 11:31:01 2014 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Apr 30 11:34:00 2014 -0700"
      },
      "message": "Add \u0027shallow\u0027 gitfile to symlinks\n\nThis fixes the bug that kept clients from doing things like `git log`\nin projects using the clone-depth feature.\n\nChange-Id: Ib4024a7b82ceaa7eb7b8935b007b3e8225e0aea8\n"
    },
    {
      "commit": "544e7b0a9774a6366b6a06d25992c46fd5d4f31f",
      "tree": "4c242f5667a949ec6d76d19e0d0f810ed06e7874",
      "parents": [
        "e0df232da7c92b0776a3e86a70687e2c9f2bad7b",
        "9bc422f1301a54aaabc6ac279989970c4b6f5137"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Apr 24 21:21:01 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 24 21:21:02 2014 +0000"
      },
      "message": "Merge \"Ignore clone-depth attribute when fetching to a mirror\""
    },
    {
      "commit": "e0df232da7c92b0776a3e86a70687e2c9f2bad7b",
      "tree": "d9bb8f70c88f622a29472c49fb253200fb9ed52f",
      "parents": [
        "5a7c3afa73c99ab07c60bb65f5ec57423cac4282"
      ],
      "author": {
        "name": "Jeff Hamilton",
        "email": "jham@android.com",
        "time": "Mon Apr 21 17:10:59 2014 -0500"
      },
      "committer": {
        "name": "Jeff Hamilton",
        "email": "jham@android.com",
        "time": "Tue Apr 22 14:35:47 2014 -0500"
      },
      "message": "Add linkfile support.\n\nIt\u0027s just like copyfile and runs at the same time as copyfile but\ninstead of copying it creates a symlink instead.  This is needed\nbecause copyfile copies the target of the link as opposed to the\nsymlink itself.\n\nChange-Id: I7bff2aa23f0d80d9d51061045bd9c86a9b741ac5\n"
    },
    {
      "commit": "5a7c3afa73c99ab07c60bb65f5ec57423cac4282",
      "tree": "09e995846e7ff06d382a56c3942e9b3f7d161dac",
      "parents": [
        "e81bc030bba802627fd34af472fc0cf451e17c1d",
        "eb5acc9ae9148b21afa82b63daec7753b284c03c"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Apr 18 00:06:07 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 18 00:06:08 2014 +0000"
      },
      "message": "Merge \"Don\u0027t try to remove .repo if it doesn\u0027t exist\""
    },
    {
      "commit": "9bc422f1301a54aaabc6ac279989970c4b6f5137",
      "tree": "1f7eea668663481daef0e6f3a30aa4d191da2c8e",
      "parents": [
        "e81bc030bba802627fd34af472fc0cf451e17c1d"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Apr 15 10:28:56 2014 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Apr 16 11:00:40 2014 +0900"
      },
      "message": "Ignore clone-depth attribute when fetching to a mirror\n\nIf a manifest includes projects with a clone-depth\u003d1 attribute, and a\nworkspace is initialised from that manifest using the --mirror option,\nany workspaces initialised and synced from the mirror will fail with:\n\n  fatal: attempt to fetch/clone from a shallow repository\n\non the projects that had the clone-depth.\n\nIgnore the clone-depth attribute when fetching from the remote to a\nmirror workspace. Thus the mirror will be synched with a complete\nclone of all the repositories.\n\nChange-Id: I638b77e4894f5eda137d31fa6358eec53cf4654a\n"
    },
    {
      "commit": "e81bc030bba802627fd34af472fc0cf451e17c1d",
      "tree": "2d899160e958b00b330e7a50927f1a6cd16eb526",
      "parents": [
        "26c45a79586da17fe2e26a427acb56c81fb3bcc5"
      ],
      "author": {
        "name": "Mitchel Humpherys",
        "email": "mitchelh@codeaurora.org",
        "time": "Mon Mar 31 11:36:56 2014 -0700"
      },
      "committer": {
        "name": "Mitchel Humpherys",
        "email": "mitchelh@codeaurora.org",
        "time": "Mon Mar 31 13:08:26 2014 -0700"
      },
      "message": "Add total count and iteration count to forall environment\n\nFor long-running forall commands sometimes it\u0027s useful to know which\niteration is currently running. Add REPO_I and REPO_COUNT environment\nvariables to reflect the current iteration count as well as the total\nnumber of iterations so that the user can build simple status\nindicators.\n\nExample:\n\n    $ repo forall -c \u0027echo $REPO_I / $REPO_COUNT; git gc\u0027\n    1 / 579\n    Counting objects: 41, done.\n    Delta compression using up to 8 threads.\n    Compressing objects: 100% (19/19), done.\n    Writing objects: 100% (41/41), done.\n    Total 41 (delta 21), reused 41 (delta 21)\n    2 / 579\n    Counting objects: 53410, done.\n    Delta compression using up to 8 threads.\n    Compressing objects: 100% (10423/10423), done.\n    Writing objects: 100% (53410/53410), done.\n    Total 53410 (delta 42513), reused 53410 (delta 42513)\n    3 / 579\n    ...\n\nChange-Id: I9f28b0d8b7debe423eed3b4bc1198b23e40c0c50\nSigned-off-by: Mitchel Humpherys \u003cmitchelh@codeaurora.org\u003e\n"
    },
    {
      "commit": "eb5acc9ae9148b21afa82b63daec7753b284c03c",
      "tree": "74c1931b7930a45ae92f0f4791af29778d0d0af6",
      "parents": [
        "53e902a19b0b80e07ac55966d13c5c84c5b0e8ce"
      ],
      "author": {
        "name": "Mitchel Humpherys",
        "email": "mitchelh@codeaurora.org",
        "time": "Wed Mar 12 10:48:15 2014 -0700"
      },
      "committer": {
        "name": "Mitchel Humpherys",
        "email": "mitchelh@codeaurora.org",
        "time": "Wed Mar 12 15:11:27 2014 -0700"
      },
      "message": "Don\u0027t try to remove .repo if it doesn\u0027t exist\n\nPart of the cleanup path for _Init is removing the .repo\ndirectory. However, _Init can fail before creating the .repo directory,\nso trying to remove it raises another exception:\n\n    fatal: invalid branch name \u0027refs/changes/53/55053/4\u0027\n    Traceback (most recent call last):\n      File \"/home/mitchelh/bin/repo\", line 775, in \u003cmodule\u003e\n        main(sys.argv[1:])\n      File \"/home/mitchelh/bin/repo\", line 749, in main\n        os.rmdir(repodir)\n    OSError: [Errno 2] No such file or directory: \u0027.repo\u0027\n\nFix this by only removing .repo if it actually exists.\n\nChange-Id: Ia251d29e9c73e013eb296501d11c36263457e235\n"
    },
    {
      "commit": "26c45a79586da17fe2e26a427acb56c81fb3bcc5",
      "tree": "8829c11deca6e259c39cab47251b3978ad6ea310",
      "parents": [
        "68425f4da878b5c7c77cc490539eeb83eb46256e"
      ],
      "author": {
        "name": "Mitchel Humpherys",
        "email": "mitchelh@codeaurora.org",
        "time": "Mon Mar 10 14:21:59 2014 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Mar 12 16:34:53 2014 +0900"
      },
      "message": "Make --no-tags work with -c\n\nCurrently, the --no-tags option is ignored if the user asks to only\nfetch the current branch. There is no reason for this restriction. Fix\nit.\n\nChange-Id: Ibaaeae85ebe9955ed49325940461d630d794b990\nSigned-off-by: Mitchel Humpherys \u003cmitchelh@codeaurora.org\u003e\n"
    },
    {
      "commit": "68425f4da878b5c7c77cc490539eeb83eb46256e",
      "tree": "1e0de684c28e446e7407a35fe2d4b9e4ad569139",
      "parents": [
        "53e902a19b0b80e07ac55966d13c5c84c5b0e8ce"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Mar 11 14:55:52 2014 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Mar 11 14:55:52 2014 +0900"
      },
      "message": "Fix indentation in project.py\n\nChange-Id: I81c630536eaa54d5a25b9cb339a96c28619815ea\n"
    },
    {
      "commit": "53e902a19b0b80e07ac55966d13c5c84c5b0e8ce",
      "tree": "e804b3826be8d5bb6153f2f9f4e482191e8b8642",
      "parents": [
        "093fdb6587bba081c4d34eb9ea500149b1090280"
      ],
      "author": {
        "name": "Dan Sandler",
        "email": "dsandler@android.com",
        "time": "Sun Mar 09 13:20:02 2014 -0400"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Mar 11 05:33:43 2014 +0000"
      },
      "message": "More verbose errors for NoManifestExceptions.\n\nThe old \"manifest required for this command -- please run\ninit\" is replaced by a more helpful message that lists the\ncommand repo was trying to execute (with arguments) as well\nas the str() of the NoManifestException. For example:\n\n\u003e error: in `sync`: [Errno 2] No such file or directory:\n\u003e \t\u0027path/to/.repo/manifests/.git/HEAD\u0027\n\u003e error: manifest missing or unreadable -- please run init\n\nOther failure points in basic command parsing and dispatch\nare more clearly explained in the same fashion.\n\nChange-Id: I6212e5c648bc5d57e27145d55a5391ca565e4149\n"
    },
    {
      "commit": "093fdb6587bba081c4d34eb9ea500149b1090280",
      "tree": "a8edab76db87f3ff70536e01b11bc5c034a0729e",
      "parents": [
        "2fb6466f795eb30c1dfa598501f5b5d2981e6a5f"
      ],
      "author": {
        "name": "bijia",
        "email": "bijia@xiaomi.com",
        "time": "Thu Nov 28 09:19:22 2013 +0800"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Mar 04 00:51:30 2014 +0000"
      },
      "message": "Add reviewers automatically from project\u0027s git config\n\nThe `review.URL.autocopy` setting sends email notification to the\nnamed reviewers, but does not add them as reviewer on the uploaded\nchange.\n\nAdd a new setting `review.URL.autoreviewer`.  The named reviewers\nwill be added as reviewer on the uploaded change.\n\nChange-Id: I3fddfb49edf346f8724fe15b84be8c39d43e7e65\nSigned-off-by: bijia \u003cbijia@xiaomi.com\u003e"
    },
    {
      "commit": "2fb6466f795eb30c1dfa598501f5b5d2981e6a5f",
      "tree": "09664b3abb134e5cce4af110174e6498523540d8",
      "parents": [
        "724aafb52d546b23658e517278e4d93ec351dbaf"
      ],
      "author": {
        "name": "Chris AtLee",
        "email": "chris.atlee@gmail.com",
        "time": "Thu Jan 16 21:32:33 2014 -0500"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Mar 03 10:17:03 2014 +0000"
      },
      "message": "Don\u0027t fetch from remotes if commit id exists locally\n\nIn existing workspaces where the manifest specifies a commit id in the\nmanifest, we can avoid doing a fetch from the remote if we have the\ncommit locally. This substantially improves sync times for fully\nspecified manifests.\n\nChange-Id: Ide216f28a545e00e0b493ce90ed0019513c61613\n"
    },
    {
      "commit": "724aafb52d546b23658e517278e4d93ec351dbaf",
      "tree": "9f1e19526e4df072490516046e4c9f2f9072b033",
      "parents": [
        "ccd218cd8f6eeb4dab94b22cec6812d7abb7c814",
        "89ece429fbb3047eabe9e8eb3df3076d74926eb3"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Feb 28 21:16:32 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 28 21:16:32 2014 +0000"
      },
      "message": "Merge \"Clean up duplicate logic in subcmds/sync.py.\""
    },
    {
      "commit": "ccd218cd8f6eeb4dab94b22cec6812d7abb7c814",
      "tree": "5897d64dbc22eb4c39c7a9f4cfaeb4a36200f33d",
      "parents": [
        "dd6542268a59834ecff573de974d788f11af775d"
      ],
      "author": {
        "name": "Kwanhong Lee",
        "email": "kwanhong.lee@windriver.com",
        "time": "Mon Feb 17 13:07:32 2014 +0900"
      },
      "committer": {
        "name": "Kwanhong Lee",
        "email": "kwanhong.lee@windriver.com",
        "time": "Thu Feb 20 11:07:23 2014 +0900"
      },
      "message": "Fix to mirror manifest when --mirror is given\n\nCommit 8d201 \"repo: Support multiple branches for the same project.\"\n(Change id is I5e2f4e1a7abb56f9d3f310fa6fd0c17019330ecd) caused missing\nmirroring manifest repository when \u0027repo sync\u0027 after \u0027repo init --mirror\u0027.\n\nWhen the function _AddMetaProjectMirror() is called to add two of\nmeta projects - git-repo itself and manifest repository to mirror,\nit didn\u0027t add them into self._paths which has list of projects to be\nsync\u0027ed by \u0027repo sync\u0027.\n\nIn addition, because member var of Project \u0027relpath\u0027 is used as a key\nof self._paths, it should be set with proper value other than None.\nSince this is only for meta projects which are not described in manifest\nxml, \u0027relpath\u0027 is name of the projects.\n\nChange-Id: Icc3b9e6739a78114ec70bf54fe645f79df972686\nSigned-off-by: Kwanhong Lee \u003ckwanhong.lee@windriver.com\u003e\n"
    },
    {
      "commit": "dd6542268a59834ecff573de974d788f11af775d",
      "tree": "e014028b17f04c230bb8de690d701c2b10a1d93e",
      "parents": [
        "baca5f7e88e07c86f402ae7423bb3171a33688e3"
      ],
      "author": {
        "name": "Julien Campergue",
        "email": "julien.campergue@parrot.com",
        "time": "Thu Jan 09 16:21:37 2014 +0100"
      },
      "committer": {
        "name": "Julien Campergue",
        "email": "julien.campergue@parrot.com",
        "time": "Mon Feb 17 11:20:11 2014 +0000"
      },
      "message": "Add the \"diffmanifests\" command\n\nThis command allows a deeper diff between two manifest projects.\nIn addition to changed projects, it displays the logs of the\ncommits between both revisions for each project.\n\nChange-Id: I86d30602cfbc654f8c84db2be5d8a30cb90f1398\nSigned-off-by: Julien Campergue \u003cjulien.campergue@parrot.com\u003e\n"
    },
    {
      "commit": "baca5f7e88e07c86f402ae7423bb3171a33688e3",
      "tree": "dbb0edae6f8d08c2314a5595ad59ec467faf7d54",
      "parents": [
        "565480588d2bff4205b437862505e77382189811",
        "1829101e285cf7956d045cf7a04a8adb7f4c0109"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Feb 17 07:56:59 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 17 07:57:00 2014 +0000"
      },
      "message": "Merge \"Add error message for download -c conflicts\""
    },
    {
      "commit": "89ece429fbb3047eabe9e8eb3df3076d74926eb3",
      "tree": "955edd4f6d2d94a13b53d0b35cf23e5f9ada9652",
      "parents": [
        "565480588d2bff4205b437862505e77382189811"
      ],
      "author": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Thu Jan 09 18:51:58 2014 -0800"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Feb 14 16:14:32 2014 +0000"
      },
      "message": "Clean up duplicate logic in subcmds/sync.py.\n\nThe fetch logic is now shared between the jobs \u003d\u003d 1 and\njobs \u003e 1 cases. This refactoring also fixes a bug where\nopts.force_broken was not honored when jobs \u003e 1.\n\nChange-Id: Ic886f3c3c00f3d8fc73a65366328fed3c44dc3be"
    },
    {
      "commit": "565480588d2bff4205b437862505e77382189811",
      "tree": "caf6d315bb10bcdbc10e84dfae62ab755bcaa014",
      "parents": [
        "1966133f8e82971f2e247a8579735a3b2f19301d"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Feb 11 18:44:58 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Feb 12 09:11:00 2014 -0800"
      },
      "message": "Check for existence of refs upon initial fetch\n\nWhen we do an initial fetch and have not specified any branch etc,\nthe following fetch command will not error:\ngit fetch origin --tags +refs/heads/*:refs/remotes/origin/*\n\nIn this change we make sure something got fetched and if not we report\nan error.\n\nThis fixes the bug that occurs when we init using a bad manifest url and\nthen are unable to init again (because a manifest project has been\ninited with no manifest).\n\nChange-Id: I6f8aaefc83a1837beb10b1ac90bea96dc8e61156\n"
    },
    {
      "commit": "1829101e285cf7956d045cf7a04a8adb7f4c0109",
      "tree": "ab68a895f67489ee207b4cb340f7010d75c34bb0",
      "parents": [
        "1966133f8e82971f2e247a8579735a3b2f19301d"
      ],
      "author": {
        "name": "Rob Ward",
        "email": "robert.ward114@googlemail.com",
        "time": "Sun Feb 02 11:42:05 2014 +0000"
      },
      "committer": {
        "name": "Rob Ward",
        "email": "robert.ward114@googlemail.com",
        "time": "Tue Feb 11 18:19:04 2014 +0000"
      },
      "message": "Add error message for download -c conflicts\n\nCurrently if you run repo download -c on a change and the cherry-pick\nruns into a merge conflict a Traceback is produced:\n\nrob@rob-i5-lm ~/Programming/repo_test/repo1 $ repo download -c repo1 3/1\nFrom ssh://rob-i5-lm:29418/repo1\n * branch            refs/changes/03/3/1 -\u003e FETCH_HEAD\nerror: could not apply 0c8b474... 2\nhint: after resolving the conflicts, mark the corrected paths\nhint: with \u0027git add \u003cpaths\u003e\u0027 or \u0027git rm \u003cpaths\u003e\u0027\nhint: and commit the result with \u0027git commit\u0027\nTraceback (most recent call last):\n  File \"/home/rob/Programming/git-repo/main.py\", line 408, in \u003cmodule\u003e\n    _Main(sys.argv[1:])\n  File \"/home/rob/Programming/git-repo/main.py\", line 384, in _Main\n    result \u003d repo._Run(argv) or 0\n  File \"/home/rob/Programming/git-repo/main.py\", line 143, in _Run\n    result \u003d cmd.Execute(copts, cargs)\n  File \"/home/rob/Programming/git-repo/subcmds/download.py\", line 90, in Execute\n    project._CherryPick(dl.commit)\n  File \"/home/rob/Programming/git-repo/project.py\", line 1943, in _CherryPick\n    raise GitError(\u0027%s cherry-pick %s \u0027 % (self.name, rev))\nerror.GitError: repo1 cherry-pick 0c8b4740f876f8f8372bbaed430f02b6ba8b1898\n\nThis amount of error message is confusing to users and has the side effect\nof the git message telling you the actual issue being ignored.\n\nThis change introduces a message stating that the cherry-pick couldn\u0027t\nbe completed removing the Traceback.\n\nTo reproduce the issue create a change that causes a conflict with one currently\nin review and use repo download -c to cherry-pick the conflicting change.\n\nChange-Id: I8ddf4e0c8ad9bd04b1af5360313f67cc053f7d6a\n"
    },
    {
      "commit": "1966133f8e82971f2e247a8579735a3b2f19301d",
      "tree": "c136d423bef7583d2c096cee0fe33d46ff3eb67c",
      "parents": [
        "f1027e23b4e59e6d67899562bbd24d3d0d82a9fc",
        "2cd38a0bf83cc7c7cc5eb59dffc3d7868cf6d452"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Feb 10 22:42:30 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 10 22:42:31 2014 +0000"
      },
      "message": "Merge \"Stop appending \u0027p/\u0027 to review urls\""
    },
    {
      "commit": "f1027e23b4e59e6d67899562bbd24d3d0d82a9fc",
      "tree": "db0de3353de1a92af0c3439c4dd58302d58f6e01",
      "parents": [
        "1b46cc9b6d366a34a37dd475730574979ff9b739",
        "1242e60bdd250dd31f49a181dd326af96427f300"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Feb 05 00:58:52 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 05 00:58:53 2014 +0000"
      },
      "message": "Merge \"Implement Kerberos HTTP authentication handler\""
    },
    {
      "commit": "2cd38a0bf83cc7c7cc5eb59dffc3d7868cf6d452",
      "tree": "4f66b6832b19d1998d994fae2a65af1203e45477",
      "parents": [
        "1b46cc9b6d366a34a37dd475730574979ff9b739"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Feb 04 15:32:29 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Feb 04 15:32:29 2014 -0800"
      },
      "message": "Stop appending \u0027p/\u0027 to review urls\n\nGerrit no longer requires \u0027p/\u0027, and this causes unexpected behavior.\nIn this change we stop appending \u0027p/\u0027 to the urls.\n\nChange-Id: I72c13bf838f4112086141959fb1af249f9213ce6\n"
    },
    {
      "commit": "1b46cc9b6d366a34a37dd475730574979ff9b739",
      "tree": "45d1ba1152bd4cc49929bce9d05d8dd097442ca7",
      "parents": [
        "2d0f508648a1e7c073bc897b645a43ee37ff2a40",
        "143d8a72495a17f8f2454fffdcc4d2599709fec5"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Feb 04 21:19:07 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 04 21:19:07 2014 +0000"
      },
      "message": "Merge \"Changes to support sso: repositories for upload\""
    },
    {
      "commit": "1242e60bdd250dd31f49a181dd326af96427f300",
      "tree": "2763d80fb63960c934965606ea2e436e6cfd8777",
      "parents": [
        "5db69f3f6616ea199a7840f0602b988f8d5504b9"
      ],
      "author": {
        "name": "Carlos Aguado",
        "email": "caguadosa@gmail.com",
        "time": "Mon Feb 03 13:48:47 2014 +0100"
      },
      "committer": {
        "name": "Carlos Aguado",
        "email": "caguadosa@gmail.com",
        "time": "Tue Feb 04 09:22:42 2014 +0100"
      },
      "message": "Implement Kerberos HTTP authentication handler\n\nThis commit implements a Kerberos HTTP authentication handler. It\nuses credentials from a local cache to perform an HTTP authentication\nnegotiation using the GSSAPI.\n\nThe purpose of this handler is to allow the use Kerberos authentication\nto access review endpoints without the need to transmit the user\npassword.\n\nChange-Id: Id2c3fc91a58b15a3e83e4bd9ca87203fa3d647c8\n"
    },
    {
      "commit": "2d0f508648a1e7c073bc897b645a43ee37ff2a40",
      "tree": "3733b3c81b59e0bb5e3c93770233476f2ff2bb73",
      "parents": [
        "5db69f3f6616ea199a7840f0602b988f8d5504b9"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Jan 31 15:03:51 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Jan 31 16:06:31 2014 -0800"
      },
      "message": "Fix persistent-https relative url resolving\n\nPreviously, we would remove \u0027persistent-\u0027 then tack it on at the end\nif it had been previously found.  However, this would ignore urljoin\u0027s\ndecision on whether or not the second path was relative.  Instead, we\nwere always assuming it was relative and that we didn\u0027t want to use\na different absolute url with a different protocol.\n\nThis change handles persistent-https:// in the same way we handled the\nabsense of an explicit protocol.  The only difference is that this time\ninstead of temporarily replacing it with \u0027gopher://\u0027, we use \u0027wais://\u0027.\n\nChange-Id: I6e8ad1eb4b911931a991481717f1ade01315db2a\n"
    },
    {
      "commit": "143d8a72495a17f8f2454fffdcc4d2599709fec5",
      "tree": "275c993143ac9f8cc0f354be84f1cfbd49e37571",
      "parents": [
        "5db69f3f6616ea199a7840f0602b988f8d5504b9"
      ],
      "author": {
        "name": "Steve Pucci",
        "email": "spucci@google.com",
        "time": "Thu Jan 30 09:45:53 2014 -0800"
      },
      "committer": {
        "name": "Steve Pucci",
        "email": "spucci@google.com",
        "time": "Fri Jan 31 07:39:44 2014 -0800"
      },
      "message": "Changes to support sso: repositories for upload\n\nChange-Id: Iddf90d52f700a1f6462abe76d4f4a367ebb6d603\n"
    },
    {
      "commit": "5db69f3f6616ea199a7840f0602b988f8d5504b9",
      "tree": "cdf4cacdba2b88edc5605161cba4db2903e4d719",
      "parents": [
        "ff0a3c8f80339960623acf76ec2bb6c1ad61c352"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 16:00:35 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 16:00:35 2014 -0800"
      },
      "message": "Update the version number on the repo launcher\n\nThe repo launcher version needs to be updated so some users can take\nadvantage of the more robust version number parsing.\n\nChange-Id: Ibcd8036363311528db82db2b252357ffd21eb59b\n"
    },
    {
      "commit": "ff0a3c8f80339960623acf76ec2bb6c1ad61c352",
      "tree": "da428ef023417f9716f6aa6ce980a7777ed1d78c",
      "parents": [
        "094cdbe090a18c35fdcfb463435d793cc0239e83"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 14:46:03 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 15:18:56 2014 -0800"
      },
      "message": "Share git version parsing code with wrapper module\n\n\u0027repo\u0027 and \u0027git_command.py\u0027 had their own git version parsing code.\nThis change shares that code between the modules.  DRY is good.\n\nChange-Id: Ic896d2dc08353644bd4ced57e15a91284d97d54a\n"
    },
    {
      "commit": "094cdbe090a18c35fdcfb463435d793cc0239e83",
      "tree": "e664b3febe4d8da1161b9e8e8ecc3a825b42aaa1",
      "parents": [
        "148a84de0ca7f828564f80cbe2bace33f295e65f"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 15:09:59 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 15:17:09 2014 -0800"
      },
      "message": "Add wrapper module\n\nThis takes the wrapper importing code from main.py and moves it into\nits own module so that other modules may import it without causing\ncircular imports with main.py.\n\nChange-Id: I9402950573933ed6f14ce0bfb600f74f32727705\n"
    },
    {
      "commit": "148a84de0ca7f828564f80cbe2bace33f295e65f",
      "tree": "26d6a66127019a80a952f2d5b0574d59a8c71be3",
      "parents": [
        "1c5da49e6c0c2dd6a5f0ba6e5b57ecb783c27eea"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 13:53:55 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 13:53:55 2014 -0800"
      },
      "message": "Respect version hyphenation\n\nThe last change regarding version parsing lost handling of version\nhyphenation, this restores that.  In otherwords,\n1.1.1-otherstuff is parsed as (1,1,1) instead of (1,1,0)\n\nChange-Id: I3753944e92095606653835ed2bd090b9301c7194\n"
    },
    {
      "commit": "1c5da49e6c0c2dd6a5f0ba6e5b57ecb783c27eea",
      "tree": "e2969c9777a1bf3227c1a49165eb1b16cb55eff8",
      "parents": [
        "b8433dfd2f078617b724e4dc4f709330cc90f1e7"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 13:09:08 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 30 13:26:50 2014 -0800"
      },
      "message": "Handle release candidates in git version parsing\n\nRight now repo chokes on git versions like \"1.9.rc1\".  This change\ntreats \u0027rc*\u0027 as a \u00270\u0027.\n\nChange-Id: I612b7b431675ba7415bf70640a673e48dbb00a90\n"
    },
    {
      "commit": "b8433dfd2f078617b724e4dc4f709330cc90f1e7",
      "tree": "8fe84460fcde55ed6d37d54d3ffab3116263134b",
      "parents": [
        "f2fe2d9b865f0122589d329d356644a80233c770"
      ],
      "author": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Thu Jan 30 10:11:17 2014 -0800"
      },
      "committer": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Thu Jan 30 10:14:54 2014 -0800"
      },
      "message": "repo: Fix \u0027remove-project\u0027 regression with multiple projects.\n\nIn CL:50715, I updated repo to handle multiple projects, but the\nremove-projects code path was not updated accordingly. Update it.\n\nChange-Id: Icd681d45ce857467b584bca0d2fdcbf24ec6e8db\n"
    },
    {
      "commit": "f2fe2d9b865f0122589d329d356644a80233c770",
      "tree": "5c111489118204fbef44bf065b854e84ded390dc",
      "parents": [
        "c9877c7cf677bc3db18e9003271dfd72383aa9f7"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jan 29 13:53:43 2014 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jan 29 13:57:22 2014 -0800"
      },
      "message": "Properly iterate through values\n\nthe value of Manifest.projects has changed from being the dictionary\nto the values of the dictionary.  Here we handle this change\ncorrectly on a PostRepoUpgrade.\n\nFrom a `git diff v1.12.7 -- manifest_xml.py`:\n+  @property\n   def projects(self):\n     self._Load()\n-    return self._projects\n+    return self._paths.values()\n\nself._paths does contain the projects according to this line of\nmanifest_xml.py:\n484      self._paths[project.relpath] \u003d project\n\nChange-Id: I141f8d5468ee10dfb08f99ba434004a307fed810\n"
    },
    {
      "commit": "c9877c7cf677bc3db18e9003271dfd72383aa9f7",
      "tree": "2fe37c556e7c92d8e7a0809ad3ec3a8242e3b750",
      "parents": [
        "f1f1137d619dfffe23fd15b8754d067fe1e353b8",
        "69e04d89538e4a253efe7d9f4fd1f1ae70f8f62c"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jan 29 21:12:33 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 29 21:12:34 2014 +0000"
      },
      "message": "Merge \"Only fetch current branch on shallow clients\""
    },
    {
      "commit": "69e04d89538e4a253efe7d9f4fd1f1ae70f8f62c",
      "tree": "c6149053b8bf088bd751eee7118568cc64103e97",
      "parents": [
        "12fd10c20115046dcd2fbe468a45e566f38ffbc9"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Wed Jan 29 12:48:54 2014 -0800"
      },
      "committer": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Wed Jan 29 12:48:54 2014 -0800"
      },
      "message": "Only fetch current branch on shallow clients\n\nFetching a new branch on a shallow client may download the entire\nproject history, as the depth parameter is not passed to git\nfetch. Force the fetch to only download the current branch.\n\nChange-Id: Ie17ce8eb5e3487c24d90b2cae8227319dea482c8\n"
    },
    {
      "commit": "f1f1137d619dfffe23fd15b8754d067fe1e353b8",
      "tree": "60f10a782ac29a83c64f71ce41db9baa9d1d93d6",
      "parents": [
        "f77ef2edb097280d39b420655bcc465bfb73de3c",
        "011d4f426c21a745387e62e6d67ddd73cd6ef44e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Jan 14 00:41:35 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 14 00:41:35 2014 +0000"
      },
      "message": "Merge \"Don\u0027t backtrace when current branch is not uploadable.\""
    },
    {
      "commit": "f77ef2edb097280d39b420655bcc465bfb73de3c",
      "tree": "04286247ef05e980095dfd3c05ee467c3ddb3dda",
      "parents": [
        "e695338e21080d3cbe20935db572e4cd0c7a620c",
        "719757d6a8670660c3c7d2490457ff7064241422"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Jan 10 02:50:52 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 10 02:50:53 2014 +0000"
      },
      "message": "Merge \"hooks/pre-auto-gc: fix AC detection on OSX Maverick\""
    },
    {
      "commit": "e695338e21080d3cbe20935db572e4cd0c7a620c",
      "tree": "cc525f53929fa4ea24f108d24545c68c7c6cb5ba",
      "parents": [
        "bd80f7eedd5a74f6c5fad745091dcda53a6415bf",
        "8d20116038ff78b22069dd4e993b5819775f03d1"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Jan 10 01:20:12 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 10 01:20:13 2014 +0000"
      },
      "message": "Merge \"repo: Support multiple branches for the same project.\""
    },
    {
      "commit": "bd80f7eedd5a74f6c5fad745091dcda53a6415bf",
      "tree": "102f5d2113a84288ca86cbda42473af32f70b3e1",
      "parents": [
        "bf79c6618e4f51467e1d8e73915a541df660a060",
        "672cc499b9dce9c18ecd9dfc81fd18094535dc49"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 09 02:11:09 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 09 02:11:10 2014 +0000"
      },
      "message": "Merge \"Canonicalize project hooks path before use\""
    },
    {
      "commit": "bf79c6618e4f51467e1d8e73915a541df660a060",
      "tree": "0a27f673b1bccdd9fac1478e078dedd4a629aa7a",
      "parents": [
        "f045d49a71b64b854589c8821d8bf220c6ed9fd3"
      ],
      "author": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Thu Dec 26 14:20:13 2013 -0800"
      },
      "committer": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Thu Dec 26 14:59:00 2013 -0800"
      },
      "message": "Fix os.mkdir race condition.\n\nThis code checks whether a dir exists before creating it. In between the\ncheck and the mkdir call, it is possible that another process will have\ncreated the directory. We have seen this bug occur many times in\npractice during our \u0027repo init\u0027 tests.\n\nChange-Id: Ia47d39955739aa38fd303f4e90be7b4c50d9d4ba\n"
    },
    {
      "commit": "f045d49a71b64b854589c8821d8bf220c6ed9fd3",
      "tree": "b4facc31b41327b5478b12e9213b4f4179ebb171",
      "parents": [
        "53d6a7b8955e9377cc0a12206be357e7936621b1",
        "335f5ef4ad25a85c69fe6d8c848c5d1d447e22c8"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Dec 18 17:44:58 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 18 17:44:59 2013 +0000"
      },
      "message": "Merge \"Add --archive option to init to sync using git archive\""
    },
    {
      "commit": "719757d6a8670660c3c7d2490457ff7064241422",
      "tree": "0b8eb0af9d5e096ecfb2487a133dedd86015a2d1",
      "parents": [
        "53d6a7b8955e9377cc0a12206be357e7936621b1"
      ],
      "author": {
        "name": "Pawit Pornkitprasan",
        "email": "p.pawit@gmail.com",
        "time": "Tue Dec 17 09:43:27 2013 +0700"
      },
      "committer": {
        "name": "Pawit Pornkitprasan",
        "email": "p.pawit@gmail.com",
        "time": "Tue Dec 17 09:48:20 2013 +0700"
      },
      "message": "hooks/pre-auto-gc: fix AC detection on OSX Maverick\n\nThe output of pmset has been changed to \"Now drawing from \u0027AC Power\u0027\"\n\nChange-Id: Id425d3bcd6a28656736a6d2c3096623a3ec053cc\n"
    },
    {
      "commit": "011d4f426c21a745387e62e6d67ddd73cd6ef44e",
      "tree": "a2f54bbc268e84c7207f1aa87110c7db1c8a548d",
      "parents": [
        "53d6a7b8955e9377cc0a12206be357e7936621b1"
      ],
      "author": {
        "name": "Warren Turkal",
        "email": "wt@ooyala.com",
        "time": "Wed Nov 27 16:20:57 2013 -0800"
      },
      "committer": {
        "name": "Warren Turkal",
        "email": "wt@ooyala.com",
        "time": "Wed Dec 11 23:24:01 2013 -0800"
      },
      "message": "Don\u0027t backtrace when current branch is not uploadable.\n\nThe backtrace currently occurs when one uses the \"--cbr\" argument with\nthe repo upload subcommand if the current branch is not tracking an\nupstream branch. There may be other cases that would backtrace as well,\nbut this is the only one I found so far.\n\nChange-Id: Ie712fbb0ce3e7fe3b72769fca89cc4c0e3d2fce0\n"
    },
    {
      "commit": "53d6a7b8955e9377cc0a12206be357e7936621b1",
      "tree": "1a7728eff318e82dd3dd3f06c6d927712fc789e5",
      "parents": [
        "61df418c599a0359b33b8a65a12660023fc37a2a"
      ],
      "author": {
        "name": "Warren Turkal",
        "email": "wt@ooyala.com",
        "time": "Tue Dec 10 15:30:03 2013 -0800"
      },
      "committer": {
        "name": "Warren Turkal",
        "email": "wt@ooyala.com",
        "time": "Tue Dec 10 15:30:03 2013 -0800"
      },
      "message": "Fix error in xml manifest doc.\n\nThe docs on the annotations say that zero or more may exist as a child\nof a project, so that means that a \"*\" instead of a \"?\" should be used.\n\nChange-Id: Iff855d003dfb05cd980f285a237332914e1dad70\n"
    },
    {
      "commit": "335f5ef4ad25a85c69fe6d8c848c5d1d447e22c8",
      "tree": "6a64a34ce5063d8d255c7840e167db2484e68c9a",
      "parents": [
        "61df418c599a0359b33b8a65a12660023fc37a2a"
      ],
      "author": {
        "name": "Julien Campergue",
        "email": "julien.campergue@parrot.com",
        "time": "Wed Oct 16 11:02:35 2013 +0200"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Dec 10 08:27:07 2013 +0000"
      },
      "message": "Add --archive option to init to sync using git archive\n\nThis significantly reduces sync time and used brandwidth as only\na tar of each project\u0027s revision is checked out, but git is not\naccessible from projects anymore.\n\nThis is relevant when git is not needed in projects but sync\nspeed/brandwidth may be important like on CI servers when building\nseveral versions from scratch regularly for example.\n\nArchive is not supported over http/https.\n\nChange-Id: I48c3c7de2cd5a1faec33e295fcdafbc7807d0e4d\nSigned-off-by: Julien Campergue \u003cjulien.campergue@parrot.com\u003e\n"
    },
    {
      "commit": "672cc499b9dce9c18ecd9dfc81fd18094535dc49",
      "tree": "fabd598df21d7062baec16bf66a1fca505a968f7",
      "parents": [
        "4534120628a8e3a7f82063757bbcb02107dd14d8"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Wed Nov 27 11:17:13 2013 -0800"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Tue Dec 03 09:02:16 2013 -0800"
      },
      "message": "Canonicalize project hooks path before use\n\nIf the top-level .repo directory is moved somewhere else (e.g. a\ndifferent drive) and replaced with a symlink, _InitHooks() will create\nbroken symlinks. Resolving symlinks before computing the relative path\nfor the symlink keeps the path within the repo tree, so the tree can\nbe moved anywhere.\n\nChange-Id: Ifa5c07869e3477186ddd2c255c6c607f547bc1fe\n"
    },
    {
      "commit": "61df418c599a0359b33b8a65a12660023fc37a2a",
      "tree": "854d4d6d52d50ed765c11eca281e74b5b1a8d3b8",
      "parents": [
        "4534120628a8e3a7f82063757bbcb02107dd14d8"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Nov 29 19:17:23 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Nov 29 19:17:23 2013 +0900"
      },
      "message": "Update the commit-msg hook to the version from Gerrit 2.6\n\nChange-Id: Iaf21ba8d2ceea58973dbc56f0b4ece54500cd997\n"
    },
    {
      "commit": "4534120628a8e3a7f82063757bbcb02107dd14d8",
      "tree": "00a2db8cd8e57988a060ef76b0e5ceac54ab8709",
      "parents": [
        "cbc0798f67b56b96f2bb6eac701b019d9bfd5e19",
        "5d6cb80b8fb67f287c2f2401c55b340b3ac2fd93"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Nov 22 10:25:34 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 22 10:25:35 2013 +0000"
      },
      "message": "Merge \"Allow using repo with python3\""
    },
    {
      "commit": "cbc0798f67b56b96f2bb6eac701b019d9bfd5e19",
      "tree": "eab6ab897c7a87ae493767830d5de8d5354f65e1",
      "parents": [
        "d5a5b19efd2291914bcb861d527ae74e620a9d37"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Nov 21 10:38:03 2013 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Nov 21 10:38:03 2013 -0800"
      },
      "message": "Fix print of git-remote-persistent-https error\n\nIf git-remote-persistent-https fails, we use an iter() and then\nsubsequently a .read() on stderr.  Python doesn\u0027t like this and\ngives the following error message:\nValueError: Mixing iteration and read methods would lose data\n\nThis change removes the use of iter() to avoid the issue.\n\nChange-Id: I980659b83229e2a559c20dcc7b116f8d2476abd5\n"
    },
    {
      "commit": "d5a5b19efd2291914bcb861d527ae74e620a9d37",
      "tree": "9a1f10516792d6973449cab97f1f28ccfd655e7a",
      "parents": [
        "0eb35cbe5096128e4a760aca6842ecdbea5baf1a"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Thu Nov 21 19:15:30 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Thu Nov 21 19:16:08 2013 +0530"
      },
      "message": "Remove trailing whitespace\n\nChange-Id: I56bcb559431277d40070fa33c580c6c3525ff9bc\n"
    },
    {
      "commit": "5d6cb80b8fb67f287c2f2401c55b340b3ac2fd93",
      "tree": "e14009287b8cf5612beb2076ebfbb747ec42b52f",
      "parents": [
        "0eb35cbe5096128e4a760aca6842ecdbea5baf1a"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Thu Nov 21 13:42:39 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Thu Nov 21 18:44:52 2013 +0530"
      },
      "message": "Allow using repo with python3\n\n* Switching from python2 to python3 in the same workspace isn\u0027t\n  currently supported, due to a change in the pickle version (which\n  isn\u0027t supported by python2)\n* Basic functionality does work with python3, however not everything\n  is expected to\n\nChange-Id: I4256b5a9861562d0260b503f972c1569190182aa\n"
    },
    {
      "commit": "0eb35cbe5096128e4a760aca6842ecdbea5baf1a",
      "tree": "6134f979145140346b3eeeacfd12cbd6572f32d3",
      "parents": [
        "ce201a5311c2fe90dce479ee12c078cd26ccc0c4"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Nov 19 18:46:29 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "chirayudesai1@gmail.com",
        "time": "Thu Nov 21 06:03:22 2013 +0000"
      },
      "message": "Fix some python3 encoding issues\n\n* Add .decode(\u0027utf-8\u0027) where needed\n* Add \u0027b\u0027 to `open` where needed, and remove where unnecessary\n\nChange-Id: I0f03ecf9ed1a78e3b2f15f9469deb9aaab698657"
    },
    {
      "commit": "ce201a5311c2fe90dce479ee12c078cd26ccc0c4",
      "tree": "df5cde7fb813c47ff5c488d62fce1e92900db871",
      "parents": [
        "12fd10c20115046dcd2fbe468a45e566f38ffbc9"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Oct 16 14:42:42 2013 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Oct 16 14:42:42 2013 -0700"
      },
      "message": "Fix a small whitespace consistency issue\n\nChange-Id: Ie98c79833ca5e7ef71666489135f7491223f779c\n"
    },
    {
      "commit": "12fd10c20115046dcd2fbe468a45e566f38ffbc9",
      "tree": "071b7878cdcf5ff17b094c8158cf0654efbba1fd",
      "parents": [
        "fbd3f2a10bf4ddd1f001543c6262c6866a84f0a1",
        "a17d7af4d9dd9165935a26a9971faed2c05bc278"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Oct 16 21:41:33 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 16 21:41:33 2013 +0000"
      },
      "message": "Merge \"Dan\u0027t accessing attr of None (`manifest` subcmd)\""
    },
    {
      "commit": "a17d7af4d9dd9165935a26a9971faed2c05bc278",
      "tree": "0ce989ff6a876bf78100f00bbf0ed9d6f1e1830e",
      "parents": [
        "37128b6f709410763f85d112a1a3e6f9e42e1338"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Oct 16 14:38:09 2013 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Oct 16 14:38:09 2013 -0700"
      },
      "message": "Dan\u0027t accessing attr of None (`manifest` subcmd)\n\nIf d.remote is None, this code failed for obvious reasons.  This is a\nsimple fix.\n\nChange-Id: I413756121e444111f1e3c7dc8bc8032467946c13\n"
    },
    {
      "commit": "fbd3f2a10bf4ddd1f001543c6262c6866a84f0a1",
      "tree": "998e83b44047d48430711b3a918905a2b04dd45b",
      "parents": [
        "37128b6f709410763f85d112a1a3e6f9e42e1338"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 15 12:59:00 2013 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 15 12:59:00 2013 -0700"
      },
      "message": "Only check merge destination if it isn\u0027t None\n\nChange-Id: Ifb1dcd07142933489e93a1f4f03e38289087b609\n"
    },
    {
      "commit": "37128b6f709410763f85d112a1a3e6f9e42e1338",
      "tree": "b87eceeed61ef08a77e6ded4989ad46cff2ce0b0",
      "parents": [
        "143b4cc992b3602b56f1904c4a030a933b01ccc1"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Oct 15 10:48:40 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Oct 15 10:48:40 2013 +0900"
      },
      "message": "Fix indentation\n\ngit-repo uses 2 space indentation.  A couple of recent changes\nintroduced 4 space indentation in some modules.\n\nChange-Id: Ia4250157c1824c1b5e7d555068c4608f995be9da\n"
    },
    {
      "commit": "143b4cc992b3602b56f1904c4a030a933b01ccc1",
      "tree": "7f2835fb313998e33394aad72dbe05b72a4204b7",
      "parents": [
        "53263d873d16220d3b77302dc98cc35c4a5558ef",
        "7487992bd33d5cbf314d234c13a085c56200b33e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Oct 15 01:40:07 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 15 01:40:08 2013 +0000"
      },
      "message": "Merge \"Better handling of duplicate default\""
    },
    {
      "commit": "8d20116038ff78b22069dd4e993b5819775f03d1",
      "tree": "4c7ec381f2452d3ae4ed5332230a8d7a61e6ec2b",
      "parents": [
        "b25ea555c39cd500740acb74fa9f1dab71588266"
      ],
      "author": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Fri Oct 11 17:03:19 2013 -0700"
      },
      "committer": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Mon Oct 14 15:34:32 2013 -0700"
      },
      "message": "repo: Support multiple branches for the same project.\n\nIt is often useful to be able to include the same project more than\nonce, but with different branches and placed in different paths in the\nworkspace. Add this feature.\n\nThis CL adds the concept of an object directory. The object directory\nstores objects that can be shared amongst several working trees. For\nnewly synced repositories, we set up the git repo now to share its\nobjects with an object repo.\n\nEach worktree for a given repo shares objects, but has an independent\nset of references and branches. This ensures that repo only has to\nupdate the objects once; however the references for each worktree are\nupdated separately. Storing the references separately is needed to\nensure that commits to a branch on one worktree will not change the\nHEAD commits of the others.\n\nOne nice side effect of sharing objects between different worktrees is\nthat you can easily cherry-pick changes between the two worktrees\nwithout needing to fetch them.\n\nBug: Issue 141\nChange-Id: I5e2f4e1a7abb56f9d3f310fa6fd0c17019330ecd\n"
    },
    {
      "commit": "53263d873d16220d3b77302dc98cc35c4a5558ef",
      "tree": "7391f540301bdc112ae88f04cfe49a3f378f274d",
      "parents": [
        "b25ea555c39cd500740acb74fa9f1dab71588266",
        "3a2a59eb87b58a4b5a26349434db322846cb6b57"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 10 18:42:59 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 10 18:42:59 2013 +0000"
      },
      "message": "Merge \"repo: use explicit Python executable to run main.py\""
    },
    {
      "commit": "7487992bd33d5cbf314d234c13a085c56200b33e",
      "tree": "51cace1031fb93f10ae6fe2c7dc0bc4e897539ab",
      "parents": [
        "e76efdd7b342577c40aa271fa5ded9d66a783a9b"
      ],
      "author": {
        "name": "Julien Campergue",
        "email": "julien.campergue@parrot.com",
        "time": "Wed Oct 09 14:38:46 2013 +0200"
      },
      "committer": {
        "name": "Julien Campergue",
        "email": "julien.campergue@parrot.com",
        "time": "Thu Oct 10 18:14:27 2013 +0200"
      },
      "message": "Better handling of duplicate default\n\nCurrently, an error is raised if more than one default is defined.\n\nWhen including another manifest, it is likely that a default has\nbeen defined in both manifests.\n\nDon\u0027t raise an error if all the defaults defined have the same\nattributes.\n\nChange-Id: I2603020687e2ba04c2c62c3268ee375279b34a08\nSigned-off-by: Julien Campergue \u003cjulien.campergue@parrot.com\u003e\n"
    },
    {
      "commit": "b25ea555c39cd500740acb74fa9f1dab71588266",
      "tree": "582f1552132c86f08b8934d81b59a8d743619cd7",
      "parents": [
        "3bfd72158c11583213037ddfe5224c2038288383",
        "1e7ab2a63f7ec53aa649015dff8d46ad2501d993"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 10 16:08:42 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 10 16:08:42 2013 +0000"
      },
      "message": "Merge \"Respect remote aliases\""
    },
    {
      "commit": "3bfd72158c11583213037ddfe5224c2038288383",
      "tree": "7065b7e5d905aac5e1474c2b2069629a0d52c86e",
      "parents": [
        "59b31cb6e02b68450f2a5f96bdeffc2a7452d98c"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Sep 30 15:54:38 2013 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 10 09:06:38 2013 -0700"
      },
      "message": "Don\u0027t upload when dest branch is not merge branch\n\nExample:\n- `repo init -b master` / sync a project\n- In one project: `git checkout -b work origin/branch-thats-not-master`\n- make some changes, `git commit`\n- `repo upload .`\n- Upload will now be skipped with a warning instead of being uploaded to\n  master\n\nChange-Id: I990b36217b75fe3c8b4d776e7fefa1c7d9ab7282\n"
    },
    {
      "commit": "59b31cb6e02b68450f2a5f96bdeffc2a7452d98c",
      "tree": "fa64d25f4b75ac03909a0fc90dddcc4d232c6627",
      "parents": [
        "e76efdd7b342577c40aa271fa5ded9d66a783a9b"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Oct 08 23:10:52 2013 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Oct 08 23:14:29 2013 -0700"
      },
      "message": "don\u0027t pass project revision to UploadForReview\n\nPassing a project revisionExpr to UploadForReview will cause it to\ntry to push to refs/for/\u003csha\u003e if the revision points to a sha\ninstead of a branch.  Pass None for dest_branch if no destination\nbranch has been specified, which will cause UploadForReview to\nupload to the merge branch.\n\nThere is room for further improvement, the user prompts will\nstill print \"Upload project \u003cproject\u003e to remote branch \u003csha\u003e\",\nand then upload to the merge branch and not the sha, but that\nis the same behavior that was in 1.12.2.\n\nChange-Id: I06c510336ae67ff7e68b5b69e929693179d15c0b\n"
    },
    {
      "commit": "1e7ab2a63f7ec53aa649015dff8d46ad2501d993",
      "tree": "511ced99493616dc55231a95885f670407becd3a",
      "parents": [
        "e76efdd7b342577c40aa271fa5ded9d66a783a9b"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 08 17:26:57 2013 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 08 17:26:57 2013 -0700"
      },
      "message": "Respect remote aliases\n\nPreviously, change I7150e449341ed8655d398956a095261978d95870\nhad broken alias support in order to fix the manifest command to keep\nit from spitting projects that point to an alias that wasn\u0027t recorded.\nThis commit reverts that commit and instead solves the issue more\ncorrectly, outputting the alias in the remote node of the manifest and\nrespecting that alias when outputting the list of projects.\n\nChange-Id: I941fc4adb7121d2e61cedc5838e80d3918c977c3\n"
    },
    {
      "commit": "e76efdd7b342577c40aa271fa5ded9d66a783a9b",
      "tree": "0dbd051a05bd41dabe8ad110d14f7e4f7a62f9dc",
      "parents": [
        "730ce4c3c2128b489176513253c1f30b378c694c",
        "edd0151a2682bac1dfd27aae1f66e58d40dcf0a8"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Sep 27 17:28:44 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 27 17:28:45 2013 +0000"
      },
      "message": "Merge \"Accept all UTF-8 committer names\""
    },
    {
      "commit": "730ce4c3c2128b489176513253c1f30b378c694c",
      "tree": "05a4bb374c18199cbe5a0d2f4f24644a21a332fc",
      "parents": [
        "745a39ba3dca7699ac057887e79deeb47e2bf8a5",
        "5e0ee145759b4a197bea347ad77e1ad1609efd32"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Sep 27 17:28:07 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 27 17:28:08 2013 +0000"
      },
      "message": "Merge \"Do not use print_function from __future__\""
    },
    {
      "commit": "745a39ba3dca7699ac057887e79deeb47e2bf8a5",
      "tree": "03681b89e5e20230249468002e208622eb92a02e",
      "parents": [
        "efc986c5081fc9a504b698672d955300a99f24bb"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jun 05 13:16:18 2013 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Sep 27 19:15:34 2013 +0900"
      },
      "message": "Assume http upload if ssh_info cannot be parsed\n\nWhen uploading a change for review, we sometimes request /ssh_info to\nget the correct port number for uploading via ssh (regardless of\nwhether or not we intend to upload over ssh).\n\nIf we have trouble accessing /ssh_info (for authentication reasons,\netc), we now press on under the assumption that we will upload via http\ninstead of aborting.\n\nChange-Id: Ica6bbeac1279e89424a903529649b7f4af0b6937\n"
    },
    {
      "commit": "efc986c5081fc9a504b698672d955300a99f24bb",
      "tree": "8aa6ca5b14668fac22bdbc0230fc092ca2f6d71a",
      "parents": [
        "70df18944a667329ec894a1df1e77381c5b0c09a",
        "351fe2c793437e1d8a0b222f8478c74cf60ae034"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Sep 27 02:24:39 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 27 02:24:39 2013 +0000"
      },
      "message": "Merge changes I4b77af22,Ib5bc2de5\n\n* changes:\n  Sync: Improved error message when manifest server RPC call fails\n  Sync: Print name of manifest server used for smart sync/smart tag\n"
    },
    {
      "commit": "edd0151a2682bac1dfd27aae1f66e58d40dcf0a8",
      "tree": "222d256eed627946f07faf185db20d705cb8a790",
      "parents": [
        "70df18944a667329ec894a1df1e77381c5b0c09a"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Sep 26 12:59:58 2013 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Sep 27 00:35:35 2013 +0000"
      },
      "message": "Accept all UTF-8 committer names\n\nChange-Id: I7d9d49a8bacf2dc332614d26cdfcc905be7a5290\n"
    },
    {
      "commit": "5e0ee145759b4a197bea347ad77e1ad1609efd32",
      "tree": "d02a14fc378797d50140fb80f22c6e0e88d5544c",
      "parents": [
        "70df18944a667329ec894a1df1e77381c5b0c09a"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Sep 26 15:50:49 2013 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Sep 27 09:32:02 2013 +0900"
      },
      "message": "Do not use print_function from __future__\n\nPython 2.4 and 2.5 do not have a print_function available, so we need a\ncompatible print function for displaying an error message when the user\nhas an older version of Python.\n\nChange-Id: I54d7297be98bb53970e873b36c6605e6dad386c3\n"
    },
    {
      "commit": "70df18944a667329ec894a1df1e77381c5b0c09a",
      "tree": "faff1670b73fb87ec417f79ff0cf2309274bb23e",
      "parents": [
        "b6a16e6390b12b019a7e5e297639e41310375c93",
        "0836a22d38f4fa29d3cbc543fcd7a42813ec052d"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Sep 26 16:30:01 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 26 16:30:02 2013 +0000"
      },
      "message": "Merge \"Wait for git-remote-persistent-https -print_config to exit\""
    },
    {
      "commit": "0836a22d38f4fa29d3cbc543fcd7a42813ec052d",
      "tree": "c7baceadf54c9021ccc729180fab8c41b49990eb",
      "parents": [
        "bc0308478bc98d9b14d0b8f79ad030f474adcc6f"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Sep 25 17:46:01 2013 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Sep 25 17:46:01 2013 -0700"
      },
      "message": "Wait for git-remote-persistent-https -print_config to exit\n\nChange-Id: I5ab96e7c8575682217d440ddc52ecfdc8c35f179\n"
    },
    {
      "commit": "b6a16e6390b12b019a7e5e297639e41310375c93",
      "tree": "1b792452702a63627789129637d00b47d888b32d",
      "parents": [
        "bc0308478bc98d9b14d0b8f79ad030f474adcc6f"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Sep 25 15:06:09 2013 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Sep 25 15:07:22 2013 -0700"
      },
      "message": "Give the node _Default class a destBranchExpr\n\nThis is to avoid the following AttributeError:\n\nline 681, in _ParseProject\nAttributeError: \u0027_Default\u0027 object has no attribute \u0027destBranchExpr\u0027\n\nChange-Id: Ia9f7e2cce1409d22d71bc8a74b33edf2b27702ca\n"
    },
    {
      "commit": "351fe2c793437e1d8a0b222f8478c74cf60ae034",
      "tree": "9eb3b9ada1de282765919e083c49f06295a42f30",
      "parents": [
        "fb99c719390196e35c27f30f875c1b796c307585"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Sep 25 17:54:26 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Sep 25 19:12:13 2013 +0900"
      },
      "message": "Sync: Improved error message when manifest server RPC call fails\n\nWhen the RPC call fails, the error message returned by the server\nis printed, but it is not obvious that this is caused by RPC call\nfailure.\n\nPrefix the error message with a descriptive message that explains\nwhat went wrong.\n\nChange-Id: I4b77af22aacc2e9843c4df9d06bf54e41d9692ff\n"
    },
    {
      "commit": "fb99c719390196e35c27f30f875c1b796c307585",
      "tree": "2dbe72ac9fed4f4b2376e029c6268993d5f74a8c",
      "parents": [
        "bc0308478bc98d9b14d0b8f79ad030f474adcc6f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Sep 25 11:09:34 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Sep 25 19:12:06 2013 +0900"
      },
      "message": "Sync: Print name of manifest server used for smart sync/smart tag\n\nWhen syncing using smart sync or smart tag mode, print the url of\nthe manifest server that is being used.\n\nThis is useful in organisations that have multiple manifest servers\nused in different manifest branches.\n\nChange-Id: Ib5bc2de5af6f4a942d0ef735c65cbc0721059a61\n"
    },
    {
      "commit": "3a2a59eb87b58a4b5a26349434db322846cb6b57",
      "tree": "cb8da8261bd7efe57a00c2488fc9ece582062b9c",
      "parents": [
        "45d21685b93f80b67239849b2d2cfe6b217e335a"
      ],
      "author": {
        "name": "anatoly techtonik",
        "email": "techtonik@gmail.com",
        "time": "Sat Sep 21 19:29:10 2013 +0300"
      },
      "committer": {
        "name": "anatoly techtonik",
        "email": "techtonik@gmail.com",
        "time": "Sat Sep 21 20:03:57 2013 +0300"
      },
      "message": "repo: use explicit Python executable to run main.py\n\nSmall step to support non-POSIX platforms.\n\nChange-Id: I3bdb9c82c2dfbacb1da328caaa1a406ab91ad675\n"
    },
    {
      "commit": "bc0308478bc98d9b14d0b8f79ad030f474adcc6f",
      "tree": "d9f79e138ab9e4ec19282ebfa11f20ea8ecdc854",
      "parents": [
        "610d3c4e46471c8db555026969bb3e2eb75102f0"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Jul 01 11:05:32 2013 -0700"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Jul 01 11:22:01 2013 -0700"
      },
      "message": "Update gpg key for cco3@android.com\n\ncco3@android.com has a new gpg key, so this needs to be updated in the\nrepo scripts so that he can sign updates.\n\nChange-Id: I9f058263b35bd027502d6e3b814d7aeb801a1e6e\n"
    },
    {
      "commit": "610d3c4e46471c8db555026969bb3e2eb75102f0",
      "tree": "379579d96906f0f71538defffa24a0d28b72b189",
      "parents": [
        "033a7e91de4e15c7da96f4ab21454c5f6e3b2fb6"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Mon Jun 24 14:02:12 2013 +0530"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Jun 28 00:29:11 2013 +0000"
      },
      "message": "upload: fix display of destination branch for SingleBranch\n\nThe command `repo upload --cbr -D \u003csome branch\u003e` will display\nthe default revision, and not the actual destination branch.\n\nFix that and display the branch to which the change will be\nuploaded to.\n\nChange-Id: I712ed0871c819dce6774c47254dac4efec4532e0\n"
    },
    {
      "commit": "033a7e91de4e15c7da96f4ab21454c5f6e3b2fb6",
      "tree": "24ce7b17792615dff6a2cf8546448a88ab9d1d21",
      "parents": [
        "854f2b6ef4f9ea1c304b2e77d552b930b28e7053"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Thu Jun 13 21:14:48 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Thu Jun 13 21:14:48 2013 +0530"
      },
      "message": "DownloadPatchSet: fetch the change only, and nothing else.\n\n* Previously, it would run `git fetch \u003cremote.name\u003e \u003cchange refspec\u003e\n  \u003cremote.fetch\u003e, which would fetch all the branches, even if \u0027sync-c\u0027\n  was set to true in the manifest.\n* Fix that, since all it needs to fetch is the change that was asked\n  for, and nothing else.\n* For some more info, refer to the discussion on:\n  I42a9d419b51f5da03f20a640ea68993cda4b6500\n\nChange-Id: Ibc801695d56fc16e56f999e0f61393f54461785f\n"
    },
    {
      "commit": "854f2b6ef4f9ea1c304b2e77d552b930b28e7053",
      "tree": "17c26004548ed39b2cfee350a63fe283148b445a",
      "parents": [
        "db2ad9dfce438dae14fed0a62b37f0028ee98ad1",
        "a892b1006b5b7193262f3783b9678e2c76978a9b"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Jun 11 13:58:47 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 11 13:58:47 2013 +0000"
      },
      "message": "Merge \"sync: assign manifest_name earlier\""
    },
    {
      "commit": "a892b1006b5b7193262f3783b9678e2c76978a9b",
      "tree": "b5834be69d2578788a314e269f684bc86d8d8e6b",
      "parents": [
        "ef668c92c2c87c45df02bf1609a89e4479bbb30c"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Jun 11 14:18:46 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Jun 11 14:18:58 2013 +0530"
      },
      "message": "sync: assign manifest_name earlier\n\n* manifest_name was never set if opt.smart_sync or opt.smart_tag is used.\n* Set it earlier, so that the code handles it correctly when it is None.\n* An UnboundLocalError is raised if running `repo sync` without any options:\n  local variable \u0027manifest_name\u0027 referenced before assignment\n* This fixes the above regression caused by commit\n  53a6c5d93a8ba708208826dab64c55fe97f06d0b\n\nChange-Id: I57086670f3589beea8461ce0344f6ec47ab85b7b\n"
    },
    {
      "commit": "db2ad9dfce438dae14fed0a62b37f0028ee98ad1",
      "tree": "6f2dc2aef2456c75759cfe9c845a9d4064ff8bc3",
      "parents": [
        "ef668c92c2c87c45df02bf1609a89e4479bbb30c"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Jun 11 13:42:25 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Tue Jun 11 08:21:10 2013 +0000"
      },
      "message": "Fix urllib.parse (urlparse) handling\n\nRevert \"Fix \"\u0027module\u0027 object is not callable\" error\", and fix it properly.\n\n* The urlparse module is renamed to urllib.parse in Python 3.\n* This commit fixes the code to use \"urllib.parse.urlparse\"\n  instead of creating a new module urlib and setting\n  urlib.parse to urlparse.urlparse.\n* Fixes an AttributeError:\n  \u0027function\u0027 object has no attribute \u0027uses_relative\u0027\n\nThis reverts commit cd51f17c643370e6199216462c1be36f04d57291.\n\nChange-Id: I48490b20ecd19cf5a6edd835506ea5a467d556ac\n"
    },
    {
      "commit": "ef668c92c2c87c45df02bf1609a89e4479bbb30c",
      "tree": "039f3a11ed6bb9be775a4c242132628a58aa529b",
      "parents": [
        "65b162b32fccee038ea331ea47706c4c2ef52692",
        "691a75936d517f05aaa4a5b0f477d9af5f301b6f"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Jun 10 14:35:13 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 10 14:35:13 2013 +0000"
      },
      "message": "Merge \"Fix a few issues with dest-branch and multiples\""
    },
    {
      "commit": "65b162b32fccee038ea331ea47706c4c2ef52692",
      "tree": "080bc21551d03b899dadd480c8be8833a82237de",
      "parents": [
        "53a6c5d93a8ba708208826dab64c55fe97f06d0b",
        "cd51f17c643370e6199216462c1be36f04d57291"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Jun 10 14:31:30 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 10 14:31:30 2013 +0000"
      },
      "message": "Merge \"Fix \"\u0027module\u0027 object is not callable\" error\""
    },
    {
      "commit": "cd51f17c643370e6199216462c1be36f04d57291",
      "tree": "8ab1624ac46d6adbac6ca3c25d3d716aff251776",
      "parents": [
        "c2791e85f322bb7d5007ee7e673134d5fa2ed662"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Jun 06 19:06:16 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sat Jun 08 14:50:41 2013 +0900"
      },
      "message": "Fix \"\u0027module\u0027 object is not callable\" error\n\nIn a couple of files the urlparse method was not being set up\ncorrectly for python \u003c 3 and this resulted in an error being\nthrown when trying to call it.\n\nChange-Id: I4d2040ac77101e4e228ee225862f365ae3d96cec\n"
    },
    {
      "commit": "53a6c5d93a8ba708208826dab64c55fe97f06d0b",
      "tree": "3500926383ccb256d6d2f76939fc160db80c0665",
      "parents": [
        "c2791e85f322bb7d5007ee7e673134d5fa2ed662"
      ],
      "author": {
        "name": "Victor Boivie",
        "email": "victor.boivie@sonymobile.com",
        "time": "Tue Mar 19 12:20:52 2013 +0100"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sat Jun 08 14:31:58 2013 +0900"
      },
      "message": "Degrade: Fix smart sync/smart tag\n\nThis was broken in b2bd91c, which updated the manifest after it had\nbeen overridden, which made it fall back to the original file (and\nnot the one from the manifest server).\n\nThis builds on 0766900 and overrides the manifest by the one\ndownloaded from the manifest server completely.\n\nChange-Id: Ic3972390a68919b614616631d99c9e7a63c0e0db\n"
    },
    {
      "commit": "c2791e85f322bb7d5007ee7e673134d5fa2ed662",
      "tree": "9b50df24eac7bfafed0e247b4928d504d560c227",
      "parents": [
        "74c1f3d5e6ce819797795a2931cc32a9ed5535cb",
        "5bca9fcdd9dfe4fd31fffe332579f982738b5997"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Jun 05 15:54:48 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 05 15:54:48 2013 +0000"
      },
      "message": "Merge \"Print project name for -p on mirror clients\""
    },
    {
      "commit": "5bca9fcdd9dfe4fd31fffe332579f982738b5997",
      "tree": "0a10638609166ab4dc5a8d03b2cede472db3e908",
      "parents": [
        "710d4b03911bc6fc0b313af56e81b957ccae2348"
      ],
      "author": {
        "name": "Jorge Gonzalez",
        "email": "gjorge@google.com",
        "time": "Mon Jun 03 12:00:06 2013 -0700"
      },
      "committer": {
        "name": "Jorge Gonzalez",
        "email": "gjorge@google.com",
        "time": "Mon Jun 03 17:52:01 2013 -0700"
      },
      "message": "Print project name for -p on mirror clients\n\nIt doesn\u0027t make sense to print the relpath, since there\u0027s nothing\nchecked out there and the dir shouldn\u0027t even exist.\n\nChange-Id: Id43631a8e0895929d3a5ad4ca8c2dc9e3d233e70\n"
    },
    {
      "commit": "74c1f3d5e6ce819797795a2931cc32a9ed5535cb",
      "tree": "6fb625b630c36318fbfbdf815efecb1a4801459f",
      "parents": [
        "91f3ba5a3f6e3c76577b94c0a6c31974d5a3f077"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Mon Jun 03 15:05:07 2013 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Jun 04 00:12:15 2013 +0000"
      },
      "message": "Read cookie file from git-remote-persistent-https if applicable\n\ngit-remote-persistent-https proxy implementations may pass cookie file\nconfiguration to git-remote-https. When fetching bundles for\npersistent-http(s) URLs, use the -print_config flag (if supported) to\nextract this information from the proxy binary and pass it to curl,\noverriding http.cookiefile from .gitconfig.\n\nThis adds a few ms overhead per clone.bundle fetch, which should be\nacceptable since it happens only on the initial clone, which takes\nmuch longer anyway.\n\nChange-Id: I03be8ebaf8d3005855d33998cd8ecd412e8ec287\n"
    },
    {
      "commit": "91f3ba5a3f6e3c76577b94c0a6c31974d5a3f077",
      "tree": "f24f107433374a5ae8264af2dbfbf01b59703dc8",
      "parents": [
        "710d4b03911bc6fc0b313af56e81b957ccae2348"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Mon Jun 03 12:15:23 2013 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Jun 04 00:12:01 2013 +0000"
      },
      "message": "Ensure clone.bundle files have proper header\n\nServer auth middleware may return a 200 from a clone.bundle request\nthat is not a bundle file, but instead a login or access denied page.\nInstead of just checking the file size, actually check the first few\nbytes of the file to ensure it is a bundle file before proceeding.\n\nChange-Id: Icea07567c568a24fd838e5cf974c58f9e4abd7c0\n"
    },
    {
      "commit": "691a75936d517f05aaa4a5b0f477d9af5f301b6f",
      "tree": "ee61b4dcb91aeb0ea2d60fa720aa037faed7e585",
      "parents": [
        "a1f77d92c65028a55202062594cb379b6503bf60"
      ],
      "author": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Fri May 31 15:45:28 2013 -0400"
      },
      "committer": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Mon Jun 03 10:39:43 2013 -0400"
      },
      "message": "Fix a few issues with dest-branch and multiples\n\nThis fixes dest-branch display with \u003e1 branch being uploaded to at\nonce, and correctly handles setting the target branch in that case.\n\nChange-Id: If5e9c7ece02cc0d903e2cb377485ebea73a07107\n"
    },
    {
      "commit": "710d4b03911bc6fc0b313af56e81b957ccae2348",
      "tree": "ddeea9c2f86363e48d3ca4e53a868a27bd7a39f6",
      "parents": [
        "a1f77d92c65028a55202062594cb379b6503bf60"
      ],
      "author": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Fri May 31 15:28:05 2013 -0400"
      },
      "committer": {
        "name": "Bryan Jacobs",
        "email": "bryanrj@gmail.com",
        "time": "Sun Jun 02 19:13:18 2013 -0400"
      },
      "message": "Fix a bug in repo upload --cbr\n\nrepo upload --cbr bailed out if some branches did not have\nmodifications when it is used.\n\nChange-Id: I35f264ff7d77bb4bf8f26b4c3faffa184920b6c5\n"
    },
    {
      "commit": "a1f77d92c65028a55202062594cb379b6503bf60",
      "tree": "afacb5f228f4bf005afd044fce188714bf39a8dc",
      "parents": [
        "f609f91b72c0b90026da0eefcc0f52f12840971b",
        "ecf8f2b7c8e68ee78c5a90ecd8a9b48e73195b80"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue May 28 16:56:59 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 28 16:56:59 2013 +0000"
      },
      "message": "Merge \"Handle HTTPException when attempting to get ssh_info\""
    }
  ],
  "next": "ecf8f2b7c8e68ee78c5a90ecd8a9b48e73195b80"
}
