)]}'
{
  "log": [
    {
      "commit": "3218c13205694434edb2375ab8a8515554eed366",
      "tree": "fe791872aab6dcdd74bee68fb377c77bd41b1173",
      "parents": [
        "b0f9a02394779c1c9422a9649412c9ac5fb0f12f"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Dec 07 08:46:14 2010 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Dec 07 08:46:14 2010 -0800"
      },
      "message": "Use os.environ.copy() instead of dict()\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "b0f9a02394779c1c9422a9649412c9ac5fb0f12f",
      "tree": "f7cb755beb0dd1a24406a714d9433ecebf6ed208",
      "parents": [
        "69b1e8aa65ab933fa919166d88aec90c86852beb"
      ],
      "author": {
        "name": "Anthony Newnam",
        "email": "anthony.newnam@garmin.com",
        "time": "Mon Nov 29 13:15:24 2010 -0600"
      },
      "committer": {
        "name": "Anthony Newnam",
        "email": "anthony.newnam@garmin.com",
        "time": "Mon Nov 29 13:17:53 2010 -0600"
      },
      "message": "Make path references OS independent\n\nChange-Id: I5573995adfd52fd54bddc62d1d1ea78fb1328130\n"
    },
    {
      "commit": "69b1e8aa65ab933fa919166d88aec90c86852beb",
      "tree": "0a8635a835abfd8c05a04bd03639ab2d07e70d5f",
      "parents": [
        "840ed0fab7cb4c2ab296c7d7d45f13e2523bae1c",
        "9452e4ec0941fbee163e35ebdcd6ca6ee7df55cb"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Mar 06 19:29:56 2010 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Mar 06 19:29:56 2010 -0800"
      },
      "message": "Merge branch \u0027stable\u0027\n\n* stable:\n  Automatically install Gerrit Code Review\u0027s commit-msg hook\n  Fail sync when encountering \"N commits behind.\"\n  Check that we are not overwriting a local repository when syncing.\n  Honor url.insteadOf when setting up SSH control master connection\n  sync: Fix split call on malformed email addresses\n  Fixing project renaming bug.\n\nConflicts:\n\thooks/commit-msg\n\tproject.py\n\tsubcmds/sync.py\n\nChange-Id: I5eaf8fef8cbe4a95d124368112293a9ca64325bf\n"
    },
    {
      "commit": "9452e4ec0941fbee163e35ebdcd6ca6ee7df55cb",
      "tree": "63730cd5665d1a6233c4e0d922a886cbd035cad3",
      "parents": [
        "4c50deea28badb7007fa6b78c187de50eacdd07a"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 18:17:46 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Mar 06 19:21:00 2010 -0800"
      },
      "message": "Automatically install Gerrit Code Review\u0027s commit-msg hook\n\nMost users of repo are also using Gerrit Code Review, and will want\nthe commit-msg hook to be automatically installed into their local\nprojects so that Change-Ids are assigned when commits are created,\nnot when they are first uploaded.\n\n(cherry picked from commit a949fa5d202f0a1f812d7630f3e5bf0f02ca4e98\n but squashed with latest hook script from version 2.1.2)\n\nChange-Id: Ie68b2d60ac85d8c2285d2e1e6a4536eb76695547\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "4c50deea28badb7007fa6b78c187de50eacdd07a",
      "tree": "d51d267854493562a0b8a5a6480050319a78a39b",
      "parents": [
        "d63060fc9546e2132d0ad7791beb795906372e86"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@menace.cam.corp.google.com",
        "time": "Tue Mar 02 15:38:03 2010 -0500"
      },
      "committer": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Thu Mar 04 11:56:38 2010 -0500"
      },
      "message": "Fail sync when encountering \"N commits behind.\"\n\nThis is almost always something the user needs to address\nbefore continuing work, so promoting it to a failure (rather\nthan simply an informational message) seems the right way to\ngo. As a side-effect, repo will now exit with a non-zero\nstatus code in this situation, so pipelines of the form\n`repo sync \u0026\u0026 make` will fail if there are branches that\nare stalled due to uploaded but unmerged patches.\n"
    },
    {
      "commit": "d63060fc9546e2132d0ad7791beb795906372e86",
      "tree": "9b0241a1b609cc1563582e6664e3df27732de3af",
      "parents": [
        "b6ea3bfcc398417b91a4fa5a486324f4d904b022"
      ],
      "author": {
        "name": "Nico Sallembien",
        "email": "nsallembien@google.com",
        "time": "Wed Jan 20 10:27:50 2010 -0800"
      },
      "committer": {
        "name": "Nico Sallembien",
        "email": "nsallembien@google.com",
        "time": "Wed Jan 20 10:27:50 2010 -0800"
      },
      "message": "Check that we are not overwriting a local repository when syncing.\n\nIf a local git repository exists within the same folder as a new project that\nis added, when the user syncs the repo, the sync will overwrite the local\nfiles under the project\u0027s .git repository with its own symlinks. Make sure\nthat we do not overwrite \u0027normal\u0027 files in repo and throw an error when\nthat happens.\n"
    },
    {
      "commit": "b6ea3bfcc398417b91a4fa5a486324f4d904b022",
      "tree": "dc6bc95c3b05ab032a343bbeeee5ac62e917b5da",
      "parents": [
        "aa4982e4c937d9be0f69c250692839eb98a184e8"
      ],
      "author": {
        "name": "Ulrik Sjolin",
        "email": "ulrik.sjolin@gmail.com",
        "time": "Sun Jan 03 18:20:17 2010 +0100"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Jan 04 05:38:39 2010 -0800"
      },
      "message": "Honor url.insteadOf when setting up SSH control master connection\n\nRepo can now properly handle url.insteadOf sections in the\nuser\u0027s ~/.gitconfig file.  This means that a user can now enjoy\nthe master-ssh functionality even if he/she uses insteadOf\u0027s in\n~/.gitconfig to rewrite git:// URLs to ssh:// style URLs.\n\nChange-Id: Ic0f04a9c57206a7b89eb0f10bf188c4c483debe3\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "aa4982e4c937d9be0f69c250692839eb98a184e8",
      "tree": "5a86ac62a56f93e8ad3a784686a53e333ebadac3",
      "parents": [
        "9bb1816bdc2c21811ea6a87ba6eb745bdf3c041c"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Dec 30 18:38:27 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Dec 30 18:38:27 2009 -0800"
      },
      "message": "sync: Fix split call on malformed email addresses\n\nIf an email address in a commit object contains a space, like a few\nmalformed ones on the Linux kernel, we still want to split only on\nthe first space.\n\nUnfortunately my brain was too damaged by Perl and originally wrote\nthe split asking for 2 results; in Python split\u0027s argument is how\nmany splits to perform.  Here we want only 1 split, to break apart\nthe commit identity from the email address on the same line.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "9bb1816bdc2c21811ea6a87ba6eb745bdf3c041c",
      "tree": "bedfcfbf5bd21c3defccead65a441cbb0e8e8be1",
      "parents": [
        "c24c720b6135a8f7975bf9af265124eee2d464cb"
      ],
      "author": {
        "name": "Nico Sallembien",
        "email": "nsallembien@google.com",
        "time": "Mon Dec 07 15:38:01 2009 -0800"
      },
      "committer": {
        "name": "Nico Sallembien",
        "email": "nsallembien@google.com",
        "time": "Thu Dec 10 15:24:45 2009 -0800"
      },
      "message": "Fixing project renaming bug.\n\nThis bug happens when a project gets added to the manifest, and\nthen is renamed. Users who happened to have run \"repo sync\" after\nthe project was added but before the rename happened will try to\nread the data from the old project, as the manifest was only updated\nafter all projects were updated successfully.\n"
    },
    {
      "commit": "840ed0fab7cb4c2ab296c7d7d45f13e2523bae1c",
      "tree": "4b9d661e64b3441ef11fc24ff1b4629697ac188f",
      "parents": [
        "c024912fb8227db2a1c9232add3b1e7256af170a"
      ],
      "author": {
        "name": "Thiago Farina",
        "email": "thiago.farina@gmail.com",
        "time": "Wed Sep 09 00:41:34 2009 -0400"
      },
      "committer": {
        "name": "Thiago Farina",
        "email": "thiago.farina@gmail.com",
        "time": "Wed Sep 09 00:41:34 2009 -0400"
      },
      "message": "Fix to display the usage message of the command download when the user\ndon\u0027t provide any arguments to \u0027repo download\u0027.\n\nSigned-off-by: Thiago Farina \u003cthiago.farina@gmail.com\u003e\n"
    },
    {
      "commit": "c024912fb8227db2a1c9232add3b1e7256af170a",
      "tree": "2289607dddee108d7796feb25ad2f7e00be224df",
      "parents": [
        "15f6579eb3a2f3cb0e432ed39ac39d8678786161"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Aug 25 11:38:11 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Aug 25 12:03:55 2009 -0700"
      },
      "message": "commit-msg: Don\u0027t create message with only Change-Id\n\nIf a user aborts a commit, the commit-msg hook is still called,\nbut with an empty file.  We need to leave the empty file alone.\n\nChange-Id: I13766135dac267823cb08ab76f67d2000ba2d1ce\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "15f6579eb3a2f3cb0e432ed39ac39d8678786161",
      "tree": "156a3d9d0e47df02293ac60c6d93bb8017634a25",
      "parents": [
        "d4cd69bdef28c5a9287c85c48a18ce621eba689d"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 19:23:55 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 19:23:55 2009 -0700"
      },
      "message": "commit-msg: Update the commit message hook\n\nThis version fixes a bug where Change-Id lines become the subject\nline, if the subject used a pattern like the subject of this\nmessage does.\n\nChange-Id: I7f7e0363091d03eb05dead2992fc19763214de65\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "d4cd69bdef28c5a9287c85c48a18ce621eba689d",
      "tree": "775577d2a74a7ed131dec7c259441b45833eee04",
      "parents": [
        "d2dfac81ad6a060179b4b2289060af2dc7a5cdfd"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 18:50:45 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 18:51:02 2009 -0700"
      },
      "message": "forall: Silently skip missing projects\n\nIf a project is missing locally, it might be OK to skip over it\nand continue running the same command in other projects.\n\nBug: REPO-43\nChange-Id: I64f97eb315f379ab2c51fc53d24ed340b3d09250\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "d2dfac81ad6a060179b4b2289060af2dc7a5cdfd",
      "tree": "c783e72b72e7c199ef39d036bb94ca15ec7c59ec",
      "parents": [
        "47199010671a6724e18f061f4da63dcd46e3f354"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 18:39:49 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 18:41:16 2009 -0700"
      },
      "message": "upload: Catch and cleanly report connectivity errors\n\nInstead of giving a Python backtrace when there is a connectivity\nproblem during repo upload, report that we cannot access the host,\nand why, with a halfway decent error message.\n\nBug: REPO-45\nChange-Id: I9a45b387e86e48073a2d99bd6d594c1a7d6d99d4\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "47199010671a6724e18f061f4da63dcd46e3f354",
      "tree": "42fd5aafb13bb3b949f373067c3de05c5fd24b27",
      "parents": [
        "a949fa5d202f0a1f812d7630f3e5bf0f02ca4e98"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 18:24:13 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 18:41:09 2009 -0700"
      },
      "message": "upload: Document --replace is deprecated\n\nChange-Id: I52715bcfec9c038d0e02505aa7e4054ebc0434aa\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "a949fa5d202f0a1f812d7630f3e5bf0f02ca4e98",
      "tree": "fb0a8ad39a99827747dce6272bcd10dd33c41756",
      "parents": [
        "0afac0856cee05929ec8aa952f6023985e5ad1e4"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 18:17:46 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Aug 22 18:22:04 2009 -0700"
      },
      "message": "Automatically install Gerrit Code Review\u0027s commit-msg hook\n\nMost users of repo are also using Gerrit Code Review, and will want\nthe commit-msg hook to be automatically installed into their local\nprojects so that Change-Ids are assigned when commits are created,\nnot when they are first uploaded.\n\nChange-Id: Ide42e93b068832f099d68a79c2863d22145d05ad\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "0afac0856cee05929ec8aa952f6023985e5ad1e4",
      "tree": "d6ad5b82055d614588dc12812f1039e72c8f1e55",
      "parents": [
        "33f0e786bb35ea11da1e3d1746c431da5f1d93eb",
        "4c0f67046543c7c6ab24175e143001f14b76ea01"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Aug 17 08:09:02 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Aug 17 08:09:05 2009 -0700"
      },
      "message": "Merge change 11206\n\n* change 11206:\n  Do not invoke ssh with -p argument when no port has been specified.\n"
    },
    {
      "commit": "4c0f67046543c7c6ab24175e143001f14b76ea01",
      "tree": "4716f6c6a3a05480146fe0fd8189bbeac7862bf9",
      "parents": [
        "c24c720b6135a8f7975bf9af265124eee2d464cb"
      ],
      "author": {
        "name": "Josh Guilfoyle",
        "email": "jasta00@gmail.com",
        "time": "Sun Aug 16 09:44:40 2009 -0700"
      },
      "committer": {
        "name": "Josh Guilfoyle",
        "email": "jasta00@gmail.com",
        "time": "Sun Aug 16 11:26:57 2009 -0700"
      },
      "message": "Do not invoke ssh with -p argument when no port has been specified.\n\nThis change allows local SSH configuration to choose the port number to\nuse when not explicitly set in the manifest.\n"
    },
    {
      "commit": "33f0e786bb35ea11da1e3d1746c431da5f1d93eb",
      "tree": "3c0e1fda7a739411e8f7ec3854b583425e171687",
      "parents": [
        "57272ba82e3e1baa2bd7743d799f7dbc2acd43f8"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Jul 14 15:23:39 2009 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Jul 14 15:23:39 2009 -0400"
      },
      "message": "Add \"repo branch\" as an alias for \"repo branches\"\n\nFor those of us that are used to typing \"git branch\".\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "57272ba82e3e1baa2bd7743d799f7dbc2acd43f8",
      "tree": "5f7efde48b48b194d47a9c8389be8bf2eca7a1c9",
      "parents": [
        "0125ae2fda18deee89dc94b32a2daa1b37a8a361"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 18:06:22 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:51:13 2009 -0700"
      },
      "message": "manifest: Support --upgrade to submodule format, from XML\n\nBy running `repo manifest --uprade` an administrator can update the\ncurrent manifest format from the XML format to submodule format, but\nwe need all projects to be checked out in a work tree for this to\nfunction correctly.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "0125ae2fda18deee89dc94b32a2daa1b37a8a361",
      "tree": "db0d0af58d10cb0cdb709fc604732f2454f0ab78",
      "parents": [
        "a7ce096047a7707edc572de375b700d161b9520b"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 18:05:23 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:50:52 2009 -0700"
      },
      "message": "Introduce manifest format using git submodules\n\nIf a manifest top level directory contains \u0027.gitmodules\u0027 we now\nassume this is a git module format manifest and switch to using\nthat code, rather than the legacy XML based manifest.\n\nAt the same time, we move the bare repository for a project from\n$TOP/.repo/projects/$REPO_PATH.git to be $REPO_NAME.git instead.\nThis makes it easier for us to later support a repo init from an\nexisting work tree, as we can more accurately predict the path of\nthe project\u0027s repository in the workspace.  It also means that the\n$TOP/.repo/projects/ directory is layed out like a mirror would be.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "a7ce096047a7707edc572de375b700d161b9520b",
      "tree": "343563212fe4fe24de905685038ede22d8e9e5e8",
      "parents": [
        "87bda12e85ffb98778d7ac881edb0210b74c0491"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 18:04:27 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:50:52 2009 -0700"
      },
      "message": "Allow meta projects to be created not under .repo/\n\nSome types of manifests might prefer to put their meta project work\ntree under topdir, rather than inside of the .repo/ directory.  We\ncan support that by allowing relpath to be optionally passed in.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "87bda12e85ffb98778d7ac881edb0210b74c0491",
      "tree": "ccdbd92a16ccb4fe9409ee5b864c0e02412e942a",
      "parents": [
        "5f947bba69de81f58f1adef10225c04727fa0ed5"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 16:37:30 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:50:52 2009 -0700"
      },
      "message": "sync: Support upgrading manifest formats\n\nIf the manifest format changes during init or sync we need to do\na full reparse of the manifest, and possibly allow the new object\nto reconfigure the local workspace to match its expectations.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "5f947bba69de81f58f1adef10225c04727fa0ed5",
      "tree": "96da97d3e570c4b2238c807700060c144b333d09",
      "parents": [
        "b3d2c9214be60f575d64b3af3b87a3632de04ba0"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 17:24:17 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:50:52 2009 -0700"
      },
      "message": "init: add -o, --origin to name manifest remote\n\nThe -o option permits the user to control the name of the manifest\u0027s\nremote, which normally is hardcoded to be \u0027origin\u0027, but can differ\nbecause we derive it at runtime from the configuration file.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "b3d2c9214be60f575d64b3af3b87a3632de04ba0",
      "tree": "48b9b764f2f8ccf43adb8e470dd893e557a27f10",
      "parents": [
        "7354d8891480f5eaa535acc38a24f42ea63b18a6"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 17:24:45 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:50:52 2009 -0700"
      },
      "message": "init (wrapper): Note that -m is now deprecated\n\nIf the manifest format isn\u0027t XML, this option isn\u0027t available.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "7354d8891480f5eaa535acc38a24f42ea63b18a6",
      "tree": "d8e9f479a031563f7dede6ed2402c81bebfb97f3",
      "parents": [
        "ce86abbe8ab9389fbad9d375e3754ed054d8b744"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:06:13 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:50:52 2009 -0700"
      },
      "message": "init: Ensure repo.mirror is noticed once set\n\nIf we don\u0027t clear the cache, there can be a timestamp race between\nthe pickle file and the raw text file, and we may not pick up the\nedit when we create a new config object around the same path name.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "ce86abbe8ab9389fbad9d375e3754ed054d8b744",
      "tree": "07f97c93055b8743dd4db0848ad0fb1d05ddbac6",
      "parents": [
        "75b87c8a5171b26947d0a13d970f09defac736e3"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 16:52:28 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:03:38 2009 -0700"
      },
      "message": "Allow the manifest to be accessed it if is in work tree\n\nIf the manifest\u0027s work tree is actually inside of the rest of\nthe client work tree then its only fair that we include it as\na project that the user can access.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "75b87c8a5171b26947d0a13d970f09defac736e3",
      "tree": "b8d3eb561b8faa2d3fc73e04d402128fdca1b8b3",
      "parents": [
        "abb7a3dfecdfe98b30594219f24c5c3d5e11e990"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 16:24:57 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:03:38 2009 -0700"
      },
      "message": "Abstract manifest branch creation from init to the manifest object\n\nThis permits the XML style manifest to use \u0027default\u0027, while other\ntypes can use their own creation strategy for the current branch.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "abb7a3dfecdfe98b30594219f24c5c3d5e11e990",
      "tree": "eeec9afdd3f3b42101d436d21e1e802b419c5e74",
      "parents": [
        "cc6c79643e1cafad565424caabe581e7b548bf6f"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 16:16:18 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:03:38 2009 -0700"
      },
      "message": "Allow callers to request a specific type of manifest\n\nIf the caller knows exactly what the manifest type must be we\ncan now ask the loader to directly construct that type, rather\nthan guessing it from the working directory.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "cc6c79643e1cafad565424caabe581e7b548bf6f",
      "tree": "29fe305852e0488f54548e1d2a9d3e39f8d39f85",
      "parents": [
        "2095179beec754d2d5bfe175215e736b7ff838e9"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 15:29:02 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:03:38 2009 -0700"
      },
      "message": "Make refs/remotes/m management the manifest object\u0027s responsibility\n\nI plan to have the new submodule manifest format use a different\nlayout for the m refs than the XML manifest format has used in\nthe past.  Thus we need to move the behavior management into the\nmanifest object, and out of the project, so we can change it.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2095179beec754d2d5bfe175215e736b7ff838e9",
      "tree": "6cb3048cc2c7f7f011f24f6a0f529f93f221cd02",
      "parents": [
        "b0ca41e19ad0631d82194405d992a7a3b4a834fc"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 15:26:17 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:03:38 2009 -0700"
      },
      "message": "Cleanup import formatting in manifest_xml.py\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "b0ca41e19ad0631d82194405d992a7a3b4a834fc",
      "tree": "2e8d73572c88d4a87d70469a082fe0a7a98502d4",
      "parents": [
        "1875ddd47c0bf38e5cc52e1e5875caabce2d8742"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:01:47 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 20:03:38 2009 -0700"
      },
      "message": "Only remove a stale pickle file if it exists\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "1875ddd47c0bf38e5cc52e1e5875caabce2d8742",
      "tree": "cfa269cd610a1e569cd3b3b5e0d3a92675d74a7d",
      "parents": [
        "446c4e5556a4c85621d61b3aba63d084300c6224"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 15:22:49 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 16:39:19 2009 -0700"
      },
      "message": "sync: Run `git gc --auto` after fetch\n\nUsers may wind up with a lot of loose object content in projects they\ndon\u0027t frequently make changes in, but that are modified by others.\n\nSince we bypass many git code paths that would have otherwise called\nout to `git gc --auto`, its possible for these projects to have\ntheir loose object database grow out of control.  To help prevent\nthat, we now invoke it ourselves during the network half of sync.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "446c4e5556a4c85621d61b3aba63d084300c6224",
      "tree": "6a4e588e7fd73b1e714e2cc4f746a9ec915ae228",
      "parents": [
        "67f4563acb58af9e64fbfe8a2c9794b389a3debc"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 18:14:04 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 11:00:16 2009 -0700"
      },
      "message": "init: Allow -m only on XML formatted manifest\n\nIf the manifest is the newer SubmoduleManifest style, then the -m\noption makes no sense, as you cannot select a specific file within\nthe current branch.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "67f4563acb58af9e64fbfe8a2c9794b389a3debc",
      "tree": "a605caa0f310a024aa88a68a50c9a00360a5427a",
      "parents": [
        "050e4fd591537811e6e62b2e9ba1ce83e520e550"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 18:17:51 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 11:00:16 2009 -0700"
      },
      "message": "manifest: Only support -o option on XML formatted manifest\n\nIf the manifest isn\u0027t a single file format manifest, the -o option\nmakes no sense, as you cannot export multiple files to a single\nstream for display or redirection.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "050e4fd591537811e6e62b2e9ba1ce83e520e550",
      "tree": "05ca13bcc8713675eba7c896f7e75e1cb76e1bbb",
      "parents": [
        "60e679209a5495393ef584efaaad287fc8b77c51"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jun 03 14:16:14 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 11:00:16 2009 -0700"
      },
      "message": "manifest: Only display XML help on XML manifest\n\nSome of the help text is only related to the XML formatted manifest,\nso only display that text if that is the current format.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "60e679209a5495393ef584efaaad287fc8b77c51",
      "tree": "11aebc3d30a82685da22fe8b315cff15270a6ddf",
      "parents": [
        "f1a6b14fdc5402f9ed765a8a342d9c07c5b91e2d"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jun 03 17:43:16 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 11:00:16 2009 -0700"
      },
      "message": "help: Don\u0027t show empty Summary or Description sections\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "f1a6b14fdc5402f9ed765a8a342d9c07c5b91e2d",
      "tree": "f67b0e4fdb68bf3466202a27d5a0732edf424812",
      "parents": [
        "ca3d8ff4fc7bac11a747e4f32a81b42a01f4f297"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jun 03 16:01:11 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 11:00:16 2009 -0700"
      },
      "message": "Create an abstract Manifest base class\n\nThis will help as we add support for another manifest type.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "ca3d8ff4fc7bac11a747e4f32a81b42a01f4f297",
      "tree": "bbec403fcb9a01044b32149ad18de426660af3c2",
      "parents": [
        "98ea26b8d842d11afe6326f026ba15644dc40770"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 04 19:49:36 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 11:00:16 2009 -0700"
      },
      "message": "Teach Project how to relink a .git/ in the work tree\n\nThe _LinkWorkTree method can now be used to relink the work tree,\nsuch as if the real repository was moved to a different location\non disk.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "98ea26b8d842d11afe6326f026ba15644dc40770",
      "tree": "e78cc2f8669d24d8c5078239d1aef3964da21c2b",
      "parents": [
        "c24c720b6135a8f7975bf9af265124eee2d464cb"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 04 19:19:11 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 03 11:00:16 2009 -0700"
      },
      "message": "Allow callers to reset the git config cache\n\nIf commands modify the git config too rapidly we might not notice\nthe .git/config file has been modified, as they could run in the\nsame filesystem timestamp window and thus not cause a change on\nthe config\u0027s mtime.  This can cause repo to miss re-reading the\nconfig file after running a command.\n\nAllowing the cache to be flushed forces us to re-read the config.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "c24c720b6135a8f7975bf9af265124eee2d464cb",
      "tree": "c1460ab9ad60850aed68b25ba6d98a931adc352e",
      "parents": [
        "2d1a3968971366fab7000664959a2d5a39b48996"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 02 16:12:57 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 02 16:12:57 2009 -0700"
      },
      "message": "Fix error parsing a non-existant configuration file\n\nIf a file (e.g. ~/.gitconfig) does not exist, we get None\nhere rather than a string.  NoneType lacks rstrip() so we\ncannot strip it.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2d1a3968971366fab7000664959a2d5a39b48996",
      "tree": "1ddc4efeb0c045d32f25716021b1d017e3447bc4",
      "parents": [
        "1dcb58a7d0f07bf358ba485733580413ebe2478b"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 02 13:18:42 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 02 13:18:55 2009 -0700"
      },
      "message": "Document how to contribute to the repo project\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "1dcb58a7d0f07bf358ba485733580413ebe2478b",
      "tree": "d6aba27e0585a06d103cf859339f5bdb5c4f101a",
      "parents": [
        "37dbf2bf0fa799530052ffd010dadbd4c01b7746"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 02 12:45:47 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 02 12:45:47 2009 -0700"
      },
      "message": "Support GIT_EDITOR\u003d\u0027vim -c \"set textwidth\u003d80\"\u0027\n\nIf there are shell special characters in the editor string, we must\nuse /bin/sh to parse and execute it, rather than trying to rely on\na simple split(\u0027 \u0027).  This avoids vim starting up with two empty\nbuffers, due to a misparsed command line.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "37dbf2bf0fa799530052ffd010dadbd4c01b7746",
      "tree": "9e9be8619020ba6b6de2bc28ba5da94fa69e6188",
      "parents": [
        "438c54713a7ca56fba2a7985b6563aa076b17169"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 02 10:53:04 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 02 10:53:04 2009 -0700"
      },
      "message": "Try to prevent \u0027repo sync\u0027 as a user name\n\nWhen someone copies and pastes a setup line from a web page,\nthey might actually copy \u0027repo sync\u0027 onto the clipboard and wind\nup pasting it into the \"Your Name\" prompt.  This means they will\ninitialize their client with the user name of \"repo sync\", creating\nsome rather funny looking commits later on.  For example:\n\n  To setup your source tree:\n\n    mkdir ~/code\n    cd ~/code\n    repo init -u git://....\n    repo sync\n\nIf this entire block was just blindly copy and pasted into the\nterminal, the shell won\u0027t read \"repo sync\" but \"repo init\" will.\n\nBy showing the user their full identity string, and asking them\nto confirm it before we continue, we can give the hapless user a\nchance to recover from this mistake, without unfairly harming those\nwho were actually named \u0027repo\u0027 by their parents.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "438c54713a7ca56fba2a7985b6563aa076b17169",
      "tree": "cdb2d8cfd5e05d3659f9b7bc9c5a5191d322df5f",
      "parents": [
        "e020ebee4e3e4e2ddefd72d41ac0035e6d528725"
      ],
      "author": {
        "name": "David Aguilar",
        "email": "davvid@gmail.com",
        "time": "Sun Jun 28 15:09:16 2009 -0700"
      },
      "committer": {
        "name": "David Aguilar",
        "email": "davvid@gmail.com",
        "time": "Mon Jun 29 00:24:36 2009 -0700"
      },
      "message": "git_config: handle configuration entries with no values\n\nA git-config entry with no value was preventing repo\nfrom initializing.  This modifies _ReadGit() to handle\nconfig entries with empty values.\n\nSigned-off-by: David Aguilar \u003cdavvid@gmail.com\u003e\nReported-by: Josh Guilfoyle \u003cjasta00@gmail.com\u003e\n"
    },
    {
      "commit": "e020ebee4e3e4e2ddefd72d41ac0035e6d528725",
      "tree": "0e98ff750c6984fd24146fc0b96a4e8865b35e17",
      "parents": [
        "21c5c34ee28036e595aab3cfc72e58c6c8f526b3"
      ],
      "author": {
        "name": "David Aguilar",
        "email": "davvid@gmail.com",
        "time": "Sun Jun 28 15:08:56 2009 -0700"
      },
      "committer": {
        "name": "David Aguilar",
        "email": "davvid@gmail.com",
        "time": "Sun Jun 28 15:08:56 2009 -0700"
      },
      "message": ".gitignore: add an entry for repopickles\n\nSigned-off-by: David Aguilar \u003cdavvid@gmail.com\u003e\n"
    },
    {
      "commit": "21c5c34ee28036e595aab3cfc72e58c6c8f526b3",
      "tree": "f40717343efa47e15535172cf0b4bf776a870891",
      "parents": [
        "54fccd71fbdc60adf99b9a9bf4712c121d4312ba"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 25 16:47:30 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 25 16:47:30 2009 -0700"
      },
      "message": "Support detached HEAD in manifest repository\n\nIf the manifest repository is on a detached HEAD and we are parsing\nan XML formatted manifest we should simply set the branch property\nto None, rather than crash with an AttributeError.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "54fccd71fbdc60adf99b9a9bf4712c121d4312ba",
      "tree": "d51eb84344c0433e12335b1000ce3526b1368cf8",
      "parents": [
        "fb5c8fd948dea211cd8f43477855de44c273a1bf"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jun 24 07:09:51 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jun 24 07:15:21 2009 -0700"
      },
      "message": "Document any crashes from the user\u0027s text editor\n\nRather than failing with no information, display the child exit\nstatus and the command line we tried to use to edit a text file.\nThere may be some useful information to help understand the crash.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "fb5c8fd948dea211cd8f43477855de44c273a1bf",
      "tree": "2cce2f23bf0c4c013fca6d3531b59bedf9759621",
      "parents": [
        "26120ca18dd8c2567b0df5a533d52d53c4111bc2"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jun 16 14:57:46 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jun 16 14:59:19 2009 -0700"
      },
      "message": "Fix invalid use of try-catch\n\nIts try-except in Python.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "26120ca18dd8c2567b0df5a533d52d53c4111bc2",
      "tree": "08168f9a38f9498fb8abb348204a5bb97dcf1e7c",
      "parents": [
        "7da73d6f3ba579c67e58499b785dc4ac5beb9391"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jun 16 11:49:10 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jun 16 11:49:10 2009 -0700"
      },
      "message": "Don\u0027t crash if the ssh client is already dead\n\nIf the SSH client terminated abnormally in the background (e.g. the\nserver shutdown while we were doing a sync) then the pid won\u0027t exist.\nInstead of crashing, ignore it, the result we wanted (a non-orphaned\nssh process) is already acheived.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "7da73d6f3ba579c67e58499b785dc4ac5beb9391",
      "tree": "d23bc6178fbd43b4ef904d8fcf9f5db318d56209",
      "parents": [
        "f0d4c36701613dc9c305208d81b139208e40414c"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 17:35:43 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 17:35:43 2009 -0700"
      },
      "message": "branches: Describe output format in `repo help branches`\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "f0d4c36701613dc9c305208d81b139208e40414c",
      "tree": "e33abb1c63aeacd3160aad4301025b4cde056208",
      "parents": [
        "2ec00b92724982708071dc0eed707659468d2bcf"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 09:33:48 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 09:33:48 2009 -0700"
      },
      "message": "grep: Only use --color on git 1.6.3 and later\n\nThe --color flag wasn\u0027t introduced until git 1.6.3.  Prior to that\nversion, `git grep --color` just produces a fatal error, as it is\nan unsupported option.  Since this is just pretty output and is not\ncritical to execution, we can simply omit the option if the version\nof git we are running on doesn\u0027t support it.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2ec00b92724982708071dc0eed707659468d2bcf",
      "tree": "4af657b8164ea30575b99852a60012ea9ad8e24e",
      "parents": [
        "2a3a81b51f1aee5a2da789d07d14cde61c96e8b7"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 09:32:50 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 09:32:50 2009 -0700"
      },
      "message": "Refactor git version detection for reuse\n\nThis way we can use it to detect feature support in the underlying\ngit, such as new options or commands that have been added in more\nrecent versions.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2a3a81b51f1aee5a2da789d07d14cde61c96e8b7",
      "tree": "83c0e16790ce993efb6be4a8300a2943cecb83ba",
      "parents": [
        "7b4f43542a5dec931f73076d891f8509a69f98e8"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 09:10:07 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 09:10:07 2009 -0700"
      },
      "message": "Ignore EOFError when reading a truncated pickle file\n\nIf the pickle config file is 0 bytes in length,  we may have\ncrashed (or been aborted) while writing the file out to disk.\nInstead of crashing with a backtrace, just treat the file as\nthough it wasn\u0027t present and load off a `git config` fork.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "7b4f43542a5dec931f73076d891f8509a69f98e8",
      "tree": "4eb3da5243a341a3c77969f081bbf87cb8bec99d",
      "parents": [
        "9fb29ce123ad26bf1497144a40e337aff8c51ecb"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 09:06:35 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jun 12 09:08:34 2009 -0700"
      },
      "message": "Add missing return False to preconnect\n\nNoticed by users on repo-discuss, we were missing a return False\nhere to signal that SSH control master was not used to setup the\nnetwork connection.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "9fb29ce123ad26bf1497144a40e337aff8c51ecb",
      "tree": "f23b28c647529b40532f2e5bb7a39c7b3af7ec81",
      "parents": [
        "3a68bb4c7f50897c0dbca59ca47aef463a9ad8d0"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 04 20:41:02 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 04 20:41:26 2009 -0700"
      },
      "message": "sync: Keep the project.list file sorted\n\nIts easier to locate an entry visually if the file is sorted.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "3a68bb4c7f50897c0dbca59ca47aef463a9ad8d0",
      "tree": "7d469d0d1c996106fa5a90747ee644f7bcda881e",
      "parents": [
        "cd1d7ff81e0b4ab481f83ff883505dbf2442d5be"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 04 16:18:09 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 04 16:21:01 2009 -0700"
      },
      "message": "sync: Tolerate blank lines in project.list\n\nIf a line is blank in project.list, its not a relevant project path,\nso skip over it.  Existing project.list files may have blank lines if\nsync was run with no projects at all, and the file was created empty.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "cd1d7ff81e0b4ab481f83ff883505dbf2442d5be",
      "tree": "e3240e2f0faea4c065f00b0fb07487d2b9747e31",
      "parents": [
        "da88ff4411e02225a6d511666ed82f7f9711a752"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 04 16:15:53 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 04 16:20:02 2009 -0700"
      },
      "message": "sync: Don\u0027t process project.list in a mirror\n\nWe have no working tree, so we cannot update the project.list\nstate file, nor should we try to delete a directory if a project is\nremoved from the manifest.  Clients would still need the repository\nfor historical records.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "da88ff4411e02225a6d511666ed82f7f9711a752",
      "tree": "e6f1cfb44f76c703dcef9ef5168360d94f5a22a3",
      "parents": [
        "8135cdc53c8737c242a5ba122491c9308a3407d8"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jun 03 11:09:12 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jun 03 11:09:31 2009 -0700"
      },
      "message": "Silence \u0027Current branch %s is up to date\u0027 during sync\n\nWe accidentally introduced this message during 1.6.8 by always\ninvoking `git rebase` when there were no new commits from the\nupstream, but the user had local commits.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "8135cdc53c8737c242a5ba122491c9308a3407d8",
      "tree": "06242ed7759f379e1836598a15cf2fcc91938daf",
      "parents": [
        "4f2517ff1174cd485f0ac93705b0fa9348595f6f"
      ],
      "author": {
        "name": "Jaikumar Ganesh",
        "email": "jaikumar@google.com",
        "time": "Tue Jun 02 15:07:44 2009 -0700"
      },
      "committer": {
        "name": "Jaikumar Ganesh",
        "email": "jaikumar@google.com",
        "time": "Tue Jun 02 15:08:45 2009 -0700"
      },
      "message": "Delete empty parent subdirs after deleting obsolete paths.\n\nAfter sync, we delete obsolete project paths.\nIterate and delete parent subdirs which are empty.\nTested on projects within subdirectories.\n"
    },
    {
      "commit": "4f2517ff1174cd485f0ac93705b0fa9348595f6f",
      "tree": "3d1db8ebf482ca75e8d5d75a589d4b578659f8cb",
      "parents": [
        "fe200eeb520e1b50c00d359ca9e138f6149ce0f2"
      ],
      "author": {
        "name": "Jaikumar Ganesh",
        "email": "jaikumar@google.com",
        "time": "Mon Jun 01 21:10:33 2009 -0700"
      },
      "committer": {
        "name": "Jaikumar Ganesh",
        "email": "jaikumar@google.com",
        "time": "Tue Jun 02 11:00:53 2009 -0700"
      },
      "message": "Update project paths after sync.\n\nAfter a repo sync, some of the project paths might need\nto be removed. This changes maintains a list of project\npaths from the previous sync operation and compares.\n"
    },
    {
      "commit": "fe200eeb520e1b50c00d359ca9e138f6149ce0f2",
      "tree": "9b99437d382d6de77956c1cad57b62aceb41e52a",
      "parents": [
        "078a8b270ff7b8b8c3da5029b1d3ff690fb94cc1"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Jun 01 15:28:21 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Jun 01 15:28:21 2009 -0700"
      },
      "message": "Fix unnecessary self in project.py\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "078a8b270ff7b8b8c3da5029b1d3ff690fb94cc1",
      "tree": "fd882674144c816a0adc9d013d3def5f484c7122",
      "parents": [
        "3c8dea1f8d7c4257d080f9f34159cdb2fffb81e6"
      ],
      "author": {
        "name": "Kis Gergely",
        "email": "gergely.kis@mattakis.com",
        "time": "Mon Jun 01 23:35:56 2009 +0200"
      },
      "committer": {
        "name": "Kis Gergely",
        "email": "gergely.kis@mattakis.com",
        "time": "Tue Jun 02 00:09:07 2009 +0200"
      },
      "message": "Add PyDev project files to repo\n"
    },
    {
      "commit": "3c8dea1f8d7c4257d080f9f34159cdb2fffb81e6",
      "tree": "2a5e48ce93bc913076034f88f8878e4bfffef4dc",
      "parents": [
        "8ad8a0e61d919e76f521f3124c91bd46fbaa84e2"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 18:38:17 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 18:45:20 2009 -0700"
      },
      "message": "Change project.revision to revisionExpr and revisionId\n\nThe revisionExpr field now holds an expression from the manifest,\nsuch as \"refs/heads/master\", while revisionId holds the current\ncommit-ish SHA-1 of the revisionExpr.  Currently that is only\nfilled in if the manifest points directly to a SHA-1.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "8ad8a0e61d919e76f521f3124c91bd46fbaa84e2",
      "tree": "fba74635a3cab4aecd5f9d7dd8672756db3e67e8",
      "parents": [
        "d1f70d9929ddd2748ccc9c1dd2f9603068e1f3e6"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 18:28:25 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 18:45:17 2009 -0700"
      },
      "message": "Change DWIMery hack for dealing with rewound remote branch\n\nThe trick of looking at the reflog for the remote tracking branch\nand only going back one commit works some of the time, but not all of\nthe time.  Its sort of relying on the fact that the user didn\u0027t use\n`repo sync -n` or `git fetch` to only update the tracking branches\nand skip the working directory update.\n\nDoing this right requires looking through the history of the SHA-1\nsource (what the upstream used to be) and finding a spot where the\nDAG diveraged away suddenly, and consider that to be the rewind\npoint.  That\u0027s really difficult to do, as we don\u0027t have a clear\npicture of what that old point was.\n\nA close approximation is to list all of the commits that are in\nHEAD, but not the new upstream, and rebase all of those where the\ncommitter email address is this user\u0027s email address.  In most cases,\nthis will effectively rebase only the user\u0027s new original work.\n\nIf the user is the project maintainer and rewound the branch\nthemselves, and they don\u0027t want all of the commits they have created\nto be rebased onto the new upstream, they should handle the rebase\non their own, after the sync is complete.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "d1f70d9929ddd2748ccc9c1dd2f9603068e1f3e6",
      "tree": "746fa0d1ace702f114357d1798bc67eddd1b79a9",
      "parents": [
        "c8a300f6397dad7db00c3654ff6e50e9519ed7c9"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 14:58:02 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 09:31:28 2009 -0700"
      },
      "message": "Refactor how projects parse remotes so it can be replaced\n\nWe now feed Project a RemoteSpec, instead of the Remote directly\nfrom the XmlManifest.  This way the RemoteSpec already has the\nfull project URL, rather than just the base, permitting other\ntypes of manifests to produce the URL in their own style.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "c8a300f6397dad7db00c3654ff6e50e9519ed7c9",
      "tree": "4bd29d3d580e53965b66ed2d10e13507584fe577",
      "parents": [
        "1b34c9118ed86a15b0bc1094804c095dd7be33cb"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon May 18 13:19:57 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 09:31:28 2009 -0700"
      },
      "message": "Refactor Manifest to be XmlManifest\n\nWe\u0027ll soon be supporting two different manifest formats, but we\ncan\u0027t immediately remove support for the current XML one that is\nin wide spread use within Android.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "1b34c9118ed86a15b0bc1094804c095dd7be33cb",
      "tree": "ed27e9a6636f99f1c8e917028c52bb060a52179a",
      "parents": [
        "366ad214b82cadc32920b371f7f99f3f6894ec6f"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu May 21 18:52:49 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 09:31:00 2009 -0700"
      },
      "message": "Allow callers of GitConfig to specify the pickle file path\n\nThis way we can put it in another directory than the config file\nitself, e.g. hide it inside \".git\" when parsing a \".gitmodules\"\nfile from the working tree.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "366ad214b82cadc32920b371f7f99f3f6894ec6f",
      "tree": "c77245ffbd172a5f3a6cc6c41dbe14eb4140e9d5",
      "parents": [
        "242b52690d327a77e47140509085f406155c5722"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 12:47:37 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 13:02:00 2009 -0700"
      },
      "message": "Teach GitConfig how to yield subsection names\n\nThis can be useful when pulling apart a configuration file, like\nfinding all entries which match submodule.*.*.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "242b52690d327a77e47140509085f406155c5722",
      "tree": "92b58b51e6f0b38bea6cc98a0c67604c5d08b7f1",
      "parents": [
        "4cc70ce501321733a1b389e685e964d34b3b4cf5"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 13:00:29 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 13:01:52 2009 -0700"
      },
      "message": "Remove support for the extra \u003cremote\u003e definitions in manifests\n\nThese aren\u0027t that widely used, and actually make it difficult for\nusers to fully mirror a forest of repositories, and then permit\nsomeone else to clone off that forest, rather then the original\nupstream servers.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "4cc70ce501321733a1b389e685e964d34b3b4cf5",
      "tree": "d8d30b416faf3cbfe20d07ef3d0f020a16649791",
      "parents": [
        "498a0e8a79ab76eeb6adc40f12b04d59820716f9"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 12:49:46 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 13:01:48 2009 -0700"
      },
      "message": "Remove unused parsing support for \u003crequire commit\u003d\"\"/\u003e\n\nWe haven\u0027t supported this in a while, but the parser was still here.\nIts all dead code, so strip it out.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "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": "2f968c943b1c6f61f867fa9b87105836e0e5f354",
      "tree": "8593b144cfb90a1780ec86591b45039c4c86422f",
      "parents": [
        "2b5b4ac29275ee49184a8aee98f60b744890f5bb"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 30 14:30:28 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 30 14:30:28 2009 -0700"
      },
      "message": "Fix ssh://user@hostname/ style URLs parsing\n\nI only tested this with ssh://hostname/ style URLs, so I failed\nto test ssh://user@hostname/ format, which failed if the hostname\nportion was longer than 1 character.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2b5b4ac29275ee49184a8aee98f60b744890f5bb",
      "tree": "badc77e3f0fc036888766b39386be0e595551472",
      "parents": [
        "6f6cd77a50fd4ffff360d4aee1c6bc05bfb802c1"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 23 17:22:18 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 23 17:22:18 2009 -0700"
      },
      "message": "Disable SSH ControlMaster option on Cygwin\n\nBug: REPO-29\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\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": "896d5dffd313a2ad91fd8bee750241a6512b25dc",
      "tree": "c2f11ce9393b2f27cff759578cad6bb5c7bdf486",
      "parents": [
        "9360966bd2ff68fd7257b50df1a7fcb5e62fe189"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 14:51:04 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 14:51:04 2009 -0700"
      },
      "message": "Fix UnboundLocalError: local variable \u0027port\u0027 when using SSH\n\nIf the SSH URL doesn\u0027t contain a port number, but uses the ssh://\nor git+ssh:// syntax we raised a Python runtime error due to the\n\u0027port\u0027 local variable not being assigned a value.  Default it to\nthe IANA assigned port for SSH, 22.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "9360966bd2ff68fd7257b50df1a7fcb5e62fe189",
      "tree": "d9e7183ddde5e647ae2a417b278e7c1e90a5379c",
      "parents": [
        "ef9ce1d0a556211687cec6a782de366407255f41"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 10:50:33 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 10:54:59 2009 -0700"
      },
      "message": "Perform copy file activity when creating a new work directory\n\nPerformance improvements in repo sync caused us to skip out of the\ninitial Sync_LocalHalf without ever running CopyFiles, so we didn\u0027t\ncreate the top level Makefile in new clients whose manifest request\none with a \u003ccopyfile\u003e element.\n\nNow we run CopyFiles after the initial read-tree that populates\nthe project working directory.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\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": "05f66b6836ffa4a0a309a4909cb3f8c4a7351727",
      "tree": "9e12c76532af7eebe67d462d215740b5e2953d8c",
      "parents": [
        "eb7af87bcfc67798b58a99422988b9c368d7d642"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 08:26:32 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 08:28:06 2009 -0700"
      },
      "message": "Fix \u0027repo sync\u0027 rebase logic on a published branch\n\nIf the current branch is published, but all published commits are\nmerged into the manifest revision, but there is also at least one\nunpublished commit on the current branch, we should rebase the\nunpublished commit, rather than creating a merge commit.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\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": "d63bbf44dc22994ad3cdd73cf852f3d91d87b3f8",
      "tree": "f3fca75ef50280259369c607a7320ba5f02dad02",
      "parents": [
        "a8421a128a2f0a5e6dcca7e37e36ceb63c9291c4"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 08:05:27 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Apr 21 08:05:27 2009 -0700"
      },
      "message": "Work around \u0027ControlPath too long\u0027 on Mac OS X\n\nMac OS X sets TMPDIR to a very long path within /var, so long\nthat a socket created in that location is too big for a struct\nsockaddr_un on the platform, resulting in OpenSSH being unable\nto create or bind to a socket in that location.\n\nInstead we try to use the very short and very common /tmp, but\nfall back to the guessed default if /tmp does not exist.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "a8421a128a2f0a5e6dcca7e37e36ceb63c9291c4",
      "tree": "e1015c05e22d29ab23303bd88ba33c06f8631208",
      "parents": [
        "fb2316146f6e3036e0cc3e08653920964a428a15"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 16:57:46 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 16:57:46 2009 -0700"
      },
      "message": "Fix launching of editor under \u0027repo upload --replace\u0027\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "fb2316146f6e3036e0cc3e08653920964a428a15",
      "tree": "f19c5c65a035f547ada03496f1576524e4602665",
      "parents": [
        "8bd5e60b16080008771afcaa7de7084487b84780"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 10 18:53:46 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 16:50:47 2009 -0700"
      },
      "message": "Automatically use SSH control master support during sync\n\nBy creating a background ssh \"control master\" process which lives\nfor the duration of our sync cycle we can easily cut the time for\na no-op sync of 132 projects from 60s to 18s.\n\nBug: REPO-11\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "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": "3d2cdd0ea533e885183ba2952b2bfa05eb1d05ab",
      "tree": "a55b6335c7073432914d5c22b2423f4e08b6f630",
      "parents": [
        "4e3d6739a17dcc9efc5adb1d915be0a886db700e"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:26:10 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 15:26:10 2009 -0700"
      },
      "message": "Highlight projects which still have sync failures during \u0027repo status\u0027\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": "76ca9f8145f367f83df19981da4dd934fdda471b",
      "tree": "d6c095928fd2b1131972206b3c3f498843a736a6",
      "parents": [
        "accc56d82b902e7c7a22401db710958fcb1c7b58"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 14:48:03 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 14:48:03 2009 -0700"
      },
      "message": "Make usage of open safer by setting binary mode and closing fds\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "accc56d82b902e7c7a22401db710958fcb1c7b58",
      "tree": "3c3d233fe188315df9d87ddc247672a92167a3f5",
      "parents": [
        "db45da12089bf131579d100ff7990cbc18d07325"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 14:45:51 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 14:45:51 2009 -0700"
      },
      "message": "Speed up \u0027repo start\u0027 by removing some forks\n\nIts quite common for most projects to be matching the current\nmanifest revision, as most developers only modify one or two projects\nat any one time.  We can speed up `repo start foo` (that impacts\nthe entire client) by performing most of the branch creation and\nswitch operations in pure Python, and thus avoid 4 forks per project.\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": "a490f03dc23792a86bbe5b2b8c89b32f39774c80",
      "tree": "60f1c904b47259643b40f0d7267a2136b3519c7a",
      "parents": [
        "deec0536d657be178e8eed2d597afb9fdc716e99"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:25:58 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sat Apr 18 11:25:58 2009 -0700"
      },
      "message": "Correct note about local_manifest.xml capabilities\n\nWith the \u003cremove-project\u003e element we can remove projects, and\nfully replace them with a different definition.  So this note\nis out of date.\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"
    }
  ],
  "next": "06e556d202cc6944227667a0664ec7b8eca32076"
}
