)]}'
{
  "log": [
    {
      "commit": "498a0e8a79ab76eeb6adc40f12b04d59820716f9",
      "tree": "5b7eb4032e2a979f901a5a5b5cde05b9796ab4cc",
      "parents": [
        "bc7ef67d9bfcebe17c89eb57cb465d0d6d1d999d"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon May 18 12:28:54 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon May 18 12:28:57 2009 -0700"
      },
      "message": "Make \u0027repo branches -a\u0027 the default behavior\n\nExtensive discussion with users lead to the fact that needing to\nsupply -a to view what they really wanted to see was just wrong.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "bc7ef67d9bfcebe17c89eb57cb465d0d6d1d999d",
      "tree": "f5cb5e47c6d5ad8bc2ebfdcdef55df77f62349a9",
      "parents": [
        "2f968c943b1c6f61f867fa9b87105836e0e5f354"
      ],
      "author": {
        "name": "Ficus Kirkpatrick",
        "email": "ficus@android.com",
        "time": "Mon May 04 12:45:11 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 05 15:01:18 2009 -0700"
      },
      "message": "Automatically guess Gerrit change number in \"repo upload --replace\"\n\nThis feature only works if you have one commit to replace right now\n(the common case).\n"
    },
    {
      "commit": "6f6cd77a50fd4ffff360d4aee1c6bc05bfb802c1",
      "tree": "981870a18b126f8d5a257eac80f8610a6175aaf0",
      "parents": [
        "896d5dffd313a2ad91fd8bee750241a6512b25dc"
      ],
      "author": {
        "name": "Ficus Kirkpatrick",
        "email": "ficus@android.com",
        "time": "Wed Apr 22 17:27:12 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Apr 22 18:05:50 2009 -0700"
      },
      "message": "Require a project or \u0027--all\u0027 to be specified when using \u0027repo start\u0027.\n"
    },
    {
      "commit": "ef9ce1d0a556211687cec6a782de366407255f41",
      "tree": "6227c6102e0bd412ffc5ac6c5ef4033d6bc0e293",
      "parents": [
        "05f66b6836ffa4a0a309a4909cb3f8c4a7351727"
      ],
      "author": {
        "name": "Wink Saville",
        "email": "wink@google.com",
        "time": "Tue Apr 21 10:00:16 2009 -0700"
      },
      "committer": {
        "name": "Wink Saville",
        "email": "wink@google.com",
        "time": "Tue Apr 21 10:00:16 2009 -0700"
      },
      "message": "Change -p command to use stdout instead of stderr.\n"
    },
    {
      "commit": "eb7af87bcfc67798b58a99422988b9c368d7d642",
      "tree": "4c72901e9c2bf8b44242ca4076fb24fd962ae8b8",
      "parents": [
        "938d608c9c47401fbdb60f3188c718e2f2569bd0"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 08:02:04 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 08:28:06 2009 -0700"
      },
      "message": "Document the SSH ControlMaster behavior of repo sync\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "938d608c9c47401fbdb60f3188c718e2f2569bd0",
      "tree": "d4b617e189c187ffbc44d8c4add9047c418118e4",
      "parents": [
        "d63bbf44dc22994ad3cdd73cf852f3d91d87b3f8"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 08:01:17 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 08:28:06 2009 -0700"
      },
      "message": "Support a level 2 heading in help description text\n\nThe level 2 headings (denoted by ~) indent the heading two spaces,\nbut continue to use the bold formatter to offset them from the\nother surrounding text.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "8bd5e60b16080008771afcaa7de7084487b84780",
      "tree": "1952d4841c15116ae9d26f311a8bc01d09e83e74",
      "parents": [
        "3d2cdd0ea533e885183ba2952b2bfa05eb1d05ab"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:31:36 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:31:36 2009 -0700"
      },
      "message": "Make \u0027repo status\u0027 show the branch you are currently on\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "4e3d6739a17dcc9efc5adb1d915be0a886db700e",
      "tree": "6338654fb30ced3fe92b83f1d4e724ee416cf633",
      "parents": [
        "552ac89929db1794200290550dccdd7f3078d13f"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:18:35 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:18:35 2009 -0700"
      },
      "message": "Print \u0027(no branches)\u0027 if the output of `repo branches` is empty\n\nThis way its clear the command did something, and reported\nthat it had nothing to show you, because you have no active\nbranches in this client.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "552ac89929db1794200290550dccdd7f3078d13f",
      "tree": "1da257e391ce65db9ba34fb954ebb9f95a1648ff",
      "parents": [
        "89e717d9481c0c69292a39f85599f5df8277b004"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:15:24 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:15:24 2009 -0700"
      },
      "message": "Modify \u0027repo abandon\u0027 to be more like \u0027repo checkout\u0027 and \u0027repo start\u0027\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "89e717d9481c0c69292a39f85599f5df8277b004",
      "tree": "1fc613edd34eb349b673505b872be21a416ab52f",
      "parents": [
        "0f0dfa3930bc16078ef0b1a00ff6849333038fc7"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:04:41 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:04:41 2009 -0700"
      },
      "message": "Improve checkout performance for the common unmodified case\n\nMost projects will have their branch heads matching in all branches,\nso switching between them should be just a matter of updating the\nwork tree\u0027s HEAD symref.  This can be done in pure Python, saving\nquite a bit of time over forking \u0027git checkout\u0027.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "0f0dfa3930bc16078ef0b1a00ff6849333038fc7",
      "tree": "e802a68c96d4132199aa2a9d721a56403e0d12d2",
      "parents": [
        "76ca9f8145f367f83df19981da4dd934fdda471b"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 14:53:39 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 14:53:39 2009 -0700"
      },
      "message": "Add progress meter to \u0027repo start\u0027\n\nThis is mostly useful if the number of projects to switch is many\n(e.g. all of Android) and a large number of them are behind the\ncurrent manifest revision.  We wind up needing to run git just to\nmake the working tree match, and that often makes the command take\na couple of seconds longer than we\u0027d like.\n\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": "50fa1ac6db388c0aa16751b5ad69d296e5eea047",
      "tree": "e72428e0a0f54bbf22f659a4c9b97e16503fb77d",
      "parents": [
        "5da554f294a062c5c469d0a60b6f2ce6a0b3f669"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:44:33 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:44:33 2009 -0700"
      },
      "message": "Clarify the option section header in \u0027repo help grep\u0027\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "5da554f294a062c5c469d0a60b6f2ce6a0b3f669",
      "tree": "7bd4469054cf5d19f25b68200845015e483e62f8",
      "parents": [
        "77bb4af241ddfeacfe463272d681f188f92f98b0"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:44:00 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:44:00 2009 -0700"
      },
      "message": "Show options help after the summary for a command\n\nIt is a bit clearer to read this way.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "77bb4af241ddfeacfe463272d681f188f92f98b0",
      "tree": "2bad36b41f003df3ac0277a8fcc3ea5662fa5c88",
      "parents": [
        "fd89b67f5c3ad94f050509e1421c73aff380c0a7"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:33:32 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:33:32 2009 -0700"
      },
      "message": "Improve the help text for \u0027repo init\u0027\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "fd89b67f5c3ad94f050509e1421c73aff380c0a7",
      "tree": "889c0c8d1aac82009348b687d1b965baab1be371",
      "parents": [
        "a490f03dc23792a86bbe5b2b8c89b32f39774c80"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:28:57 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:28:57 2009 -0700"
      },
      "message": "Clarify options that control the repo executable version\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "deec0536d657be178e8eed2d597afb9fdc716e99",
      "tree": "44069dcbed8bf4130a3980086be96dfec96bc7bd",
      "parents": [
        "06e556d202cc6944227667a0664ec7b8eca32076"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:22:13 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:22:13 2009 -0700"
      },
      "message": "Only display project path in \u0027repo stage -i\u0027\n\nGenerally we only show the project path, relative from the top of the\nclient.  Showing the project name may be confusing for the end-user.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "06e556d202cc6944227667a0664ec7b8eca32076",
      "tree": "ed28ad5e1559c54dae8fee3d31cda664ac3b9107",
      "parents": [
        "8225cdc56b9763ef4c000fe72db3e6ae68fc3736"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:19:01 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:19:01 2009 -0700"
      },
      "message": "Improve the help text for \u0027repo start\u0027\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "8225cdc56b9763ef4c000fe72db3e6ae68fc3736",
      "tree": "bfda0cb56fdb1e2f44bd50716e57146ad55ee1a7",
      "parents": [
        "337fb9c7e9e9806cef81918c1446c3cf4d4833d4"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:00:35 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:00:35 2009 -0700"
      },
      "message": "Display the URL we will upload changes to for review\n\nThis gives the user the last chance to confirm where the change is\ngoing to be sent to.  Knowing the review server URL will help the\nuser decide if continuing with the upload makes sense.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "337fb9c7e9e9806cef81918c1446c3cf4d4833d4",
      "tree": "f5eca7b61c30bedfaf8eaa13671cdf5e61fd8d28",
      "parents": [
        "9bb961785832356ac7f3f2516d4627cc391a2997"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 10:59:33 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 10:59:33 2009 -0700"
      },
      "message": "Improve the help text for \u0027repo upload\u0027\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "f6906876719a665819c603604603570363389d0d",
      "tree": "a309fe795eff059f5f464fd522fff74af148415b",
      "parents": [
        "336f7bd0ed70f5ee2595463b6bd8dd277e90c833"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 10:49:00 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 10:49:00 2009 -0700"
      },
      "message": "Only fetch repo once-per-day under normal \u0027repo sync\u0027 usage\n\nIts unlikely that a new version of repo will be delivered in any\ngiven day, so we now check only once every 24 hours to see if repo\nhas been updated.  This reduces the sync cost, as we no longer need\nto contact the repo distribution servers every time we do a sync.\n\nrepo selfupdate can still be used to force a check.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "66bdd468717a6f52056924837b766cf60889f2ed",
      "tree": "c066bcf6b82bf33070933c7235e21956c9ea9f6a",
      "parents": [
        "a608fb024ba0d6b1534e514e3ad2265a9f187182"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 17 18:47:22 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 17 20:54:39 2009 -0700"
      },
      "message": "Only compute commits in repo upload if we need to show a prompt\n\nIf the user has disabled a prompt, skip the two commands we use to\nobtain the list of commits and the date of the branch.  These will\nnever be displayed and just waste the end-user\u0027s time.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "a608fb024ba0d6b1534e514e3ad2265a9f187182",
      "tree": "c0f7e2f688fd78eeb0a4a70585968c5aa1fd6404",
      "parents": [
        "f8e3273decd883f334939cb24e542d47aba21a43"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 17 12:11:24 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 17 12:11:24 2009 -0700"
      },
      "message": "Allow review.URL.autoupload to skip prompting during `repo upload`\n\nIf review.URL.autoupload is set to true in a project\u0027s .git/config\nor in ~/.gitconfig then `repo upload` will automatically upload,\nand skip prompting the end-user.\n\nConversely, if review.URL.autoupload is set to false, then repo\nwill refuse to upload to that project.\n\nBug: REPO-25\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "350cde4c4bec5e7b5776cf52d61da600af3efc31",
      "tree": "45c09f4113cf5d7c0d5430360344c5d97d93304e",
      "parents": [
        "48244781c2cad1565b4b32b4524ff9931a39f848"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 16 11:21:18 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 16 11:21:18 2009 -0700"
      },
      "message": "Change repo sync to be more friendly when updating the tree\n\nWe now try to sync all projects that can be done safely first, before\nwe start rebasing user commits over the upstream.  This has the nice\neffect of making the local tree as close to the upstream as possible\nbefore the user has to start resolving merge conflicts, as that extra\ninformation in other projects may aid in the conflict resolution.\n\nInformational output is buffered and delayed until calculation for\nall projects has been done, so that the user gets one concise list\nof notice messages, rather than it interrupting the progress meter.\n\nFast-forward output is now prefixed with the project header, so the\nuser can see which project that update is taking place in, and make\nsome relation of the diffstat back to the project name.\n\nRebase output is now prefixed with the project header, so that if\nthe rebase fails, the user can see which project we were operating\non and can try to address the failure themselves.\n\nSince rebase sits on a detached HEAD, we now look for an in-progress\nrebase during sync, so we can alert the user that the given project\nis in a state we cannot handle.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "4c5c7aa74b2dec2cbfb6b6bd7e24d5922e92c112",
      "tree": "68cd00e83ba4e2a8435a47ad95d0e78c5bb500e9",
      "parents": [
        "ff84fea0bb67e249888e826af88286b9ccc5fab3"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 13 14:06:10 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 13 14:06:34 2009 -0700"
      },
      "message": "Document \u0027repo status\u0027 output\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "ff84fea0bb67e249888e826af88286b9ccc5fab3",
      "tree": "da273ea2d5a8910f05f12c8367dc996a810397f6",
      "parents": [
        "d33f43a75472cb5104e444c50b880ac3ab2de603"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 13 12:11:59 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 13 12:11:59 2009 -0700"
      },
      "message": "Fix formatting of \u0027repo help sync\u0027\n\nThe formatting for the enviroment variable section was incorrect.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "d33f43a75472cb5104e444c50b880ac3ab2de603",
      "tree": "5095c306a520a0af4685ba8454a2d4a206be8ef3",
      "parents": [
        "e756c412e35b9ac1a126985d4d047dbd52f29277"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 13 12:11:31 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 13 12:11:31 2009 -0700"
      },
      "message": "Cleanup checkout help to match other commands\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "e756c412e35b9ac1a126985d4d047dbd52f29277",
      "tree": "e5ed4a87a8b078e44c5369fbdf08b8e1c05d1ef6",
      "parents": [
        "b812a3623646adf38f30dd5cf7e92f1e704669a2"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 13 11:51:15 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 13 11:53:53 2009 -0700"
      },
      "message": "Add \u0027repo selfupdate\u0027 to upgrade only repo\n\nUsers may want to upgrade only repo to the latest release, but\nleave their working tree state alone and avoid \u0027repo sync\u0027.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "b812a3623646adf38f30dd5cf7e92f1e704669a2",
      "tree": "d4bad0b64d6a4ac58df42e6d9d0b9730e00fe7d7",
      "parents": [
        "161f445a4dc4518199b132ee4c380788aee2ac63"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 20:37:47 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 20:37:47 2009 -0700"
      },
      "message": "Add \u0027repo grep\u0027 to support searching all projects\n\nUsers can now use \u0027repo grep\u0027 to search all projects, rather than\n\u0027repo forall -c git grep\u0027.  Its not only shorter to type, but it\nalso filters results better by highlighting which projects matched\nin the client workspace.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "161f445a4dc4518199b132ee4c380788aee2ac63",
      "tree": "5fad9f5ba60ed8915614163e8d8e5c72135347ab",
      "parents": [
        "68194f42b0b0e59f206b8e997c26f6a16b74fd4f"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 17:41:44 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 19:01:08 2009 -0700"
      },
      "message": "status: tell the user the working tree is clean\n\nIf there is nothing output at all, tell the user the working tree is\ncompletely clean.  It just gives them a bit more of a warm-fuzzy\nfeeling knowing repo and until the end.  It also more closely\nmatches with the output of git status.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "68194f42b0b0e59f206b8e997c26f6a16b74fd4f",
      "tree": "c9a0a35ed66be9c0321e8ecf896d283bc0af763a",
      "parents": [
        "b1562faee09fe9eb84ea2d1eaf52bf841e2fe811"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 16:48:52 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 19:01:04 2009 -0700"
      },
      "message": "Add a project progress meter to \u0027repo sync\u0027\n\nThis way users can see how much is left during fetch.  Its\nespecially useful when most syncs are no-ops but there are\nhundreds of repositories to poll.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "b1562faee09fe9eb84ea2d1eaf52bf841e2fe811",
      "tree": "f52d37132ea35e1c3d69341e6f2ea547964c3c6e",
      "parents": [
        "3e768c9dc7f77cb2960f990f6e2d15890e96abdb"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 17:04:08 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 17:08:02 2009 -0700"
      },
      "message": "Add \u0027repo sync -l\u0027 to only do local operations\n\nThis permits usage of \u0027repo sync\u0027 while offline, as we bypass the\nnetwork based portions of the code and do only the local sync.\n\nAn example use case might be:\n\n  repo sync -n  ; # while we have network\n  ... some time later ...\n  repo sync -l  ; # while without network, come up to date\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "3e768c9dc7f77cb2960f990f6e2d15890e96abdb",
      "tree": "b5d256542c4e6aeeb467cd830584941542c8362f",
      "parents": [
        "96fdcef9e3087d71266d5c78e4a9716e3afa6d41"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 16:59:36 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 17:08:02 2009 -0700"
      },
      "message": "Add \u0027repo sync -d\u0027 to detach projects from their current topic\n\nThe -d flag moves the project back to a detached HEAD state,\nmatching what is listed in the manifest.  This can be useful to\nset a client to something stable (or at least well-known), such as\nbefore a sequence of \u0027repo download\u0027 commands are used to get some\nchanges for testing.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "96fdcef9e3087d71266d5c78e4a9716e3afa6d41",
      "tree": "2c98825daced9c0ab44f7be11048c438094684eb",
      "parents": [
        "2a1ccb2b0ca6a975614b96271fccd82a58394157"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 16:29:20 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 17:07:52 2009 -0700"
      },
      "message": "Add \u0027repo sync -n\u0027 to only do the network transfer\n\nThis makes it easier to update all repositories, without actually\nimpacting the working directory, or learning about how to use\n`repo forall -c \u0027git fetch $REPO_REMOTE\u0027 `.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2a1ccb2b0ca6a975614b96271fccd82a58394157",
      "tree": "f5d454e5ea13ead06ed7bf2d2d657126913d1274",
      "parents": [
        "0a389e94de32151189b7064d96eaaa0aa6cdb4a3"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 16:51:53 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 17:07:32 2009 -0700"
      },
      "message": "Hide the internal sync --repo-upgraded flag from users\n\nThis is only meant to be passed through while repo upgrades itself\nduring a sync.  It should never be something a user invokes on\ntheir own.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "0a389e94de32151189b7064d96eaaa0aa6cdb4a3",
      "tree": "526a877b54a070746b7a0ae8b5657baa9e7aed0e",
      "parents": [
        "2675c3f8b5865edff4fe6ec60187b32deef5041d"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 16:21:18 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 16:21:18 2009 -0700"
      },
      "message": "Make \u0027repo start\u0027 restartable upon failures\n\nIf `repo start foo` fails due to uncommitted and unmergeable changes\nin a single project, we have switched half of the projects over to\nthe new target branches, but didn\u0027t on the one that failed to move.\n\nThis change improves the situation by doing three things differently:\n\n- We keep going when we encounter an error, so other projects\n  that can successfully switch still switch.\n\n- We ignore projects whose current branch is already on the\n  requested name; they are logically already setup.\n\n- We checkout the branch if it already exists, rather than\n  trying to recreate the branch.\n\nBug: REPO-22\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "27b07327bc9f4bcda2c29422e064bced092759e3",
      "tree": "3eeee2ebd7314a35e9fadb317912791eecb8dbdf",
      "parents": [
        "02d7945eb836f33f63b94fb2a556c844faf0ef8d"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 16:02:48 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 16:02:48 2009 -0700"
      },
      "message": "Add a repo branches subcommand to describe current branches\n\nWe now display a summary of the available topic branches in this\nclient, based upon a sorted union of all existing projects.\n\nBug: REPO-21\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "02d7945eb836f33f63b94fb2a556c844faf0ef8d",
      "tree": "5cbcbfd147616337aebec9d72b0fd0de3bf34b64",
      "parents": [
        "8f82a4f828c2765cc4585f9d749f5155f06fd9e9"
      ],
      "author": {
        "name": "Wink Saville",
        "email": "wink@google.com",
        "time": "Fri Apr 10 13:01:24 2009 -0700"
      },
      "committer": {
        "name": "Wink Saville",
        "email": "wink@google.com",
        "time": "Fri Apr 10 13:01:24 2009 -0700"
      },
      "message": "Add checkout command.\n\nTeach repo how to checkout a branch in all projects or a list\nof specific projects.\n\nBug: REPO-21\n"
    },
    {
      "commit": "feabbdb44064888a6f0f1bf8bd0049f7162206c9",
      "tree": "1f2ad8484526f1bb382dfba8d94b9a449b8a1616",
      "parents": [
        "8630f39dba4de00345c130e34e98859df169c97a"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Mar 19 10:20:27 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Mar 19 10:20:27 2009 -0700"
      },
      "message": "Don\u0027t bother listing branch URLs during upload\n\nModern Gerrit2 automatically outputs the URL for each commit to\nstderr as it creates the records.  Dumping the URL ourselves is\nunnecessary additional output, and worse is just an approximate\nguess for the correct web URL.  Gerrit might not live at the top\nlevel directory for the server, or might even prefer a different\nhostname for web connections than what is listed in the manifest.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "8630f39dba4de00345c130e34e98859df169c97a",
      "tree": "c2631975b9977e02004647f1c740974db82aafe8",
      "parents": [
        "df01883f9b09adcd13f42971a102812f1148408e"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Mar 19 10:17:12 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Mar 19 10:17:12 2009 -0700"
      },
      "message": "Fix repo re-init in a mirror to not prompt\n\nOn a mirror client we don\u0027t prompt for user.name,user.email as the\ndata is only necessary if you will make new commits.  On a re-init\nwe were testing the command line option, not the existing IsMirror\nproperty from the manifest configuration file.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "df01883f9b09adcd13f42971a102812f1148408e",
      "tree": "591048750e348501010490b986116132ee564825",
      "parents": [
        "1fc99f4e472c86915cb1affd5507140277711227"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 17 08:15:27 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 17 08:15:27 2009 -0700"
      },
      "message": "Allow repo init to restart if URL was initially invalid\n\nThis allows the user to run \"repo init -u\" again after an\ninitial attempt failed due to an invalid URL.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "1fc99f4e472c86915cb1affd5507140277711227",
      "tree": "f369f77f27b2ef5bc599fad3e801906b7419180d",
      "parents": [
        "1775dbe176fe284a9baa8697f600f03e9b8dabbc"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 17 08:06:18 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 17 08:11:51 2009 -0700"
      },
      "message": "Give a more friendly error in \u0027repo init\u0027 if manifest url is invalid\n\nInstead of a stack trace ending in origin/master not existing we\nnow tell the user the manifest url is invalid if \u0027git fetch\u0027 has\nfailed out early.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "1775dbe176fe284a9baa8697f600f03e9b8dabbc",
      "tree": "eaeef4183455a6c7d2324d86046368e952dda33e",
      "parents": [
        "521cd3ce67a3621dbbad906f8402dbde8a1e9e63"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 17 08:03:04 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 17 08:03:04 2009 -0700"
      },
      "message": "Set forall environment variables to empty string if None\n\nIf the value obtained is None we now set the variable to\n\u0027\u0027 instead, in an attempt to make execve() happier about\nour 3rd argument, the env dictionary.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "521cd3ce67a3621dbbad906f8402dbde8a1e9e63",
      "tree": "4ea6d321126983da8633f4832102986bab2d598b",
      "parents": [
        "5470df6219fd3be675b8700c326713e700847a10"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 09 18:53:20 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 09 18:53:20 2009 -0700"
      },
      "message": "Support \"repo init -b foo \u0026\u0026 repo sync\" to switch baselines\n\nWe now correctly support re-initializing an existing client to point\nto a different branch of the same manifest repository, effectively\nallowing the client to switch the baseline it is operating on.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "5470df6219fd3be675b8700c326713e700847a10",
      "tree": "3f327a5e7ccf8da49ac54f9b24514b61b37c2b2b",
      "parents": [
        "0ed2bd1d95fb85dac1721f4c71abc8e07ec30e64"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 09 18:51:58 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 09 18:51:58 2009 -0700"
      },
      "message": "Don\u0027t permit \"repo init --mirror\" in an existing client\n\nSimply setting repo.mirror true doesn\u0027t make a client into a mirror.\nThe on-disk layout is completely wrong for a mirror repository,\nand until we fix our layout for a non-mirror client to more closely\nresemble the upstream we can\u0027t do anything to easily turn on or\nturn off the mirror status flag.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "c7a4eefa7e775b64916a66b52ca6c5f31e2cf5c8",
      "tree": "49451ef2767128c809e48f980766c1a02d6504aa",
      "parents": [
        "43c3d9ea17f1436a6b3b2e7e7827da6f48a21da9"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Mar 05 10:32:38 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Mar 05 10:32:38 2009 -0800"
      },
      "message": "Add repo manifest -o to save a manifest\n\nThis can be useful to create a new manifest from an existing client,\nespecially if the client wants to use the \"-r\" option to set each\nproject\u0027s revision to the current commit SHA-1, making a sort of a\ntag file that can be used to recreate this exact state elsewhere.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "43c3d9ea17f1436a6b3b2e7e7827da6f48a21da9",
      "tree": "9bfa77f57095fcd04901ee7783c78d49afdb1e9d",
      "parents": [
        "4259b8a2ac0dddb54e98e00afc454bf966d4f058"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Mar 04 14:26:50 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Mar 04 14:26:50 2009 -0800"
      },
      "message": "Add a \u0027repo manifest\u0027 command whose help is the manifest file format\n\nThis should make it easier for users to discover the file format\non their own, and read about it.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "4259b8a2ac0dddb54e98e00afc454bf966d4f058",
      "tree": "dacf06da9c8e72e897703fe32f07e065b26e8b26",
      "parents": [
        "2816d4f387042b5ee38b27f1c9ef0b3f313165ed"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Mar 04 14:03:16 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Mar 04 14:03:16 2009 -0800"
      },
      "message": "Tell users how to see the complete list of commands\n\nUsing \"repo help --all\" may not be obvious.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "44469464d2e4ddbb217f92e962ff85dfd736772e",
      "tree": "d699677e5583ee7b193f1c868bba43285fcbe61f",
      "parents": [
        "c95583bf4f17b8467f815b6391ffc6c7add08804"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 03 17:51:01 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 03 17:51:01 2009 -0800"
      },
      "message": "Allow repo forall -c on a mirror by using GIT_DIR as pwd\n\nWe can permit a forall on a mirror, but only if we put\nthe command into the git repository.\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": "be0e8ac232de862d287927c4d735cf30f040cf42",
      "tree": "bd967fd652ed0da2cd967a66fe5f239780d61120",
      "parents": [
        "47c1a63a07ebd67efac00ca9e0d877633aea5881"
      ],
      "author": {
        "name": "Jeff Bailey",
        "email": "jeffbailey@google.com",
        "time": "Wed Jan 21 19:05:15 2009 -0500"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 02 19:32:28 2009 -0800"
      },
      "message": "Export additional environment variables to repo forall:\n\nREPO_PATH is the path relative the the root of the client.\n\nREPO_REMOTE is the name of the remote system from the manifest.\n\nREPO_LREV is the name of the revision from the manifest, but\ntranslated to something the local repository knows.\n\nREPO_RREV is the name of the revision from the manifest.\n\nThis allows us to do commands like:\n\n  repo forall -c \u0027echo \"(cd $REPO_PATH \u0026\u0026 git checkout `git rev-parse HEAD`)\"\u0027\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": "a6df7d284cc008cc2f21092f5fdd4e32ed28500e",
      "tree": "b3c0970115668d068c8b34768484b60511fd11aa",
      "parents": [
        "67092448c290ce6bd3f05abc17f4f4d53e4c91bb"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Dec 12 08:04:07 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Dec 12 08:04:07 2008 -0800"
      },
      "message": "Describe upload --replace in upload\u0027s help text\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "67092448c290ce6bd3f05abc17f4f4d53e4c91bb",
      "tree": "bcb2fc65b934d3e6904286bf69fb0b8e2f52b9ea",
      "parents": [
        "e92ceebde0034ad045e12b8241045d701383e681"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Dec 12 08:01:12 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Dec 12 08:01:12 2008 -0800"
      },
      "message": "Don\u0027t accept multiple commits for the same change in upload --replace\n\nGerrit won\u0027t permit more than one commit using the same change\nnumber during a replacement request, so we should error out if\nthe user has asked for this in their upload edit script.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "e92ceebde0034ad045e12b8241045d701383e681",
      "tree": "aa604c3a12d8e7908823a40f877699188f927d15",
      "parents": [
        "03eaf07ec6aa7e99a0444ac1ec708b2a5f7cbbf5"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Nov 24 15:51:25 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Nov 24 15:51:25 2008 -0800"
      },
      "message": "Fix upload --replace after it was broken when --review,--cc was added\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2896a79120fe1de65472736f756c47b558b44db1",
      "tree": "73a105ae2e3138575b82e9840a69c8b2eca0dd1e",
      "parents": [
        "8c6eef4713db36a2063dd5a68b3d37a5e4276508"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Mon Nov 17 16:56:36 2008 -0500"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@android.com",
        "time": "Wed Nov 19 11:55:06 2008 -0500"
      },
      "message": "Add --review and --cc flags to repo upload, so you can\nassign reviewers when you upload changes.\n"
    },
    {
      "commit": "c99883fee990a1baa7e0bf5f854c7485b7d0f0d9",
      "tree": "870cfd73b1fc2faf53da6d613ae820984695b305",
      "parents": [
        "ec18b4bac4f3c0760c26e83b8ade01ad1c815a9b"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 11 17:12:43 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Nov 12 09:12:19 2008 -0800"
      },
      "message": "Teach \u0027repo upload --replace\u0027 how to add replacement patch sets\n\nUsers are prompted with the list of known changes we are about\nto upload, and they can fill out the current change numbers for\nany changes which already exist in the data store.  For each of\nthose changes the change number and commit id is sent as part of\nthe upload request, so Gerrit can insert the new commit as a new\npatch set of the existing change, rather than make a new change.\n\nThis facility permits developers to replace a patch so they can\naddress comments made on a prior version of the same change.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "e284ad1d1a2c6fa0e0ac800e87b2607f9bda339e",
      "tree": "fcf35ac784ec2e13c78ee3882ccb1fec0ad3d049",
      "parents": [
        "3e5481999d5f853e19ee5caaaaa968fc4b5176ab"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 04 07:37:10 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Nov 05 18:08:32 2008 -0800"
      },
      "message": "Add \u0027repo init --mirror\u0027 to download a complete forrest\n\nThe mirror option downloads a complete forrest (as described by the\nmanifest) and creates a replica of the remote repositories rather\nthan a client working directory.  This permits other clients to\nsync off the mirror site.\n\nA mirror can be positioned in a \"DMZ\", where the mirror executes\n\"repo sync\" to obtain changes from the external upstream and\nclients inside the protected zone operate off the mirror only,\nand therefore do not require direct git:// access to the external\nupstream repositories.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "9fa44db94bfabcf43160316660801a2c1db2dbb9",
      "tree": "4a8ffcba60cfd6c02e88c9f401a66d4cab1b18b0",
      "parents": [
        "c9ef744c7b5f6bcab446cf0a0bc9cc1b016dd5f8"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Nov 03 11:24:59 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Nov 03 11:24:59 2008 -0800"
      },
      "message": "Introduce \u0027repo abandon \u003cbranchname\u003e\u0027 as an alias for \u0027git branch -D\u0027\n\nThis destroys a local development branch, removing all history\nof that branch from ever existing.  If the branch is currently\nchecked out we move back to the upstream revision.\n\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": "df830f12389984adeeba04659615b9fc230f2db3",
      "tree": "ea5857656f63f9b375dbb9851e8801062570c24d",
      "parents": [
        "90be5c0839762d14bdee75d121c3923ed91c8404"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 30 09:21:43 2008 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 30 09:21:43 2008 -0700"
      },
      "message": "Remove import_tar, import_zip and the \u003csnapshot\u003e elements\n\nNow that repo relies only on the git data stream (as it is much\nfaster to download through) we don\u0027t really need to be parsing the\n\u003csnapshot\u003e elements within manifest.  Its a lot of complex code to\nconvert the tar (or zip) through to a fast import stream, and we\njust aren\u0027t calling it anymore.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "632768bc65ae0f1dc9eb9260c9146c42d9965a18",
      "tree": "f8fc564a40e5886c74062d6be751ca4c2769721c",
      "parents": [
        "0758d2f1d61288c83282749d2b36958d2c289e7f"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 23 11:58:52 2008 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 23 14:43:28 2008 -0700"
      },
      "message": "Teach repo how to download changes to the local checkout\n\nNow `repo download . 1402` would download the change numbered 1402\ninto the current project and check it out for the user, using a\ndetached HEAD.  `repo sync .` would back out of the change and\nreturn to the upstream version.\n\nMultiple projects can be fetched at once by listing them out on\nthe command line as different arguments.\n\nIndividual patch sets can be selected by adding a \u0027/n\u0027 to indicate\nthe n-th patch set should be downloaded instead of the default of\npatch set 1.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "0758d2f1d61288c83282749d2b36958d2c289e7f",
      "tree": "484a67366aeb84d83147eeec2ba4fd459dbf0879",
      "parents": [
        "bb0ee8057165a9d54e1e1ab9addb15a2a57ccfc1"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Oct 22 13:13:40 2008 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Oct 22 13:13:40 2008 -0700"
      },
      "message": "Show which user account each change was uploaded under\n\nThis way users are well aware of which account we used when the\nuploads are complete, so they can be certain to sign into the web\napplication with that user identity.\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"
    }
  ]
}
