)]}'
{
  "log": [
    {
      "commit": "75cc3533801a012c1fe6676e76148416a70693ca",
      "tree": "c31c72c68ad62b857d01ad67f9af3236c35182a0",
      "parents": [
        "57365c98cc227255f50ab3d71462204c804eb975"
      ],
      "author": {
        "name": "Yang Zhenhui",
        "email": "zhenhui.yang@sonymobile.com",
        "time": "Tue Oct 23 15:41:54 2012 +0800"
      },
      "committer": {
        "name": "Bruce Zu",
        "email": "bruce.zu@sonymobile.com",
        "time": "Fri Oct 26 15:40:17 2012 +0800"
      },
      "message": "Show user about not initializing repo in current directory\n\nIf the parent of current directory has an initialized repo,\nfor example, if the current directory is\n\u0027/home/users/harry/platform/ics\u0027, and there is an initialized repo\nin harry\u0027s home directory \u0027/home/users/harry/.repo\u0027, when user\nrun \u0027repo init\u0027 command, repo is always initialized to parent\ndirectory in \u0027/home/users/harry/.repo\u0027, but most of time user\nintends to initialize repo in the current directory, this patch\ntells user how to do it.\n\nChange-Id: Id7a76fb18ec0af243432c29605140d60f3de85ca\n"
    },
    {
      "commit": "57365c98cc227255f50ab3d71462204c804eb975",
      "tree": "04ade83292c018ffd23beae5b228e4b6f688530e",
      "parents": [
        "dc96476af37558c8eaf6d25087d4a604612642dd",
        "188572170e8cdf28df55a5ca90ed70d14b72b804"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 25 17:38:05 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 17:38:05 2012 -0700"
      },
      "message": "Merge \"sync: Run gc --auto in parallel\""
    },
    {
      "commit": "2577cec0952899040cd8c6523f69ece4cdc005ac",
      "tree": "792f82c975d0d5d039ac3a6c6adc8404d87e8b2c",
      "parents": [
        "e48d34659ebda45431512ab2478558f8e4cdd46c",
        "d947858325ae70ff9c0b2f463a9e8c4ffd00002a"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 25 17:35:15 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 17:35:15 2012 -0700"
      },
      "message": "Merge \"sync: Keep a moving average of last fetch times\""
    },
    {
      "commit": "e48d34659ebda45431512ab2478558f8e4cdd46c",
      "tree": "ab38328b72acf6cb6898f2b6ed3cb859c48249fe",
      "parents": [
        "ab8f911a6721424ddc7cda7ebd2a07270a5909b1",
        "67700e9b90a38cc3719c818bc967153e8b7b429e"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 25 17:33:36 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 17:33:36 2012 -0700"
      },
      "message": "Merge \"sync: Order projects according to last fetch time\""
    },
    {
      "commit": "ab8f911a6721424ddc7cda7ebd2a07270a5909b1",
      "tree": "cf4b0cfab756dc78747894189ef918a262811d48",
      "parents": [
        "608aff7f624e35348ff9fab74bad1d6921944238"
      ],
      "author": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Thu Oct 25 13:44:11 2012 -0700"
      },
      "committer": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Thu Oct 25 13:55:49 2012 -0700"
      },
      "message": "Fix pylint warnings introduced by the submodule patch\n\n\"69998b0 Represent git-submodule as nested projects\" has introduced a\nfew pylint warnings.\n\nW0612:1439,8:Project._GetSubmodules.get_submodules: Unused variable \u0027sub_gitdir\u0027\nW0613:1424,36:Project._GetSubmodules.get_submodules: Unused argument \u0027path\u0027\nW0612:1450,25:Project._GetSubmodules.parse_gitmodules: Unused variable \u0027e\u0027\nW0622:516,8:Sync.Execute: Redefining built-in \u0027all\u0027\n\nChange-Id: I84378e2832ed1b5ab023e394d53b22dcea799ba4\n"
    },
    {
      "commit": "608aff7f624e35348ff9fab74bad1d6921944238",
      "tree": "e1bdbb8af5927dd226d8e22dc382fd24c4cdfa5e",
      "parents": [
        "13657c407d0424d0866993bea39ed01094caa1c1",
        "a5be53f9c809009e67f217c00b8f30246aacc237"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 25 10:03:36 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 10:03:37 2012 -0700"
      },
      "message": "Merge \"Use modern Python exception syntax\""
    },
    {
      "commit": "13657c407d0424d0866993bea39ed01094caa1c1",
      "tree": "74f69003f5f71602e7ed0a6d2d5dd92d03f95caa",
      "parents": [
        "e4ed8f65f376009f70fab0e7978fdfc223f23a76",
        "d75c669fac50f5224b567127291976fd36b31546"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 25 10:00:41 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 25 10:00:42 2012 -0700"
      },
      "message": "Merge \"Add regex matching to repo list command\""
    },
    {
      "commit": "188572170e8cdf28df55a5ca90ed70d14b72b804",
      "tree": "d64ad4724552898c9c49ba19f715c74c5caa504c",
      "parents": [
        "091f893625269fd12adadf7d1f60c21b4b83e779"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Oct 23 17:02:59 2012 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Thu Oct 25 08:12:48 2012 -0700"
      },
      "message": "sync: Run gc --auto in parallel\n\nWe can\u0027t just let this run wild with a high (or even low) -j, since\nthat would hose a system. Instead, limit the total number of threads\nacross all git gc subprocesses to the number of CPUs reported by the\nmultiprocessing module (available in Python 2.6 and above).\n\nChange-Id: Icca0161a1e6116ffa5f7cfc6f5faecda510a7fb9\n"
    },
    {
      "commit": "d75c669fac50f5224b567127291976fd36b31546",
      "tree": "84a7973f8d169b73168d314aa4061424bbd07d2c",
      "parents": [
        "69998b0c6ff724bf620480140ccce648fec7d6a9"
      ],
      "author": {
        "name": "Olof Johansson",
        "email": "olof.johansson@sonymobile.com",
        "time": "Tue Oct 09 08:25:55 2012 +0200"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Oct 25 15:49:13 2012 +0900"
      },
      "message": "Add regex matching to repo list command\n\nThe repo list -r command will execute a regex search for every\nargument provided on both the project name and the project\nworktree path.\n\nUseful for finding rarely used gits.\n\nChange-Id: Iaff90dd36c240b3d5d74817d11469be22d77ae03\n"
    },
    {
      "commit": "d947858325ae70ff9c0b2f463a9e8c4ffd00002a",
      "tree": "edf33164dfdd829eae74244198f790629d2fabc8",
      "parents": [
        "67700e9b90a38cc3719c818bc967153e8b7b429e"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Oct 23 16:35:39 2012 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Oct 24 14:52:07 2012 -0700"
      },
      "message": "sync: Keep a moving average of last fetch times\n\nTry to more accurately estimate which projects take the longest to\nsync by keeping an exponentially weighted moving average (a\u003d0.5) of\nfetch times, rather than just recording the last observation. This\nshould discount individual outliers (e.g. an unusually large project\nupdate) and hopefully allow truly slow repos to bubble to the top.\n\nChange-Id: I72b2508cb1266e8a19cf15b616d8a7fc08098cb3\n"
    },
    {
      "commit": "67700e9b90a38cc3719c818bc967153e8b7b429e",
      "tree": "57768c3936f66cb28b623c13e59c2bc1dba247ff",
      "parents": [
        "5c6eeac8f0350fd6b14cf226ffcff655f1dd9582"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Oct 23 15:00:54 2012 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Oct 24 14:51:58 2012 -0700"
      },
      "message": "sync: Order projects according to last fetch time\n\nSome projects may consistently take longer to fetch than others, for\nexample a more active project may have many more Gerrit changes than a\nless active project, which take longer to transfer. Use a simple\nheuristic based on the last fetch time to fetch slower projects first,\nso we do not tend to spend the end of the sync fetching a small number\nof outliers.\n\nThis algorithm is probably not optimal, and due to inter-run latency\nvariance and Python thread scheduling, we may not even have good\nestimates of a project sync time.\n\nChange-Id: I9a463f214b3ed742e4d807c42925b62cb8b1745b\n"
    },
    {
      "commit": "a5be53f9c809009e67f217c00b8f30246aacc237",
      "tree": "7ab0da1fd31968eee882de81df8c9b93ae52fdfb",
      "parents": [
        "9ed12c5d9cda1f010bc173b0bc622d59e96b0dd0"
      ],
      "author": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Sun Sep 09 15:37:57 2012 -0700"
      },
      "committer": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Tue Oct 23 21:35:59 2012 -0700"
      },
      "message": "Use modern Python exception syntax\n\n\"except Exception as e\" instead of \"except Exception, e\"\n\nThis is part of a transition to supporting Python 3.  Python \u003e\u003d 2.6\nsupport \"as\" syntax.\n\nNote: this removes Python 2.5 support.\n\nChange-Id: I309599f3981bba2b46111c43102bee38ff132803\n"
    },
    {
      "commit": "4f7bdea9d24c4eb52f83ada2b67b88ad67cb57a7",
      "tree": "49c93020cd026d13f43325b43d13266542cdc5a1",
      "parents": [
        "69998b0c6ff724bf620480140ccce648fec7d6a9"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Oct 22 12:50:15 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Oct 24 10:18:13 2012 +0900"
      },
      "message": "Add pylint configuration and instructions\n\npylint configuration file (.pylintrc) is added, and submission\ninstructions are updated to include pylint usage steps.\n\nDeprecated pylint suppression (`disable-msg`) is updated in a few\nmodules to make it work properly with the latest version (0.26).\n\nChange-Id: I4ec2ef318e23557a374ecdbf40fe12645766830c\n"
    },
    {
      "commit": "69998b0c6ff724bf620480140ccce648fec7d6a9",
      "tree": "b6f9c4c00b04a0f140074c4c2dba91ed4f055b11",
      "parents": [
        "5c6eeac8f0350fd6b14cf226ffcff655f1dd9582"
      ],
      "author": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Wed Jan 11 11:28:42 2012 +0800"
      },
      "committer": {
        "name": "Che-Liang Chiou",
        "email": "clchiou@google.com",
        "time": "Tue Oct 23 16:08:58 2012 -0700"
      },
      "message": "Represent git-submodule as nested projects\n\nWe need a representation of git-submodule in repo; otherwise repo will\nnot sync submodules, and leave workspace in a broken state.  Of course\nthis will not be a problem if all projects are owned by the owner of the\nmanifest file, who may simply choose not to use git-submodule in all\nprojects.  However, this is not possible in practice because manifest\nfile owner is unlikely to own all upstream projects.\n\nAs git submodules are simply git repositories, it is natural to treat\nthem as plain repo projects that live inside a repo project.  That is,\nwe could use recursively declared projects to denote the is-submodule\nrelation of git repositories.\n\nThe behavior of repo remains the same to projects that do not have a\nsub-project within.  As for parent projects, repo fetches them and their\nsub-projects as normal projects, and then checks out subprojects at the\ncommit specified in parent\u0027s commit object.  The sub-project is fetched\nat a path relative to parent project\u0027s working directory; so the path\nspecified in manifest file should match that of .gitmodules file.\n\nIf a submodule is not registered in repo manifest, repo will derive its\nproperties from itself and its parent project, which might not always be\ncorrect.  In such cases, the subproject is called a derived subproject.\n\nTo a user, a sub-project is merely a git-submodule; so all tips of\nworking with a git-submodule apply here, too.  For example, you should\nnot run `repo sync` in a parent repository if its submodule is dirty.\n\nChange-Id: I541e9e2ac1a70304272dbe09724572aa1004eb5c\n"
    },
    {
      "commit": "5c6eeac8f0350fd6b14cf226ffcff655f1dd9582",
      "tree": "3225695b9d2a97342a49127717ea5e2bc5935a63",
      "parents": [
        "e98607248eec2b149d84efe944c12cbef419b82e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Oct 11 16:44:48 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Oct 22 12:30:14 2012 +0900"
      },
      "message": "More coding style cleanup\n\nFixing more issues found with pylint.  Some that were supposed to\nhave been fixed in the previous sweep (Ie0db839e) but were missed:\n\nC0321: More than one statement on a single line\nW0622: Redefining built-in \u0027name\u0027\n\nAnd some more:\n\nW0631: Using possibly undefined loop variable \u0027name\u0027\nW0223: Method \u0027name\u0027 is abstract in class \u0027name\u0027 but is not overridden\nW0231: __init__ method from base class \u0027name\u0027 is not called\n\nChange-Id: Ie119183708609d6279e973057a385fde864230c3\n"
    },
    {
      "commit": "2f6ab7f5b8f21b2dbfe9ae102674bd1694e94f03",
      "tree": "040f9045751d83902ea8c479304fdfa2a0061a54",
      "parents": [
        "3a6cd4200e42fbb5a21b3fb8d3c9738c0320cc63"
      ],
      "author": {
        "name": "Mickaël Salaün",
        "email": "mic@digikod.net",
        "time": "Sun Sep 30 00:37:55 2012 +0200"
      },
      "committer": {
        "name": "Mickaël Salaün",
        "email": "mic@digikod.net",
        "time": "Wed Oct 10 08:30:15 2012 +0200"
      },
      "message": "Rename \"dir\" variables\n\nThe variable name \"dir\" conflicts with the name of a Python built-in\nfunction: http://docs.python.org/library/functions.html#dir\n\nChange-Id: I850f3ec8df7563dc85e21f2876fe5e6550ca2d8f\n"
    },
    {
      "commit": "3a6cd4200e42fbb5a21b3fb8d3c9738c0320cc63",
      "tree": "68ae5094d6530453887fb35a73fd5fa55f55a034",
      "parents": [
        "25f17682ca4ecd8acc887462d4bebc7c429cf110",
        "8a68ff96057ec58e524a3e41a2d8dca7b5d016bc"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 09 14:29:46 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 09 14:29:46 2012 -0700"
      },
      "message": "Merge \"Coding style cleanup\""
    },
    {
      "commit": "25f17682ca4ecd8acc887462d4bebc7c429cf110",
      "tree": "8416b3cc2ac42cbf43452da418121f0b056ca878",
      "parents": [
        "e3b1c45aebed329cbc9ad172b1d8e812cf208117",
        "297e7c6ee69077cb063b90a32d22b0b812a95841"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Oct 09 13:46:10 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 09 13:46:10 2012 -0700"
      },
      "message": "Merge \"Expand ~ to user\u0027s home directory for --reference\""
    },
    {
      "commit": "8a68ff96057ec58e524a3e41a2d8dca7b5d016bc",
      "tree": "22f6971e8d3c4a90d11d3704602d073a852328b4",
      "parents": [
        "e3b1c45aebed329cbc9ad172b1d8e812cf208117"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Mon Sep 24 12:15:13 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Tue Oct 09 12:45:30 2012 +0200"
      },
      "message": "Coding style cleanup\n\nFix the following issues reported by pylint:\n\nC0321: More than one statement on a single line\nW0622: Redefining built-in \u0027name\u0027\nW0612: Unused variable \u0027name\u0027\nW0613: Unused argument \u0027name\u0027\nW0102: Dangerous default value \u0027value\u0027 as argument\nW0105: String statement has no effect\n\nAlso fixed a few cases of inconsistent indentation.\n\nChange-Id: Ie0db839e7c57d576cff12d8c055fe87030d00744\n"
    },
    {
      "commit": "297e7c6ee69077cb063b90a32d22b0b812a95841",
      "tree": "5e9c8fea016c7943dd3b933e228e238d171b091b",
      "parents": [
        "7119f94abaa48b3b7fb990f2a12ec5458ef3f133"
      ],
      "author": {
        "name": "Victor Boivie",
        "email": "victor.boivie@sonymobile.com",
        "time": "Fri Oct 05 14:50:05 2012 +0200"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Mon Oct 08 15:03:20 2012 +0200"
      },
      "message": "Expand ~ to user\u0027s home directory for --reference\n\nThis allows a user to have a \u0027repo init\u0027 as:\n  $ repo init -u ... --reference\u003d~/mirror\n\nChange-Id: Ib85b7c8ffca9d732132c68fe9a8d7f0ab1fa9288\n"
    },
    {
      "commit": "e3b1c45aebed329cbc9ad172b1d8e812cf208117",
      "tree": "629984135b1cea3c0a32454eaecbe806ed09ca58",
      "parents": [
        "7119f94abaa48b3b7fb990f2a12ec5458ef3f133"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Oct 03 18:04:02 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Fri Oct 05 10:34:19 2012 +0200"
      },
      "message": "Remove unreachable code\n\nChange 9bb1816b removed part of a block of code, but left the\nremaining part unreachable.  Remove it.\n\nChange-Id: Icdc6061d00e6027df32dee9a3bad3999fe7cdcbc\n"
    },
    {
      "commit": "3ff9decfd4e2f1fed71658d0f78a17895f80ff5f",
      "tree": "5ecf68da509291eaf368772f3f5c3571060651a8",
      "parents": [
        "9779565abf06d2f1e48548197be350a06c1eab9b",
        "14a6674e32b3000dbe8b7c96b0d1bb4fb0021720"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed Oct 03 16:49:12 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 03 16:49:12 2012 -0700"
      },
      "message": "Merge \"manifest: record the original revision when in -r mode.\""
    },
    {
      "commit": "14a6674e32b3000dbe8b7c96b0d1bb4fb0021720",
      "tree": "024482226fefd4c188f20f56047325b69d388a9f",
      "parents": [
        "34acdd253439448b6c08c3abfc5e7b8bd03f383f"
      ],
      "author": {
        "name": "Brian Harring",
        "email": "ferringb@google.com",
        "time": "Fri Sep 28 20:21:57 2012 -0700"
      },
      "committer": {
        "name": "Brian Harring",
        "email": "ferringb@google.com",
        "time": "Fri Sep 28 22:31:27 2012 -0700"
      },
      "message": "manifest: record the original revision when in -r mode.\n\nCurrently when doing a sync against a revision locked manifest,\nsync has no option but to fall back to sync\u0027ing the entire refs space;\nit doesn\u0027t know which ref to ask for that contains the sha1 it wants.\n\nThis sucks if we\u0027re in -c mode; thus when we generate a revision\nlocked manifest, record the originating branch- and try syncing that\nbranch first.  If the sha1 is found within that branch, this saves\nus having to pull down the rest of the repo- a potentially heavy\nsaving.\n\nIf that branch doesn\u0027t have the desired sha1, we fallback to sync\u0027ing\neverything.\n\nChange-Id: I99a5e44fa1d792dfcada76956a2363187df94cf1\n"
    },
    {
      "commit": "cf76b1bcec6386f9530636e64746502f9856b5cf",
      "tree": "15bd204cace8d3d43161f8ef91130984159e9049",
      "parents": [
        "e00aa6b923d28a3c910f85e7726e4ba1d2a9aebd"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Sep 14 10:31:42 2012 +0900"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 21 11:20:59 2012 -0700"
      },
      "message": "sync: Support manual authentication to the manifest server\n\nAdd two new command line options, -u/--manifest-server-username and\n-p/--manifest-server-password, which can be used to specify a username\nand password to authenticate to the manifest server when using the\n-s/--smart-sync or -t/--smart-tag option.\n\nIf -u and -p are not specified when using the -s or -t option, use\nauthentication credentials from the .netrc file (if there are any).\n\nAuthentication credentials from -u/-p or .netrc are not used if the\nmanifest server specified in the manifest file already includes\ncredentials.\n\nChange-Id: I6cf9540d28f6cef64c5694e8928cfe367a71d28d\n"
    },
    {
      "commit": "e00aa6b923d28a3c910f85e7726e4ba1d2a9aebd",
      "tree": "07c848b81c58e5d4a8e34ecae8606ee5fa62679e",
      "parents": [
        "86d973d24ec6771504c37eddc535dff8e03c724f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Sep 11 14:33:51 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Tue Sep 18 09:54:57 2012 +0200"
      },
      "message": "Clean up imports\n\nmanifest_xml: import `HEAD` and `R_HEADS` from correct module\nversion: import `HEAD` from correct module\n\n`HEAD` and `R_HEADS` should be imported from the git_refs module,\nwhere they are originally defined, rather than from the project\nmodule.\n\nrepo: remove unused import of readline\n\ncherry_pick: import standard modules on separate lines\nsmartsync: import subcmd modules explicitly from subcmd\n\nUse:\n  `import re\n  import sys`\nand\n  `from subcmds.sync import Sync`\n\nInstead of:\n  `import sys, re`\nand\n  `from sync import Sync`\n\nChange-Id: Ie10dd6832710939634c4f5c86b9ba5a9cd6fc92e\n"
    },
    {
      "commit": "86d973d24ec6771504c37eddc535dff8e03c724f",
      "tree": "1676f107c59efd1d92bd92cb48a9dc726bf00e59",
      "parents": [
        "34acdd253439448b6c08c3abfc5e7b8bd03f383f"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Aug 24 10:21:02 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Tue Sep 11 09:45:48 2012 +0200"
      },
      "message": "sync: Support authentication to manifest server with .netrc\n\nWhen using the --smart-sync or --smart-tag option, and the specified\nmanifest server is hosted on a server that requires authentication,\nrepo sync fails with the error: HTTP 401 Unauthorized.\n\nAdd support for getting the credentials from the .netrc file.\n\nIf a .netrc file exists in the user\u0027s home directory, and it contains\ncredentials for the hostname of the manifest server specified in the\nmanifest, use the credentials to authenticate with the manifest server\nusing the URL syntax extension for Basic Authentication:\n\n  http://user:password@host:port/path\n\nCredentials from the .netrc file are only used if the manifest server\nURL specified in the manifest does not already include credentials.\n\nChange-Id: I06e6586e8849d0cd12fa9746789e8d45d5b1f848\n"
    },
    {
      "commit": "d94aaef39e301cc912968c07d1783232bf34a174",
      "tree": "48b884fef63992e8b80127c40687a7cf5ff4c8f7",
      "parents": [
        "bd489c4eaa592af98b8b4f09b0a465e0d2b6046a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Sep 07 09:52:04 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Fri Sep 07 10:17:00 2012 +0200"
      },
      "message": "sync: Correct imports of `R_HEADS` and `HEAD`\n\n`R_HEADS` is imported twice, from both the git_refs and project\nmodules.\n\nIt is actually defined in git_refs, and in project it is imported\nfrom there, so the import of `R_HEADS` from project in the sync\nmodule is redundant.  Remove it.\n\n`HEAD` is imported from project, but like `R_HEADS` it is actually\ndefined in git_refs.  Import it from git_refs instead.\n\nChange-Id: I8e2b0217d0d9f9f4ee5ef5b8cd0b026174ac52f4\n"
    },
    {
      "commit": "bd489c4eaa592af98b8b4f09b0a465e0d2b6046a",
      "tree": "6954a16b023daaea026d122251157c0b2db39367",
      "parents": [
        "2dc810c2e4028878b9c3484866a5973d5c33479d"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Aug 23 10:21:26 2012 +0900"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 06 11:18:25 2012 -0700"
      },
      "message": "sync: catch exceptions when connecting to the manifest server\n\nWhen connecting to the manifest server, exceptions can occur but\nare not caught, resulting in the repo sync exiting with a python\ntraceback.\n\nAdd handling of the following exceptions:\n\n- IOError, which can be raised for example if the manifest server\nURL is malformed.\n- xmlrpclib.ProtocolError, which can be raised if the connection\nto the manifest server fails with HTTP error.\n- xmlrpclib.Fault, which can be raised if the RPC call fails for\nsome other reason.\n\nChange-Id: I3a4830aef0941debadd515aac776a3932e28a943\n"
    },
    {
      "commit": "bb1b5f5f863fca0e85764f5b35c117f5724d15c0",
      "tree": "0b6b8d0d6d027f2d0e0dd6fabdd4eafc6c919026",
      "parents": [
        "e2126652a3a1e08724a54091793bb29a79d31014"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Aug 13 13:11:18 2012 -0700"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 05 11:46:48 2012 -0700"
      },
      "message": "Allow projects to be specified as notdefault\n\nInstead of every group being in the group \"default\", every project\nis now in the group \"all\".   A group that should not be downloaded\nby default may be added to the group \"notdefault\".\n\nThis allows all group names to be positive (instead of removing groups\ndirectly in the manifest with -default) and offers a clear way of\nselecting every project (--groups all).\n\nChange-Id: I99cd70309adb1f8460db3bbc6eff46bdcd22256f\n"
    },
    {
      "commit": "e2126652a3a1e08724a54091793bb29a79d31014",
      "tree": "a931f598a6a2dcd7bc449ca7167799a18b0b493d",
      "parents": [
        "9a27d0111d5cf88c6b9409261707a5d7d50aaa64"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Sep 05 10:35:06 2012 +0200"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 05 11:38:41 2012 -0700"
      },
      "message": "Make \"repo sync -j\u003ccount\u003e\" stop properly on Ctrl-C.\n\nThe threaded \u0027repo sync\u0027 implementation would very often freeze the\nprocess when interrupted by the user with Ctrl-C. The only solution\nbeing to kill -9 the process explicitly from another terminal.\n\nThe reason for this is best explained here:\n\nhttp://snakesthatbite.blogspot.fr/2010/09/cpython-threading-interrupting.html\n\nThis patch makes all helper sync threads \u0027daemon\u0027, which allows the\nprocess to terminate immediately on Ctrl-C.\n\nNote that this will forcefully kill all threads in case of interruption; this\nis generally a bad thing, but:\n\n  1/ This is equivalent to calling kill -9 in another terminal, which\n     is the _only_ thing that can currently stop the process.\n\n  2/ There doesn\u0027t seem to be a way to tell the worker threads to\n     gently stop when they are in a blocking operation anyway (even\n     in the non-threaded case).\n\n+ Do the same for \"repo status -j\u003ccount\u003e\".\n\nChange-Id: Ieaf45b0eacee36f35427f8edafd87415c2aa7be4\n"
    },
    {
      "commit": "918ff85c1e9d9606e4924a0af9a8ddc2e4db692a",
      "tree": "0805e0f28ceef0c2375e53e8011fd0bfd292e869",
      "parents": [
        "3d07da82abe52d0971ea2de75f69db3359af506f"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue Aug 07 10:44:01 2012 -0700"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 04 09:30:18 2012 -0700"
      },
      "message": "`repo manifest`: default to stdout if no \"-o\"\n\nChange-Id: I1b0ff9ed5df6386f0c2a851c6c48d063199fe663\n"
    },
    {
      "commit": "3d07da82abe52d0971ea2de75f69db3359af506f",
      "tree": "9ed504bb825957a058f259b5390eef1b902745d9",
      "parents": [
        "e15c65abc25cd1d5d77ec6815a3c011b9f57ddac"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Aug 15 14:22:08 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Thu Aug 23 12:15:49 2012 +0200"
      },
      "message": "init: Improved help text for the --mirror option\n\nChange-Id: Ia6032865f9296b29524c2c25b72bd8e175b30489\n"
    },
    {
      "commit": "e15c65abc25cd1d5d77ec6815a3c011b9f57ddac",
      "tree": "43bd95e2e83abcd88c5d05b6a65393877c51028b",
      "parents": [
        "daa851f6cd9edb3851a3884fd2864f0f3dc583b2"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Aug 22 10:46:11 2012 +0900"
      },
      "committer": {
        "name": "Gustaf Lundh",
        "email": "gustaf.lundh@sonymobile.com",
        "time": "Thu Aug 23 12:15:26 2012 +0200"
      },
      "message": "Remove unused imports\n\nThere are several imports that are not used.  Remove them.\n\nChange-Id: I2ac3be66827bd68d3faedcef7d6bbf30ea01d3f2\n"
    },
    {
      "commit": "5d0efdb14a31d651a0f6061ffb73452a20b7ed77",
      "tree": "a7c781f860bb675d88cfcc8708a28894aa761229",
      "parents": [
        "f35b2d9c31f62a488a0d470f269c85cda5b02d72"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 12:13:01 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 12:13:01 2012 -0700"
      },
      "message": "sync: Honor --no-clone-bundle with -j1\n\nChange-Id: I7c12902e386121a374d525be673092360c67c53d\n"
    },
    {
      "commit": "2f127de7520a0b689bfe5082360eeb53a05d6e2d",
      "tree": "00613e764af267a5c1636c04cb5597f0d4beec9e",
      "parents": [
        "7da1314e38a2bb2941511c9003fa388eddb55c0a"
      ],
      "author": {
        "name": "Joe Hansche",
        "email": "jhansche@myyearbook.com",
        "time": "Mon Jul 09 12:59:56 2012 -0400"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jul 31 22:08:32 2012 -0700"
      },
      "message": "Add \"repo overview\" command.\n\nThe overview command shows an overview of each branch in all (or the\nspecified) projects.  The overview lists any local commits that have\nnot yet been merged into the project.\n\nThe report output is inspired by the report displayed following a\n\"repo prune\" event, with the addition of listing the one-line log\nmessages for each commit that is not yet merged.\n\nThe report can also be filtered to show only active branches; by\ndefault all branches that have commits beyond the upstream HEAD will\nbe listed.\n\nChange-Id: Ibe67793991ad1aa38de3bc9747de4ba64e5591aa\n"
    },
    {
      "commit": "435370c6f0e202378ae233cf1088e499ba07e971",
      "tree": "17ef58db736d091ad62b54db0c7169b964ccb95e",
      "parents": [
        "e8f75fa3687bfe894a4fa8e59881b7d9170d8a41"
      ],
      "author": {
        "name": "Brian Harring",
        "email": "ferringb@chromium.org",
        "time": "Sat Jul 28 15:37:04 2012 -0700"
      },
      "committer": {
        "name": "Brian Harring",
        "email": "ferringb@google.com",
        "time": "Sat Jul 28 15:44:05 2012 -0700"
      },
      "message": "upload: add --draft option.\n\nChange-Id: I6967ff2f8163cd4116027b3f15ddb36875942af4\n"
    },
    {
      "commit": "87636f2ac2d8a10e7db3be7b5dd47097cc1084ce",
      "tree": "3a85dea53c22e8e98b5a1042be5311776ec7020e",
      "parents": [
        "337aee0a9c6714027ff4fa8659879b0710e2e6aa"
      ],
      "author": {
        "name": "Chad Jones",
        "email": "chadj@google.com",
        "time": "Thu Jun 14 16:53:40 2012 -0700"
      },
      "committer": {
        "name": "Chad Jones",
        "email": "chadj@google.com",
        "time": "Thu Jun 14 16:54:32 2012 -0700"
      },
      "message": "Fix for failures with repo upload for projects that have a SHA1 for a revision; instead use the default manifest revision\n\nChange-Id: Ie5ef5a45ed6b0ca1a52a550df3cd7bd72e745f5f\n"
    },
    {
      "commit": "5e57234ec619d0de930333a8dde3004d1dc575d6",
      "tree": "40f4eab3f13e5b4a1ca4ff3f501539ae63f44229",
      "parents": [
        "5d016502ebc68bc054d85c98c6cdb51e0b63a1f5"
      ],
      "author": {
        "name": "Joe Hansche",
        "email": "jhansche@myyearbook.com",
        "time": "Mon Mar 05 11:41:19 2012 -0500"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jun 13 10:34:41 2012 -0700"
      },
      "message": "Support automatically stashing local modifications during repo-rebase.\n\nCurrently repo-rebase requires that all modifications be committed\nlocally before it will allow the rebase. In high-velocity environments,\nyou may want to just pull in newer code without explicitly creating\nlocal commits, which is typically achieved using git-stash.\n\nIf called with the --auto-stash command line argument, and it is\ndetermined that the current index is dirty, the local modifications\nare stashed, and the rebase continues.  If a stash was performed, that\nstash is popped once the rebase completes.\n\nNote that there is still a possibility that the git-stash pop will\nresult in a merge conflict.\n\nChange-Id: Ibe3da96f0b4486cb7ce8d040639187e26501f6af\n"
    },
    {
      "commit": "5d016502ebc68bc054d85c98c6cdb51e0b63a1f5",
      "tree": "da1b47c86049f771f2292c507de21064842809d7",
      "parents": [
        "475a47d531bfe5ad82ec104189075df72a3143b7"
      ],
      "author": {
        "name": "Florian Vallee",
        "email": "florian.vallee@gmail.com",
        "time": "Thu Jun 07 17:19:26 2012 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jun 13 10:00:57 2012 -0700"
      },
      "message": "Fix switching manifest branches using repo init -b\n\nSee repo issue #46 :\n\thttps://code.google.com/p/git-repo/issues/detail?id\u003d46\n\nWhen using repo init -b on an already existing repository,\nthe next sync will try to rebase changes coming from the old manifest\nbranch onto the new, leading in the best case scenario to conflicts\nand in the worst case scenario to an incorrect \"mixed up\" manifest.\n\nThis patch fixes this by deleting the \"default\" branch in the local\nmanifest repository when the -d init switch is used, thus forcing\nrepo to perform a fresh checkout of the new manifest branch\n\nChange-Id: I379e4875ec5357d8614d1197b6afbe58f9606751\n"
    },
    {
      "commit": "d666e93ecc1f094774dfc7ba9ab0fd6e1695e976",
      "tree": "7d38d7a867a8d70805d57f483fce2b5c47376073",
      "parents": [
        "3f61950f01bac9a3c40d9a6a95f53b6864153bfa"
      ],
      "author": {
        "name": "Anthony Russello",
        "email": "arussello@gmail.com",
        "time": "Fri Jun 01 00:48:22 2012 -0400"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jun 05 08:01:29 2012 -0700"
      },
      "message": "repo: Add option review.URL.uploadtopic support\n\nThis patch adds the option to include topic branches by adding the\nfollowing to a .gitconfig file:\n\n    uploadtopic \u003d true\n\nThis option is only read in when the -t option is not already\nspecified at the command line.\n\nChange-Id: I0e0eea49438bb4e4a21c2ac5bd498b68b5a9a845\n"
    },
    {
      "commit": "3d125940f6223efe62e35b795f57e7e717b4528e",
      "tree": "518bdd11c5cd3e5f57afdf16a3e1fe3ec1df8370",
      "parents": [
        "a94f162b9fe85389f3e1c9555628d9229105e15d"
      ],
      "author": {
        "name": "Pierre Tardy",
        "email": "pierre.tardy@intel.com",
        "time": "Fri May 04 12:18:12 2012 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu May 24 09:04:20 2012 -0700"
      },
      "message": "repo download: add --ff-only option\n\nAllows to ff-only a gerrit patch\nThis patch is necessary to automatically ensure that the patch will\nbe correctly submitted on ff-only gerrit projects\n\nYou can now use:\nrepo download (--ff-only|-f) project changeid/patchnumber\n\nThis is useful to automate verification of fast forward status of a patch\nin the context of build automation, and commit gating (e.g. buildbot)\n\nChange-Id: I403a667557a105411a633e62c8eec23d93724b43\nSigned-off-by: Erwan Mahe \u003cerwan.mahe@intel.com\u003e\nSigned-off-by: Pierre Tardy \u003cpierre.tardy@intel.com\u003e\n"
    },
    {
      "commit": "a94f162b9fe85389f3e1c9555628d9229105e15d",
      "tree": "da3852d6ede787a8d1974cddab3db8c98e4fc39e",
      "parents": [
        "e5a2122e6429b5eee861807e7050eb02045a7d4f"
      ],
      "author": {
        "name": "Erwan Mahe",
        "email": "erwan.mahe@intel.com",
        "time": "Fri Aug 19 13:56:09 2011 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu May 24 09:03:10 2012 -0700"
      },
      "message": "repo download: add --revert option\n\nBZ: 4779\nAllows to revert a gerrit patch\nThis patch is necessary for the on-demand creation of\nengineering builds using buildbot\n\nYou can now use:\nrepo download [--revert|-r project changeid/patchnumber\n\nThis is useful to automate reverting of a patch\nin the context of build automation, and regression bisection\n\nChange-Id: I3985e80e4b2a230f83526191ea1379765a54bdcf\nSigned-off-by: Erwan Mahe \u003cerwan.mahe@intel.com\u003e\nSigned-off-by: Pierre Tardy \u003cpierre.tardy@intel.com\u003e\n"
    },
    {
      "commit": "e5a2122e6429b5eee861807e7050eb02045a7d4f",
      "tree": "b58878391a4a6a80bdda7edf096d22cff8b7f1c4",
      "parents": [
        "ccf86432b39ce2506fca472bbdbe379fdc53d3e3"
      ],
      "author": {
        "name": "Pierre Tardy",
        "email": "pierre.tardy@intel.com",
        "time": "Thu Mar 24 16:28:18 2011 +0100"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu May 24 09:02:38 2012 -0700"
      },
      "message": "repo download: add --cherry-pick option\n\ndefault option uses git checkout, and thus overwrite the previous\ncheckouts.  this is a problem for automated builds of several\nchangesets in the same project for daily builds of pending submission\n\nYou can now use:\nrepo download [--cherry-pick|-c] project changeid/patchnumber\n\nThis will parse the manifest, cd to the corresponding project\ndownload the changes to FETCH_HEAD and cherry-pick the result.\n\nThis is useful to automate cherry-picking of a patch\nin the context of build automation, and commit gating (e.g. buildbot)\n\nChange-Id: Ib638afd87677f1be197afb7b0f73c70fb98909fe\nSigned-off-by: Pierre Tardy \u003cpierre.tardy@intel.com\u003e\n"
    },
    {
      "commit": "ccf86432b39ce2506fca472bbdbe379fdc53d3e3",
      "tree": "8066007b25cc9b245add60ca08055ee0bb09b91b",
      "parents": [
        "79770d269e319dee578beed682669703d4c764ba"
      ],
      "author": {
        "name": "Cezary Baginski",
        "email": "cezary.baginski@gmail.com",
        "time": "Mon Apr 23 23:55:35 2012 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu May 24 08:58:10 2012 -0700"
      },
      "message": "Avoid failing concat for multi-encoding filenames\n\nrepo status should output filenames one by one instead of trying to\nbuild a string from incompatible encodings (like utf-8 and sjis\nfilenames)\n\nChange-Id: I52282236ececa562f109f9ea4b2e971d2b4bc045\n"
    },
    {
      "commit": "5465727e538bcd77200f8b3c75f002367597fc51",
      "tree": "51f376719b489eb25b57dc3fd88da116af99a53c",
      "parents": [
        "d21720db313369f25b99b4d2f3f87c8be46513d9"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Apr 23 13:39:48 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Apr 23 13:43:41 2012 -0700"
      },
      "message": "Fix syntax errors in subcmds/init.py\n\nFixes three errors:\nPython doesn\u0027t like the line wrap after \u0027and\u0027.\nplatform.system is a function, needs to be platform.system().\nTypo all_platfroms instead of all_platforms.\n\nChange-Id: Ia875e521bc01ae2eb321ec62d839173c00f86c2d\n"
    },
    {
      "commit": "d21720db313369f25b99b4d2f3f87c8be46513d9",
      "tree": "a73e659e8fd18c7e3fc67880a1a9be8c2a409c86",
      "parents": [
        "971de8ea7b7e474a4d9253b6c9f47da3f1130973"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Apr 16 11:02:21 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 23 12:50:00 2012 -0700"
      },
      "message": "Add a --platform flag\n\nProjects may optionally specify their platform\n(eg, groups\u003d\"platform-linux\" in the manifest).\n\nBy default, repo will automatically detect the platform. However,\nusers may specify --platform\u003d[auto|all|linux|darwin].\n\nChange-Id: Ie678851fb2fec5b0938aede01f16c53138a16537\n"
    },
    {
      "commit": "971de8ea7b7e474a4d9253b6c9f47da3f1130973",
      "tree": "d8ac52741957b38d57d15f208e57b984d71ddc19",
      "parents": [
        "24c130884018364f91baa8de0ff3541f4c32d1bb"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Apr 16 10:36:08 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 23 12:39:05 2012 -0700"
      },
      "message": "Refine groups functionality\n\nEvery project is in group \"default\".  \"-default\" does not remove\nit from this project.  All group names specified in the manifest\nare positive names as opposed to a mix of negative and positive.\n\nSpecified groups are resolved in order.  If init is supplied with\n--groups\u003d\"group1,-group2\", the following describes the project\nselection when syncing:\n\n  * all projects in \"group1\" will be added, and\n  * all projects in \"group2\" will be removed.\n\nChange-Id: I1df3dcdb64bbd4cd80d675f9b2d3becbf721f661\n"
    },
    {
      "commit": "24c130884018364f91baa8de0ff3541f4c32d1bb",
      "tree": "213b269d05e2a5f2b70d895325301a9a9f30e4a2",
      "parents": [
        "b962a1f5e0daad323bdd66fad93f00a3738cc255"
      ],
      "author": {
        "name": "James W. Mills",
        "email": "jameswmills@gmail.com",
        "time": "Thu Apr 12 15:04:13 2012 -0500"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Apr 23 12:35:08 2012 -0700"
      },
      "message": "Add project annotation handling to repo\n\nAllow the optional addition of \"annotation\" nodes nested under\nprojects.  Each annotation node must have \"name\" and \"value\"\nattributes.  These name/value pairs will be exported into the\nenvironment during any forall command, prefixed with \"REPO__\"\n\nIn addition, an optional \"keep\" attribute with case insensitive \"true\"\nor \"false\" values can be included to determine whether the annotation\nwill be exported with \u0027repo manifest\u0027\n\nChange-Id: Icd7540afaae02c958f769ce3d25661aa721a9de8\nSigned-off-by: James W. Mills \u003cjameswmills@gmail.com\u003e\n"
    },
    {
      "commit": "5acde75e5d70b323197ffb2c9d4fdea3612098f5",
      "tree": "e995a64614ce7406633ae6e99c2a0e6f86872e09",
      "parents": [
        "d67872d2f47b2f09a0e2aa4adfd62e6f69154c9b"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Mar 28 20:15:45 2012 -0700"
      },
      "committer": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 13 09:46:00 2012 -0700"
      },
      "message": "Add manifest groups\n\nAllows specifying a list of groups with a -g argument to repo init.\nThe groups act on a group\u003d attribute specified on projects in the\nmanifest.\nAll projects are implicitly labelled with \"default\" unless they are\nexplicitly labelled \"-default\".\nPrefixing a group with \"-\" removes matching projects from the list\nof projects to sync.\nIf any non-inverted manifest groups are specified, the default label\nis ignored.\n\nChange-Id: I3a0dd7a93a8a1756205de1d03eee8c00906af0e5\nReviewed-on: https://gerrit-review.googlesource.com/34570\nReviewed-by: Shawn Pearce \u003csop@google.com\u003e\nTested-by: Shawn Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "d67872d2f47b2f09a0e2aa4adfd62e6f69154c9b",
      "tree": "654e38712aec5961e0e628b8be95b260b7eb9c80",
      "parents": [
        "e9d6b611c5bec499360c175035770132f1e60c71"
      ],
      "author": {
        "name": "pelya",
        "email": "x.pelya.x@gmail.com",
        "time": "Wed Mar 28 14:49:58 2012 +0300"
      },
      "committer": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Fri Apr 13 09:20:10 2012 -0700"
      },
      "message": "Option for \u0027repo diff\u0027 to generate output suitable for \u0027patch\u0027 cmd\n\nThe -u option causes \u0027repo diff\u0027 to generate diff output\nwith file paths relative to the repository root,\nso the output can be applied to the Unix \u0027patch\u0027 command.\nThe name \u0027-u\u0027 was selected for convenience, because\nboth \u0027diff\u0027 and \u0027git diff\u0027 accept the option with the same name\nto generate an \u0027unified diff\u0027 output suitable for \u0027patch\u0027 command.\n\nChange-Id: I79c8356db4ed20ecaccc258b3ba139db76666fe0\nReviewed-on: https://gerrit-review.googlesource.com/34380\nReviewed-by: Shawn Pearce \u003csop@google.com\u003e\nTested-by: Shawn Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "e9d6b611c5bec499360c175035770132f1e60c71",
      "tree": "f20482b6545d436d9be3204e5e2d3afdddc2ccd5",
      "parents": [
        "c3d2f2b76f1f34703106031bdbcb6c34df81686c"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Fri Apr 06 10:39:32 2012 -0400"
      },
      "committer": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Fri Apr 06 10:43:36 2012 -0400"
      },
      "message": "New flag for repo upload: --current_branch (--cbr)\n\nA convenient equivalent to `repo upload --br\u003d\u003ccurrent git branch\u003e`.\n\nNote that the head branch will be selected for each project\nuploaded by repo, so different branches may be uploaded for\ndifferent projects.\n\nChange-Id: I10ad8ceaa63f055105c2d847c6e329fa4226dbaf\n"
    },
    {
      "commit": "e02ac0af2e69f2c149de942d639bf305e5ae391a",
      "tree": "47da1f6f01e8429659ca10de890c9747c2a0e80a",
      "parents": [
        "898e12a2d9340706eca79e6c611166dfe35a1d3e"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Mar 14 15:36:59 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Mar 14 15:38:28 2012 -0700"
      },
      "message": "sync: --no-clone-bundle disables the clone bundle support\n\nChange-Id: Ia9ed7da8451b273c1be620c3dd0dcad777b29096\n"
    },
    {
      "commit": "76abcc1d1ea2da6cf0ce381486e2f9bf4ca55c36",
      "tree": "99bb142cb8baeb9f3b0210dee1457f854ea985ba",
      "parents": [
        "d3153825723b2bec3476e84f2e423c646fd4c598"
      ],
      "author": {
        "name": "Ali Utku Selen",
        "email": "aliutku.selen@sonyericsson.com",
        "time": "Wed Jan 25 10:51:12 2012 +0100"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 12 12:25:40 2012 -0700"
      },
      "message": "repo status to print project name on clean gits\n\nrepo status just prints \"# on branch oprofile\" if you have branched\nin clean status. This doesn\u0027t really tell which branch is meant.\n\nInstead we can use the same syntax with modified gits which will\ngive us detailed information.\n\nChange-Id: I55fe5154d278e10a814281dd2ba501ec6e956730\n"
    },
    {
      "commit": "e9dc3b33680571731181f30fbd38317d19c24652",
      "tree": "3f714ed282c94d2d055a2b5c050f4cf840f933bc",
      "parents": [
        "c9571423f843340de19ef576ccaa418ac72fdb58"
      ],
      "author": {
        "name": "Chris Wolfe",
        "email": "cwolfe@chromium.org",
        "time": "Thu Jan 26 11:36:18 2012 -0500"
      },
      "committer": {
        "name": "Chris Wolfe",
        "email": "cwolfe@chromium.org",
        "time": "Thu Jan 26 12:32:36 2012 -0500"
      },
      "message": "sync: Add manifest_name parameter\n\nThis parameter changes the manifest used by \u0027repo sync\u0027 for only\nthis execution. It should be useful for developers wishing to get\nthe repo temporarily into a known state, without clobbering their\nexisting manifest.\n\nTested by shifting Chrome OS between minilayout and full, and\nbetween several release-builder-generated manifests.\n\nChange-Id: I14194b665195b0e78f368d9ec8b8a83227af2627\n"
    },
    {
      "commit": "34fb20f67c7bdca2b1321a40f2fd558f9a34d866",
      "tree": "b3f9f06b115d2d52aa01c6deda8a3f3c3af345c2",
      "parents": [
        "ecff4f17b08f791466b73d935c772de57f2257e6"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Nov 30 13:41:02 2011 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Nov 30 13:41:02 2011 -0800"
      },
      "message": "Revert \"Default repo manifest settings in git config\"\n\nThis reverts commit ee1c2f5717fcc137ab887a4aae8a08d50a539b9a.\n\nThis breaks a lot of buildbot systems. Rolling it back for now\nuntil we can understand what the breakage was and how to fix it.\n"
    },
    {
      "commit": "ecff4f17b08f791466b73d935c772de57f2257e6",
      "tree": "44b8e4a958369d33a7e46a8a5d629b2c1486feec",
      "parents": [
        "cc14fa9820a4c9fb7a403bbe1264856c6437bf96"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 15:01:33 2011 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 15:02:15 2011 -0800"
      },
      "message": "Describe the repo launch version in `repo version`\n\n  repo version v1.7.8\n         (from https://android.googlesource.com/tools/repo.git)\n  repo launcher version 1.14\n         (from /home/sop/bin/repo)\n  git version 1.7.8.rc2.256.gcc761\n  Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)\n  [GCC 4.4.3]\n\nChange-Id: Ifcbe5b0e226a1a6ca85455eb62e4da5e9a0f0ca0\n"
    },
    {
      "commit": "841be34968c91c3ea8d8694bc5910e6388f58cbb",
      "tree": "cd2b3db593611ecad858e841edae17183458f680",
      "parents": [
        "ee1c2f5717fcc137ab887a4aae8a08d50a539b9a"
      ],
      "author": {
        "name": "Victor Boivie",
        "email": "victor.boivie@sonyericsson.com",
        "time": "Tue Apr 05 11:31:10 2011 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 14:31:56 2011 -0800"
      },
      "message": "Don\u0027t prompt the user for name/email unless necessary\n\nIf the user has already configured a workspace, use these values\nwhen re-running \u0027repo init\u0027.\n\nOtherwise, if the user has global name and e-mail set, use these.\n\nIt\u0027s always possible to override this and be prompted by specifying\n--config-name when running \u0027repo init\u0027.\n\nChange-Id: If45f0e4b14884071439fb02709dc5cb53f070f60\n"
    },
    {
      "commit": "ee1c2f5717fcc137ab887a4aae8a08d50a539b9a",
      "tree": "7a95e6ed8f8b74aac5ba59cbd04e6f24938f2e54",
      "parents": [
        "6a1f73738071e299f600017d99f7252d41b96b4b"
      ],
      "author": {
        "name": "Victor Boivie",
        "email": "victor.boivie@sonyericsson.com",
        "time": "Tue Apr 19 10:50:12 2011 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 14:24:58 2011 -0800"
      },
      "message": "Default repo manifest settings in git config\n\nA default manifest URL can be specified using:\n  git config --global repo-manifest.\u003cid\u003e.url \u003curl\u003e\n\nA default manifest server can be specified using:\n  git config --global repo-manifest.\u003cid\u003e.server \u003curl\u003e\n\nA default git mirror reference can be specified using:\n  git config --global repo-manifest.\u003cid\u003e.reference \u003cpath\u003e\n\nThis will allow the user to use \u0027repo init -u \u003cid\u003e\u0027 as\na shorter alternative to specifying the full URL.\n\nAlso, manifest server will not have to be specified in the\nmanifest XML and the reference will not have to be specified\non the command line. If they are, they will override these\ndefault values however.\n\nChange-Id: Ifdbc160bd5909ec7df9efb0c5d7136f1d9351754\nSigned-off-by: Victor Boivie \u003cvictor.boivie@sonyericsson.com\u003e\n"
    },
    {
      "commit": "6a1f73738071e299f600017d99f7252d41b96b4b",
      "tree": "86ff686f12648b471e153e295c706e0f2a948577",
      "parents": [
        "e9311273dda9aef91c563cd69b30f7a7491c56b5"
      ],
      "author": {
        "name": "Christer Fletcher",
        "email": "christer.fletcher@sonyericsson.com",
        "time": "Thu Apr 28 14:13:14 2011 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 14:01:57 2011 -0800"
      },
      "message": "Added remote destination branch information when uploading.\n\nSeveral times one have done an upload only to later notice in gerrit\nthat the upload was done to the wrong branch as the git has not yet\nbeen branched for the current git. This change will make repo print\nwhat the destination branch is when asking the user if she wants to\ngo through with the upload.\n\nChange-Id: Ia9c3a92a6a04c022edfebf4f8d651ac062bb1f3b\n"
    },
    {
      "commit": "e9311273dda9aef91c563cd69b30f7a7491c56b5",
      "tree": "bb9d6134f3babbc66f0fcace85989c53129b5de9",
      "parents": [
        "605a9a487bba6e25fb48d4e3076c89b7f686517a"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Thu Aug 11 15:46:43 2011 -0400"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 12:38:52 2011 -0800"
      },
      "message": "repo: capitalize default prompt char\n\nIt is common in command line tools to indicate what the default answer\nwill be if the user simply hits enter.  In repo, the display is just\n\"y/n\" with no indication as to which is the default.  So change the n\nto N in the messages since that is how repo operates.\n\nChange-Id: I81819ae630355072eb0365e59168b0921289498f\n"
    },
    {
      "commit": "605a9a487bba6e25fb48d4e3076c89b7f686517a",
      "tree": "0c0bf5133e24f319a1d6c61d8237b87469c202b7",
      "parents": [
        "2a32f6afa64c88142a476cd719d29cebacbdfd19"
      ],
      "author": {
        "name": "chenguodong",
        "email": "chenguodong@huawei.com",
        "time": "Mon Aug 22 18:42:47 2011 +0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 29 12:11:41 2011 -0800"
      },
      "message": "Fixed UnicodeDecodeError while uploading changes.\n\nWhen commit with comment that has non-ASCII characters,\nUnicodeDecodeError will be raised\nwhile uploading multiple project/branch changes.\nBecause some strings in script are not str type, but unicode.\nSo all the strings are decoded to unicode,\nand python use ascii to do this,\nit can not decode non-ASCII characters,\nso UnicodeDecodeError raised.\n\nSigned-off-by: chenguodong \u003cchenguodong@huawei.com\u003e\n\nChange-Id: I46447f489a4b9760a5899c7ba9d764b688594e46\n"
    },
    {
      "commit": "53d6f4d17e0cb4eabcd604d584a1132a51cc8bf3",
      "tree": "c9effdc3a5d890ac55fb8a9f2aa68ac0d500873e",
      "parents": [
        "9d8f914fe8ac75e18e0da2b7ce4886a2ba490fc6"
      ],
      "author": {
        "name": "Anatol Pomazau",
        "email": "anatol@google.com",
        "time": "Thu Aug 25 17:21:47 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 03 13:08:27 2011 -0700"
      },
      "message": "Add a sync flag that fetches only current branch\n\nThere is also shortcuts in case if the \"current branch\" is\na persistent revision such as tag or sha1. We check if the\npersistent revision is present locally and if it does - do\nno fetch anything from the server.\n\nThis greately reduces sync time and size of the on-disk repo\n\nChange-Id: I23c6d95185474ed6e1a03c836a47f489953b99be\n"
    },
    {
      "commit": "752371d91b9c7d1e9d6859cdf4cd8fef2f7b245c",
      "tree": "f29505f32a824bb4e360176202fd58fd9bce5d8f",
      "parents": [
        "1a68dc58ebc03d58d063235f19282988a2846e63"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 15:23:37 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 15:23:41 2011 -0700"
      },
      "message": "help: Fix help sync\n\nhelp sync crashed as sync required the manifest to be configured to\ncreate the option parser, as the default number of jobs is required.\n\nChange-Id: Ie75e8d75ac0e38313e4aab451cbb24430e84def5\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "df5ee52050a5b8ea4e0bb69c007dac556c18ec03",
      "tree": "760f85dcd1039e3ba6110d39cc041c664730e7cb",
      "parents": [
        "fab96c68e3acfb5403ffe65577563f3cb39e2530"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 14:05:21 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Oct 11 14:06:11 2011 -0700"
      },
      "message": "Fix Python 2.4 support\n\nChange-Id: I89521ae52fa564f0d849cc51e71fee65b3c47bab\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "f322b9abb4cadc67b991baf6ba1b9f2fbd5d7812",
      "tree": "ce75a04fed2e84457800325d158de13645cef67e",
      "parents": [
        "db728cd866d4950779620993e12e76f09eb6e2ee"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Sep 19 14:50:58 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Sep 28 10:07:36 2011 -0700"
      },
      "message": "sync: Support downloading bundle to initialize repository\n\nAn HTTP (or HTTPS) based remote server may now offer a \u0027clone.bundle\u0027\nfile in each repository\u0027s Git directory. Over an http:// or https://\nremote repo will first ask for \u0027$URL/clone.bundle\u0027, and if present\ndownload this to bootstrap the local client, rather than relying\non the native Git transport to initialize the new repository.\n\nBundles may be hosted elsewhere. The client automatically follows a\nHTTP 302 redirect to acquire the bundle file. This allows servers\nto direct clients to cached copies residing on content delivery\nnetworks, where the bundle may be closer to the end-user.\n\nBundle downloads are resumeable from where they last left off,\nallowing clients to initialize large repositories even when the\nconnection gets interrupted.\n\nIf a bundle does not exist for a repository (a HTTP 404 response\ncode is returned for \u0027$URL/clone.bundle\u0027), the native Git transport\nis used instead. If the client is performing a shallow sync, the\nbundle transport is not used, as there is no way to embed shallow\ndata into the bundle.\n\nChange-Id: I05dad17792fd6fd20635a0f71589566e557cc743\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "c4657969ebd3ec6bf28a37b6a53360314a01be73",
      "tree": "ada21c1775c4a8d96f30105f4d8c3480ca22fdb4",
      "parents": [
        "7b947de1ee015ab4d981d34566becba8222931ec"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Sep 26 09:08:01 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Sep 26 09:08:44 2011 -0700"
      },
      "message": "sync: Update default -j flag from manifest\n\nIf the manifest is updated and the default sync-j attribute\nwas modified, honor it during this sync session if the user\nhas not supplied a -j flag on the command line.\n\nChange-Id: I127ee5c779e2bbbb40b30bddc10ec1fa704b3bf3\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "6392c879454bd4fa0e770195ee8424e383d17df2",
      "tree": "bfbfedb0a1d7f3fbe648deaf09e570ba347feeb0",
      "parents": [
        "97d2b2f7a087bfc695536ae9be962406d82152f2"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Sep 22 17:44:31 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Sep 22 18:08:27 2011 -0700"
      },
      "message": "sync: Allow -j to have a default in manifest\n\nThis permits manifest authors to suggest a number of parallel\nfetch operations against a remote server. For example, Gerrit\nCode Review servers support queuing of requests and processes\nthem in first-in, first-out order. Running concurrent fetches\ncan utilize multiple CPUs on the Gerrit server, but will also\ndecrease overall operation latency by having the request put\ninto the queue ready to execute as soon as a CPU is free.\n\nChange-Id: I3d3904acb6f63516bae4b071c510ad57a2afab18\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "97d2b2f7a087bfc695536ae9be962406d82152f2",
      "tree": "7cf3c07c6c9f42f17e1ade91eb354f95a16a0a80",
      "parents": [
        "3a0e782790ab83e3b1e93fe2fd57f7197ace2f76"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Sep 22 17:23:41 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Sep 22 18:08:26 2011 -0700"
      },
      "message": "sync: Limit -j to file descriptors\n\nEach worker thread requires at least 3 file descriptors to run the\nforked \u0027git fetch\u0027 child to operate against the local repository.\nMac OS X has the RLIMIT_NOFILE set to 256 by default, which means\na sync -j128 often fails when the workers run out of pipes within\nthe Python parent process.\n\nChange-Id: I2cdb14621b899424b079daf7969bc8c16b85b903\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "08c880db1882743900ce1ed82b5026566b64d1f5",
      "tree": "f4b225c3aea7bb2808d995695e884d7b265bfeea",
      "parents": [
        "a101f1c1670c9992c28980a7028dc6c60028af69"
      ],
      "author": {
        "name": "Victor Boivie",
        "email": "victor.boivie@sonyericsson.com",
        "time": "Tue Apr 19 10:32:52 2011 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Jul 20 07:13:48 2011 -0700"
      },
      "message": "Smart tag support\n\nThis is an evolution of \u0027smart-sync\u0027 that adds a new option, -t,\nthat allows you to specify a tag/label to use instead of the\n\"latest good build\" on the current manifest branch which -s does.\n\nSigned-off-by: Victor Boivie \u003cvictor.boivie@sonyericsson.com\u003e\nChange-Id: I8c20fd91104a6aafa0271d4d33f6c4850aade17e\n"
    },
    {
      "commit": "30d452905f166b316152f236422f85c8aa75a2d0",
      "tree": "cc6a18adb2ea8c0f209f21aca2e64fe20fb06005",
      "parents": [
        "d6c93a28ca8cb079f473f749d805dcff97990225"
      ],
      "author": {
        "name": "Doug Anderson",
        "email": "dianders@chromium.org",
        "time": "Wed May 04 15:01:04 2011 -0700"
      },
      "committer": {
        "name": "Doug Anderson",
        "email": "dianders@chromium.org",
        "time": "Thu Jun 09 16:48:23 2011 -0700"
      },
      "message": "Add a --depth option to repo init.\n\nChange-Id: Id30fb4a85f4f8a1847420b0b51a86060041eb5bf\n"
    },
    {
      "commit": "d6c93a28ca8cb079f473f749d805dcff97990225",
      "tree": "21cd307899c2a5d1e59df9929d63651ac2ba1da1",
      "parents": [
        "d572a13021b0430eddf83e9caedc9d5add693c62"
      ],
      "author": {
        "name": "Mandeep Singh Baines",
        "email": "msb@google.com",
        "time": "Thu May 26 10:34:11 2011 -0700"
      },
      "committer": {
        "name": "Mandeep Singh Baines",
        "email": "msb@google.com",
        "time": "Thu May 26 10:49:39 2011 -0700"
      },
      "message": "Add branch support to repo upload\n\nThis commit adds a --br\u003d\u003cbranch\u003e option to repo upload.\n\nrepo currently examines every non-published branch. This is problematic\nfor my workflow. I have many branches in my kernel tree. Many of these\nbranches are based off of upstream remotes (I have many remotes) and\nwill never be uploaded (they\u0027ll get sent upstream as a patch).\n\nHaving repo scan these branches adds to my upload processing time\nand clutters the branch selection buffer. I\u0027ve also seen repo get\nconfused when one of my branches is 1000s of commits different from\nm/master.\n\nChange-Id: I68fa18951ea59ba373277b57ffcaf8cddd7e7a40\n"
    },
    {
      "commit": "d572a13021b0430eddf83e9caedc9d5add693c62",
      "tree": "a0dfe1a74aded3d9266eef72ee9ceec4cc9ef5a4",
      "parents": [
        "3ba5f95b46f06ed3d7382346de29ac550d749ec9"
      ],
      "author": {
        "name": "Victor Boivie",
        "email": "victor.boivie@sonyericsson.com",
        "time": "Thu Nov 11 20:36:39 2010 +0100"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 07 17:19:06 2011 -0400"
      },
      "message": "Added repo cherry-pick command\n\nIt is undesired to have the same Change-Id:-line for two separate\ncommits, and when cherry-picking, the user must manually change it.\n\nIf this is not done, bad things may happen (such as when the user\nis uploading the cherry-picked commit to Gerrit, it will instead\nsee it as a new patch-set for the original change, or worse).\n\nrepo cherry-pick works the same was as git cherry-pick, except that\nit replaces the Change-Id with a new one and adds a reference\nback to the commit from where it was picked.\n\nOn failures (when git can not successfully apply the cherry-picked\ncommit), instructions will be written to the user.\n\nChange-Id: I5a38b89839f91848fad43386d43cae2f6cdabf83\n"
    },
    {
      "commit": "3ba5f95b46f06ed3d7382346de29ac550d749ec9",
      "tree": "7b38fcbfc0f0237102b4b94b68684b49cb2d0113",
      "parents": [
        "2630dd9787c1b75b70a980175ffa41b63f59e3b8"
      ],
      "author": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Thu Apr 07 12:51:04 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 07 16:55:35 2011 -0400"
      },
      "message": "Fixed repo checkout error message when git reports errors.\n\nIn the current version of repo checkout, we often get the error:\n  error: no project has branch xyzzy\n\n...even when the actual error was something else.  This fixes it\nto only report the \u0027no project has branch\u0027 when that is actually true.\n\nThis fix is very similar to one made for \u0027repo abandon\u0027:\n  https://review.source.android.com/#change,22207\n\nThe repo checkout error is filed as: \u003chttp://crosbug.com/6514\u003e\n\nTEST\u003dmanual\n\nA sample creating a case where \u0027git checkout\u0027 will fail:\n\n  $ repo start branch1 .\n  $ repo start branch2 .\n  $ touch bogusfile\n  $ git add bogusfile\n  $ git commit -m \"create bogus file\"\n  [branch2 f8b6b08] create bogus file\n   0 files changed, 0 insertions(+), 0 deletions(-)\n   create mode 100644 bogusfile\n  $ echo \"More\" \u003e\u003e bogusfile\n  $ repo checkout branch1 .\n  error: chromite/: cannot checkout branch1\n\nA sample case showing that we still fail if no project has a branch:\n\n  $ repo checkout xyzzy .\n  error: no project has branch xyzzy\n\nChange-Id: I48a8e258fa7a9c1f2800dafc683787204bbfcc63\n"
    },
    {
      "commit": "2630dd9787c1b75b70a980175ffa41b63f59e3b8",
      "tree": "d160084fbdc7fcff49e6f52b7cf0212a52482692",
      "parents": [
        "dafb1d68d33137779c96a83c7e42cac0e7a27ca4"
      ],
      "author": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Thu Apr 07 13:36:30 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 07 16:51:50 2011 -0400"
      },
      "message": "Fixed problems w/ 2nd repo init if first repo init had bad URL.\n\nThis is the simplest fix: if we had problems syncing the\nmanifest.git directory and we were the ones that created it,\nwe should delete it.  This doesn\u0027t try to do anything complex\nlike try to recover from a .repo directory that got broken in\nsome other way.\n\nThis is filed as: \u003chttp://crosbug.com/13403\u003e\n\nTEST\u003dmanual\n\nInit once with a bad URL:\n  $ repo init -u http://foobar.example.com\n  Getting manifest ...\n     from http://foobar.example.com\n  Connection closed by 172.22.121.77\n  error: Couldn\u0027t resolve host \u0027foobar.example.com\u0027 while accessing http://foobar.example.com/info/refs\n\n  fatal: HTTP request failed\n  fatal: cannot obtain manifest http://foobar.example.com\n\nInit again: identical to the first.  Good:\n  $ repo init -u http://foobar.example.com\n  Getting manifest ...\n     from http://foobar.example.com\n  Connection closed by 172.22.121.77\n  error: Couldn\u0027t resolve host \u0027foobar.example.com\u0027 while accessing http://foobar.example.com/info/refs\n\n  fatal: HTTP request failed\n  fatal: cannot obtain manifest http://foobar.example.com\n\nInit with correct URL:\n  $ repo init -u http://git.chromium.org/git/manifest -m minilayout.xml\n  Getting manifest ...\n     from http://git.chromium.org/git/manifest\n  [ ... cut ... ]\n\n  repo initialized in /.../repoiniterr\n\nTry a bad URL after a good one; it doesn\u0027t get saved (good):\n  $ repo init -u http://foobar.example.com\n  Connection closed by 172.22.121.77\n  error: Couldn\u0027t resolve host \u0027foobar.example.com\u0027 while accessing http://foobar.example.com/info/refs\n\n  fatal: HTTP request failed\n  fatal: cannot obtain manifest http://foobar.example.com\n\nJust to confirm, I can still do a good one after a bad...\n  $ repo init -u http://git.chromium.org/git/manifest -m minilayout.xml\n\n  Your Name  [George Washington]:\n  Your Email [george@washington.example.com]:\n\n  Your identity is: George Washington \u003cgeorge@washington.example.com\u003e\n  is this correct [y/n]? y\n\n  repo initialized in /.../repoiniterr\n\nChange-Id: I1692821a330d97b1d218b2e191a93245b33f2362\n"
    },
    {
      "commit": "dafb1d68d33137779c96a83c7e42cac0e7a27ca4",
      "tree": "e0e3c93d316c8cdf48a15fec97c458b391a6039e",
      "parents": [
        "4655e81a75f2ea5f1eaf93de1249886171281e61"
      ],
      "author": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Thu Apr 07 11:46:59 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 07 16:49:23 2011 -0400"
      },
      "message": "Fixed repo abandon to give better messages.\n\nThe main fix is to give an error message if nothing was actually\nabandoned.  See \u003chttp://crosbug.com/6041\u003e.\n\nThe secondary fix is to list projects where the abandon happened.\nThis could be done in a separate CL or dropped altogether if requested.\n\nTEST\u003dmanual\n\n$ repo abandon dougabc; echo $?\nAbandon dougabc: 100% (127/127), done.\nAbandoned in 2 project(s):\n  chromite\n  src/platform/init\n0\n\n$ repo abandon dougabc; echo $?\nAbandon dougabc: 100% (127/127), done.\nerror: no project has branch dougabc\n1\n\n$ repo abandon dougabc; echo $?\nAbandon dougabc: 100% (127/127), done.\nerror: chromite/: cannot abandon dougabc\n1\n\nChange-Id: I79520cc3279291acadc1a24ca34a761e9de04ed4\n"
    },
    {
      "commit": "4655e81a75f2ea5f1eaf93de1249886171281e61",
      "tree": "81ff7048880220c90c9ab0a7c5346a8dfab32a6d",
      "parents": [
        "723c5dc3d62fe07ba4faa17434870917ae87ce9d"
      ],
      "author": {
        "name": "Terence Haddock",
        "email": "thaddock@google.com",
        "time": "Thu Mar 31 12:33:34 2011 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Apr 07 16:36:42 2011 -0400"
      },
      "message": "Add option to check status of projects in parallel.\n\nChange-Id: I6ac653f88573def8bb3d96031d3570ff966251ad\n"
    },
    {
      "commit": "723c5dc3d62fe07ba4faa17434870917ae87ce9d",
      "tree": "3ed0ea8b803d8dab2ae30ae6832d154be85108fb",
      "parents": [
        "e6a0eeb80d46a5e5e99ce17a46f93e83ee2782cc"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Mon Apr 04 11:15:17 2011 -0400"
      },
      "committer": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Mon Apr 04 11:34:47 2011 -0400"
      },
      "message": "Fix parallel sync on python \u003c 2.6.\n\nEvent.isSet was renamed to is_set in 2.6, but we should\nuse the earlier syntax to avoid breaking compatibility\nwith older Python installations.\n\nChange-Id: I41888ed38df278191d7496c1a6eed15e881733f4\n"
    },
    {
      "commit": "e6a0eeb80d46a5e5e99ce17a46f93e83ee2782cc",
      "tree": "b9bb6905b377274f44331cf74c1bf29e50799ceb",
      "parents": [
        "0960b5b53df6df7169c295de5509b0f705352d3b"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 22 19:04:47 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Mar 22 19:04:47 2011 -0700"
      },
      "message": "sync: Fix syntax error on Python 2.4\n\nChange-Id: I371d032d5a1ddde137721cbe2b24bfa38f20aaaa\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "fc06ced9f9b8b00841991b92a2a661302a69eb7b",
      "tree": "2bcb74073cb50022af2d6639a5bcd8c6a86f436f",
      "parents": [
        "fce89f218a57e651e18cb91f5154e226c3f152b5"
      ],
      "author": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Wed Mar 16 15:49:18 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Mar 17 09:17:42 2011 -0700"
      },
      "message": "Make \u0027repo sync -jN\u0027 exit with an error code in the case of sync errors.\n\nThe bug that this is fixing is described here:\n\nhttp://code.google.com/p/chromium-os/issues/detail?id\u003d6813\n\nThis fix allows the helper threads to signal the main thread that they\nsaw an error.  When the main thread sees the error, it will let all\nexisting threads finish, then exit with an error.\n\nChange-Id: If3019bc6b0b3ab9304d49ed2eea53e9d57f3095a\n"
    },
    {
      "commit": "fce89f218a57e651e18cb91f5154e226c3f152b5",
      "tree": "87283ea19114b10352514ebd4e025b1e8f603f8a",
      "parents": [
        "37282b4b9c5b1d9a1ff07f7f0686a81b65a0a5c6"
      ],
      "author": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Mon Mar 14 16:07:42 2011 -0700"
      },
      "committer": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Wed Mar 16 12:55:44 2011 -0700"
      },
      "message": "Add \u0027list\u0027 command to repo.\n\nThis isn\u0027t a required command, but might be more discoverable for\nrepo newbies?\n\nChange-Id: If357346f234774d42e04e024e65acdaf6dca6c62\n"
    },
    {
      "commit": "37282b4b9c5b1d9a1ff07f7f0686a81b65a0a5c6",
      "tree": "aba568b85d38de4cfef90cd771169c9422aef09c",
      "parents": [
        "835cd6888f16ff30a3428adfa3a775efad918880"
      ],
      "author": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Fri Mar 04 11:54:18 2011 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Mar 11 11:53:23 2011 -0800"
      },
      "message": "Support repo-level pre-upload hook and prep for future hooks.\n\nAll repo-level hooks are expected to live in a single project at the\ntop level of that project.  The name of the hooks project is provided\nin the manifest.xml.  The manifest also lists which hooks are enabled\nto make it obvious if a file somehow failed to sync down (or got\ndeleted).\n\nBefore running any hook, we will prompt the user to make sure that it\nis OK.  A user can deny running the hook, allow once, or allow\n\"forever\" (until hooks change).  This tries to keep with the git\nspirit of not automatically running anything on the user\u0027s computer\nthat got synced down.  Note that individual repo commands can add\nalways options to avoid these prompts as they see fit (see below for\nthe \u0027upload\u0027 options).\n\nWhen hooks are run, they are loaded into the current interpreter (the\none running repo) and their main() function is run.  This mechanism is\nused (instead of using subprocess) to make it easier to expand to a\nricher hook interface in the future.  During loading, the\ninterpreter\u0027s sys.path is updated to contain the directory containing\nthe hooks so that hooks can be split into multiple files.\n\nThe upload command has two options that control hook behavior:\n  - no-verify\u003dFalse, verify\u003dFalse (DEFAULT):\n    If stdout is a tty, can prompt about running upload hooks if needed.\n    If user denies running hooks, the upload is cancelled.  If stdout is\n    not a tty and we would need to prompt about upload hooks, upload is\n    cancelled.\n  - no-verify\u003dFalse, verify\u003dTrue:\n    Always run upload hooks with no prompt.\n  - no-verify\u003dTrue, verify\u003dFalse:\n    Never run upload hooks, but upload anyway (AKA bypass hooks).\n  - no-verify\u003dTrue, verify\u003dTrue:\n    Invalid\n\nSample bit of manifest.xml code for enabling hooks (assumes you have a\nproject named \u0027hooks\u0027 where hooks are stored):\n  \u003crepo-hooks in-project\u003d\"hooks\" enabled-list\u003d\"pre-upload\" /\u003e\n\nSample main() function in pre-upload.py in hooks directory:\n  def main(project_list, **kwargs):\n    print (\u0027These projects will be uploaded: %s\u0027 %\n           \u0027, \u0027.join(project_list))\n    print (\u0027I am being a good boy and ignoring anything in kwargs\\n\u0027\n           \u0027that I don\\\u0027t understand.\u0027)\n    print \u0027I fail 50% of the time.  How flaky.\u0027\n    if random.random() \u003c\u003d .5:\n      raise Exception(\u0027Pre-upload hook failed.  Have a nice day.\u0027)\n\nChange-Id: I5cefa2cd5865c72589263cf8e2f152a43c122f70\n"
    },
    {
      "commit": "c7c57e34dbcc58c38c565dc98cfea4bf7736560a",
      "tree": "96220b743f1db15eef8140ae8bf6ba2288f6584d",
      "parents": [
        "0d2b61f11d0501fcf1e5a1c19f18dac03e0b09bc"
      ],
      "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": "Sun Jan 09 17:39:22 2011 -0800"
      },
      "message": "help: Don\u0027t show empty Summary or Description sections\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n(cherry picked from commit 60e679209a5495393ef584efaaad287fc8b77c51)\n"
    },
    {
      "commit": "0d2b61f11d0501fcf1e5a1c19f18dac03e0b09bc",
      "tree": "a0be431dc8225690610c741e8d62b7f09185845d",
      "parents": [
        "2bf9db0d3b0b4cf4e11187ea7438ddeb1262fe21"
      ],
      "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": "Sun Jan 09 17:39:22 2011 -0800"
      },
      "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(cherry picked from commit 1875ddd47c0bf38e5cc52e1e5875caabce2d8742)\n"
    },
    {
      "commit": "f00e0ce556fc22fef180c74a9d78f1908d9aeb0b",
      "tree": "7ad50d7511c963ec7daae4017849db7b0a06e089",
      "parents": [
        "1b5a4a0c5de5fdaa4f8907357a0aa80e365dd199"
      ],
      "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": "Sun Jan 09 17:39:22 2011 -0800"
      },
      "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(cherry picked from commit d2dfac81ad6a060179b4b2289060af2dc7a5cdfd)\n"
    },
    {
      "commit": "1b5a4a0c5de5fdaa4f8907357a0aa80e365dd199",
      "tree": "64b42dd765bea192245051b41ff21e0b45ff8e7c",
      "parents": [
        "de8b2c4276afec670dee5c7942ac74f2d0c66500"
      ],
      "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": "Sun Jan 09 17:39:22 2011 -0800"
      },
      "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(cherry picked from commit d4cd69bdef28c5a9287c85c48a18ce621eba689d)\n"
    },
    {
      "commit": "de8b2c4276afec670dee5c7942ac74f2d0c66500",
      "tree": "4340130ff76580c6ff1a6f41a386bceb21ce91cc",
      "parents": [
        "727ee98a401b5993f6b952074f43c7f770604acf"
      ],
      "author": {
        "name": "Thiago Farina",
        "email": "thiago.farina@gmail.com",
        "time": "Wed Sep 09 00:41:34 2009 -0400"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sun Jan 09 17:39:22 2011 -0800"
      },
      "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(cherry picked from commit 840ed0fab7cb4c2ab296c7d7d45f13e2523bae1c)\n"
    },
    {
      "commit": "f18cb761731a791bf1b9ee8c6308bfce5c9d3e62",
      "tree": "5b1440e04b3945177eb7033f40cf496e7e28ba34",
      "parents": [
        "d3fd537ea59272e2141ccee839400a93c0196e36"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Dec 07 11:41:05 2010 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sun Jan 09 16:13:56 2011 -0800"
      },
      "message": "Encode the environment variables passed to git\n\nWindows allows the environment to have unicode values.\nThis will cause Python to fail to execute the command.\n\nChange-Id: I37d922c3d7ced0d5b4883f0220346ac42defc5e9\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2b8db3ce3e7344b9f3b5216637c5af0d54be5656",
      "tree": "10f0c759efdade6a556eac16b46160b4843135d5",
      "parents": [
        "5df6de075e5fb674368d38f858419425bc8d8d07"
      ],
      "author": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Mon Nov 01 15:08:06 2010 -0700"
      },
      "committer": {
        "name": "Doug Anderson",
        "email": "dianders@google.com",
        "time": "Mon Nov 01 15:08:06 2010 -0700"
      },
      "message": "Added feature to print a \u003cnotice\u003e from manifest at the end of a sync.\n\nThis feature is used to convey information on a when a branch has\nceased development or if it is an experimental branch with a few\ngotchas, etc.\n\nYou add it to your manifest XML by doing something like this:\n\u003cmanifest\u003e\n  \u003cnotice\u003e\n    NOTE TO DEVELOPERS:\n      If you checkin code, you have to pinky-swear that it contains no bugs.\n      Anyone who breaks their promise will have tomatoes thrown at them in the\n      team meeting.  Be sure to bring an extra set of clothes.\n  \u003c/notice\u003e\n\n  \u003cremote ... /\u003e\n  ...\n\u003c/manifest\u003e\n\nCarriage returns and indentation are relevant for the text in this tag.\n\nThis feature was requested by Anush Elangovan on the ChromiumOS team.\n"
    },
    {
      "commit": "5df6de075e5fb674368d38f858419425bc8d8d07",
      "tree": "c138ab50fe9e8b08352c1e70e460f83771d56179",
      "parents": [
        "a0de6e8eab97f5dcdb2f51d4e09dd1568623ec58"
      ],
      "author": {
        "name": "Andrei Warkentin",
        "email": "andreiw@motorola.com",
        "time": "Fri Jul 02 17:58:31 2010 -0500"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 29 12:20:01 2010 -0700"
      },
      "message": "sync: Use --force-broken to continue other projects\n\nThis adds a new flag -f/--force-broken that will allow the rest of\nthe sync process to continue instead of bailing when a particular\nproject fails to sync.\n\nChange-Id: I23680f2ee7927410f7ed930b1d469424c9aa246e\nSigned-off-by: Andrei Warkentin \u003candreiw@motorola.com\u003e\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "a0de6e8eab97f5dcdb2f51d4e09dd1568623ec58",
      "tree": "14a6939f997a33d04396627e1b032b812bfcec2d",
      "parents": [
        "16614f86b3cc8d61ccae7197624fa93fc752767b"
      ],
      "author": {
        "name": "Ficus Kirkpatrick",
        "email": "ficus@android.com",
        "time": "Fri Oct 22 13:06:47 2010 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 29 12:12:56 2010 -0700"
      },
      "message": "upload: Remove --replace option\n\nIt hasn\u0027t been necessary for a long time, and its\nfunctionality can be accomplished with \u0027git push\u0027.\n\nChange-Id: Ic00d3adbe4cee7be3955117489c69d6e90106559\n"
    },
    {
      "commit": "16614f86b3cc8d61ccae7197624fa93fc752767b",
      "tree": "218818ddc0e9521a85aa804477e59fff6f28364e",
      "parents": [
        "88443387b1b0508f43b57e104821c6b375806fea"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 29 12:05:43 2010 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 29 12:08:57 2010 -0700"
      },
      "message": "sync --quiet: be more quiet\n\nChange-Id: I5e8363c7b32e4546d1236cfc5a32e01c3e5ea8e6\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "88443387b1b0508f43b57e104821c6b375806fea",
      "tree": "d3d1e5a3e6caecd8eabbdf7a1491ddcc2788aa3d",
      "parents": [
        "99482ae58a74e236fb40b65c267163a5690f39e1"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 08 10:02:09 2010 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 29 12:08:50 2010 -0700"
      },
      "message": "sync: Enable use of git clone --reference\n\nUse git clone to initialize a new repository, and when possible\nallow callers to use --reference to reuse an existing checkout as\nthe initial object storage area for the new checkout.\n\nChange-Id: Ie27f760247f311ce484c6d3e85a90d94da2febfc\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "60829ba72fe81b1de1c1e9c6e0de486e9e90bddd",
      "tree": "97c54e944ba5ee7d10897bdfe57e6dbe0e97ae59",
      "parents": [
        "a22f99ae41a9cdda2129c89678a6f581b0445c85"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 16 07:42:45 2010 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Jul 16 07:42:45 2010 -0700"
      },
      "message": "upload: Fix --replace flag\n\n--replace started to fail due to a Python error, I forgot to pass\nthrough the opt structure to the replace function.\n\nChange-Id: Ifcd7a0c715c3fd9070a4c58208612a626382de35\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "a22f99ae41a9cdda2129c89678a6f581b0445c85",
      "tree": "73178332fc8b636f3b9c90bd68f361a1456cdd6d",
      "parents": [
        "3575b8f8bdc5f15de23db82499e0ce152f634a19"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 15 17:40:41 2010 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 15 17:43:02 2010 -0700"
      },
      "message": "rebase: Pass through more options\n\nPassing through --whitespace\u003dfix to rebase can be useful\nto clean up a branch prior to uploading it for review.\n\nChange-Id: Id85f1912e5e11ff9602e3b342c2fd7441abe67d7\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "3575b8f8bdc5f15de23db82499e0ce152f634a19",
      "tree": "d5938307c3a751e36be71653f1d902018dd1198f",
      "parents": [
        "a5ece0e0505324218f38af02a1fe046ca2bcc278"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 15 17:00:14 2010 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 15 17:03:19 2010 -0700"
      },
      "message": "upload: Allow review.HOST.username to override email\n\nSome users might need to use a different login name than the local\npart of their email address for their Gerrit Code Review user\naccount.  Allow it to be overridden with the review.HOST.username\nconfiguration variable.\n\nChange-Id: I714469142ac7feadf09fee9c26680c0e09076b75\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "a5ece0e0505324218f38af02a1fe046ca2bcc278",
      "tree": "429cbf0b23d2606737629e7fc77a4ad0b228c90a",
      "parents": [
        "cc50bac8c7706082596d70756249d4964a67f281"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 15 16:52:42 2010 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 15 16:52:42 2010 -0700"
      },
      "message": "upload -t: Automatically include local branch name\n\nIf the -t flag is given to upload, the local branch name is\nautomatically sent to Gerrit Code Review as the topic branch name\nfor the change(s).  This requires the server to be Gerrit Code\nReview v2.1.3-53-gd50c94e or later, which isn\u0027t widely deployed\nright now, so the default is opt-out.\n\nChange-Id: I034fcacb405b7cb909147152db427fe69dd7bcbf\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "cc50bac8c7706082596d70756249d4964a67f281",
      "tree": "bb87e8d8c128737710db6f00b35327ef28750c5b",
      "parents": [
        "0cb1b3f687da4634e431953ef84fee59dd3f5d59"
      ],
      "author": {
        "name": "Anthony Newnam",
        "email": "anthony.newnam@garmin.com",
        "time": "Thu Apr 08 10:28:59 2010 -0500"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 15 16:43:58 2010 -0700"
      },
      "message": "Warn users before uploading if there are local changes\n\nChange-Id: I231d7b6a3211e9f5ec71a542a0109b0c195d5e40\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "9e426aa43231073c4a98dae3f6c16d67ab6f3b59",
      "tree": "ca0591e5569e398853ddab2a873098a505f5f96b",
      "parents": [
        "08a3f68d38eec81dfa66f9ea05080c37c863f322"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Thu Apr 01 10:42:33 2010 -0400"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 15 16:35:31 2010 -0700"
      },
      "message": "rebase: Automatically rebase branch on upstrea\n\n  Usage: repo rebase [[-i] \u003cproject\u003e...]\n\nRebases the current topic branch of the specified (or all)\nprojects against the appropriate upstream.\n\nNote: Interactive rebase is currently only supported when\nexactly one project is specified on the command line.\n\nChange-Id: I7376e35f27a6585149def82938c1ca99f36db2c4\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "08a3f68d38eec81dfa66f9ea05080c37c863f322",
      "tree": "d70a260e21212a3e7131aaf02555f3df5f030f7a",
      "parents": [
        "feb39d61ef2de893b93153adc8f1f8140a54fc98"
      ],
      "author": {
        "name": "Ben Komalo",
        "email": "benkomalo@google.com",
        "time": "Thu Jul 15 16:03:02 2010 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jul 15 16:30:32 2010 -0700"
      },
      "message": "upload: Automatically --cc folks in review.URL.autocopy\n\nThe upload command will read review.URL.autocopy from the project\u0027s\nconfiguration and append the list of e-mails specified to the\n--cc argument of the upload command if a non-empty --re argument\nwas provided.\n\nChange-Id: I2424517d17dd3444b20f0e6a003be6e70b8904f6\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "feb39d61ef2de893b93153adc8f1f8140a54fc98",
      "tree": "51c358f6ab4424ad698446ed4bdbc85e9a0d942f",
      "parents": [
        "7198572dd7f5b9d95d83733a98691948a3eb9da3"
      ],
      "author": {
        "name": "Sebastian Schmidt",
        "email": "yath@yath.de",
        "time": "Wed Jun 02 17:18:13 2010 +0200"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 17 19:09:37 2010 -0700"
      },
      "message": "Fix format string bugs in grep\n\nThis fixes some format string bugs in grep which cause repo to with\n\"TypeError: not enough arguments for format string\" when grepping and\nthe output contains a valid Python format string.\n\nChange-Id: Ice8968ea106148d409490e4f71a2833b0cc80816\n"
    }
  ],
  "next": "18afd7f679ab6271a34f4ec01e7755dd85c5dcf4"
}
