)]}'
{
  "log": [
    {
      "commit": "4eb285cf902a46c3c99bc2c999e486d7c218354b",
      "tree": "044641d5bea20fd499c7004246670dad8fc085f0",
      "parents": [
        "5f434ed723ac14cdcea12d038c066c0653e1ef3a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Feb 14 16:28:44 2013 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sun Feb 17 21:23:33 2013 +0900"
      },
      "message": "Fix: local manifest deprecation warning appears more than once\n\nWhen running repo sync, the local_manifest.xml deprecation warning\nis shown twice.\n\nAdd a flag to ensure that it is only displayed once.\n\nChange-Id: Icfa2b0b6249c037c29771f9860252e6eda3ae651\n"
    },
    {
      "commit": "5f434ed723ac14cdcea12d038c066c0653e1ef3a",
      "tree": "259f4860618f544f8ff96e1c9684ff89e5812bc4",
      "parents": [
        "606eab804302a92d232735d4aa57853cf3be3d9a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Nov 22 13:48:10 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sun Feb 17 21:20:20 2013 +0900"
      },
      "message": "Exit with fatal error if local manifest file cannot be parsed\n\nIf the .repo/local_manifests folder includes a local manifest file\nthat cannot be parsed, the current behaviour is to catch the parse\nexception, print a warning, and continue to process remaining files.\n\nThis can cause any errors to go unnoticed.\n\nRemove the exception handling, so that the exception is instead\ncaught in main._Main, and repo exits with a fatal error.\n\nChange-Id: I75a70b7b850d2eb3e4ac99d435a4568ff598b7f4\n"
    },
    {
      "commit": "606eab804302a92d232735d4aa57853cf3be3d9a",
      "tree": "5cc12b737e94b8bc8e1ab84a88c021464b73de3e",
      "parents": [
        "cd07cfae1c5c3588ea4a4ca1fb85e208f1aa5b33"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Nov 22 13:47:16 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Sun Feb 17 21:19:58 2013 +0900"
      },
      "message": "Show full path of `local_manifests` folder in deprecation warning\n\nWhen a local_manifest.xml file is present, a deprecation warning\nis printed telling the user to put local manifest files in the\n`local_manifests` directory.\n\nInclude the full path to the `local_manifests` directory in the\nwarning, to reduce confusion about where the directory should be\nlocated.  Also enclose the directory name in backticks.\n\nChange-Id: I85710cfbd6e77fb2fa6b7b0ce66d77693ccd649f\n"
    },
    {
      "commit": "4baf87f92c55d3daba1410f04bd10f1a41a088b8",
      "tree": "cac6a39c2bacd11e83938b642303a85048521726",
      "parents": [
        "84f7e137c20b7500a6a5c719c39e9166c6e40e85",
        "223bf963f0342f3cc50728b2f9535b528592e64a"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Mon Jan 28 16:25:54 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 28 16:25:55 2013 +0000"
      },
      "message": "Merge \"should use os.path.lexist instead of os.path.exist\""
    },
    {
      "commit": "26e2475a0fe090f5bd2c0a0a040f21cc71aac095",
      "tree": "3df2016a6bd52802151917b4c35a8e07f0d6d16f",
      "parents": [
        "c59bafffb972dedd279e16a3a34415cda2ce3f58"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Fri Jan 11 12:35:53 2013 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 17 09:10:00 2013 -0800"
      },
      "message": "If parsing the manifests fails, reset the XmlManifest object\n\nso that if it\u0027s called again, we see the correct errors.\n\nChange-Id: I909488feeac04aecfc92a9b5d6fb17827ef2f213\n"
    },
    {
      "commit": "c59bafffb972dedd279e16a3a34415cda2ce3f58",
      "tree": "fbbb67a02619f1e5cdfd6755343bd53834987a0d",
      "parents": [
        "0290cad5db0eef3b15eb976dd7a017837e36c8b7",
        "1a5c774cbff8aead0c45cc90be2f78ffd08dc376"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Jan 17 17:06:49 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 17 17:06:49 2013 +0000"
      },
      "message": "Merge \"Pass full path of the XML in local_manifests to the parser\""
    },
    {
      "commit": "0290cad5db0eef3b15eb976dd7a017837e36c8b7",
      "tree": "70cbd27abcad80e79699e63c5bc184e54f7c3ab9",
      "parents": [
        "a9f11b3cb281270084526a490dc61625b51b8192",
        "0c635bb42708bb2151a92c39b31464bde1ab46f4"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Jan 14 22:34:13 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 14 22:34:13 2013 +0000"
      },
      "message": "Merge \"Make -notdefault a default manifest group\""
    },
    {
      "commit": "1a5c774cbff8aead0c45cc90be2f78ffd08dc376",
      "tree": "55a53179bc72e305749f891abe8ab3c93c7295b4",
      "parents": [
        "a9f11b3cb281270084526a490dc61625b51b8192"
      ],
      "author": {
        "name": "Tobias Droste",
        "email": "tdroste@gmx.de",
        "time": "Thu Jan 03 18:27:45 2013 +0100"
      },
      "committer": {
        "name": "Tobias Droste",
        "email": "tdroste87@gmail.com",
        "time": "Mon Jan 07 07:46:18 2013 +0100"
      },
      "message": "Pass full path of the XML in local_manifests to the parser\n\nThis fixes the following python error message if the\ncurrent working directory is not .repo/local_manifests:\nIOError: [Errno 2] No such file or directory: \u0027local_manifest.xml\u0027\n\nSigned-off-by: Tobias Droste \u003ctdroste87@gmail.com\u003e\nCC: David Pursehouse \u003cdavid.pursehouse@sonymobile.com\u003e\nChange-Id: I4668dc04219b6233c7ff6ca3b4138bec9ee3529f\n"
    },
    {
      "commit": "a9f11b3cb281270084526a490dc61625b51b8192",
      "tree": "040d3144fd3c540b7b2d1a381ea28ac14ba42129",
      "parents": [
        "7bdbde7af84036d2d900150e67f462e1a50f4b0e"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Wed Jan 02 15:40:48 2013 -0800"
      },
      "committer": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Wed Jan 02 15:41:57 2013 -0800"
      },
      "message": "Support resolving relative fetch URLs on persistent-https://\n\nSome versions of Python will only attempt to resolve a relative\nURL if they understand the URL scheme. Convert persistent-http://\nand persistent-https:// schemes to the more typical http:// and\nhttps:// versions for the resolve call.\n\nChange-Id: I99072d5a69be8cfaa429a3ab177ba644d928ffba\n"
    },
    {
      "commit": "0c635bb42708bb2151a92c39b31464bde1ab46f4",
      "tree": "cec41dade74d01a4caf9c2211be7c5f66151058a",
      "parents": [
        "7bdbde7af84036d2d900150e67f462e1a50f4b0e"
      ],
      "author": {
        "name": "Matt Gumbel",
        "email": "matthew.k.gumbel@intel.com",
        "time": "Fri Dec 21 10:14:53 2012 -0800"
      },
      "committer": {
        "name": "Matt Gumbel",
        "email": "matthew.k.gumbel@intel.com",
        "time": "Fri Dec 21 10:14:53 2012 -0800"
      },
      "message": "Make -notdefault a default manifest group\n\nWhen trying to render manifest with SHAs, projects in group notdefault\ncaused the following crash:\n\n    Traceback (most recent call last):\n      File \".repo/repo/main.py\", line 385, in \u003cmodule\u003e\n        _Main(sys.argv[1:])\n      File \".repo/repo/main.py\", line 365, in _Main\n        result \u003d repo._Run(argv) or 0\n      File \".repo/repo/main.py\", line 137, in _Run\n        result \u003d cmd.Execute(copts, cargs)\n      File \".repo/repo/subcmds/manifest.py\", line 129, in Execute\n        self._Output(opt, manifest)\n      File \".repo/repo/subcmds/manifest.py\", line 79, in _Output\n        peg_rev \u003d opt.peg_rev)\n      File \".repo/repo/manifest_xml.py\", line 199, in Save\n        p.work_git.rev_parse(HEAD + \u0027^0\u0027))\n      File \".repo/repo/project.py\", line 2035, in runner\n        capture_stderr \u003d True)\n      File \".repo/repo/git_command.py\", line 215, in __init__\n        raise GitError(\u0027%s: %s\u0027 % (command[1], e))\n    error.GitError: rev-parse: [Errno 2] No such file or directory: \u0027prebuilts/eclipse-build-deps\u0027\n\nThis patch resolves the issue by making sure that -notdefault is always\nused as a default manifest group so that notdefault projects are not\nrendered out by the manifest subcmd.\n\nChange-Id: I4a8bd18ea7600309f39ceff1b1ab6e1ff3adf21d\nSigned-off-by: Matt Gumbel \u003cmatthew.k.gumbel@intel.com\u003e\n"
    },
    {
      "commit": "223bf963f0342f3cc50728b2f9535b528592e64a",
      "tree": "20753275edf33a75f7e4f5d742129cb2977841ab",
      "parents": [
        "3f5ea0b18207a81f58595b1a2e10e5ffb784b74f"
      ],
      "author": {
        "name": "Sebastian Frias",
        "email": "sf.sigma04@gmail.com",
        "time": "Wed Nov 21 19:09:25 2012 +0100"
      },
      "committer": {
        "name": "Sebastian Frias",
        "email": "sf.sigma04@gmail.com",
        "time": "Fri Nov 23 10:53:12 2012 +0100"
      },
      "message": "should use os.path.lexist instead of os.path.exist\n\nThe logic of the program requires a check on the existence of the\nlink itself\n\nSee repo  issue #125  :\n        https://code.google.com/p/git-repo/issues/detail?id\u003d125\n\nChange-Id: Ia7300d22d6d656259f47c539febf1597f0c35538\n"
    },
    {
      "commit": "b2bd91c99b9435cf950ecf8efbb8439f31d3fcbc",
      "tree": "5d26d3943317c11c1cd913fc5640074a5bc7910b",
      "parents": [
        "3f5ea0b18207a81f58595b1a2e10e5ffb784b74f"
      ],
      "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": "Mon Nov 19 10:45:21 2012 -0800"
      },
      "message": "Represent git-submodule as nested projects, take 2\n\n(Previous submission of this change broke Android buildbot due to\n incorrect regular expression for parsing git-config output.  During\n investigation, we also found that Android, which pulls Chromium, has a\n workaround for Chromium\u0027s submodules; its manifest includes Chromium\u0027s\n submodules.  This new change, in addition to fixing the regex, also\n take this type of workarounds into consideration; it adds a new\n attribute that makes repo not fetch submodules unless submodules have a\n project element defined in the manifest, or this attribute is\n overridden by a parent project element or by the default element.)\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: I4b8344c1b9ccad2f58ad304573133e5d52e1faef\n"
    },
    {
      "commit": "f91074881fb437e8cba8f9be81bd63cda5e0a557",
      "tree": "97f13dc80871a3c7c960792cc225fbfd33ed7eb8",
      "parents": [
        "88b86728a4451b97a2c6dcae2feb98014c077793"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Nov 16 19:12:32 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Fri Nov 16 19:12:55 2012 +0900"
      },
      "message": "Better error message if \u0027remove-project\u0027 refers to non-existent project\n\nIf a local manifest includes a \u0027remove-project\u0027 element that refers to\na project that does not exist in the manifest, the error message is a\nbit cryptic.\n\nChange the error message to make it clearer what is wrong.\n\nChange-Id: I0b1043aaec87893c3128211d3a9ab2db6d600755\n"
    },
    {
      "commit": "c1b86a232383748811c6faf17f364e63e10f7dd4",
      "tree": "8f28c8e8a922ffd4165f48a1988500070936bd39",
      "parents": [
        "98ffba1401056e2d88d3f3898b6fbf5d7d3931a4"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 11:36:51 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 11:38:57 2012 +0900"
      },
      "message": "Fix inconsistent indentation\n\nThe repo coding style is to indent at 2 characters, but there are\nmany places where this is not followed.\n\nEnable pylint warning \"W0311: Bad indentation\" and make sure all\nindentation is at multiples of 2 characters.\n\nChange-Id: I68f0f64470789ce2429ab11104d15d380a63e6a8\n"
    },
    {
      "commit": "cecd1d864fc3cf02cf50d367111e0d0e173c5dc6",
      "tree": "b4f660400560dce21cd7a00ffe5a5d74b54bcb81",
      "parents": [
        "fc241240d828d7e8302dc0876608a9d27ae1cbc7"
      ],
      "author": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Thu Nov 01 22:59:27 2012 -0700"
      },
      "committer": {
        "name": "Sarah Owens",
        "email": "sarato@inkylabs.com",
        "time": "Tue Nov 13 17:33:56 2012 -0800"
      },
      "message": "Change print statements to work in python3\n\nThis is part of a series of changes to introduce Python3 support.\n\nChange-Id: I373be5de7141aa127d7debdbce1df39148dbec32\n"
    },
    {
      "commit": "52f1e5d9111c586624de48b5f705e10b67d109b3",
      "tree": "64861a0d67e6194626a5fa8cd1c8d044bd353e1b",
      "parents": [
        "8e3d355d448671e7c9b3409a3bbde971f90d7c28"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 04:53:24 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Wed Nov 14 05:05:32 2012 +0900"
      },
      "message": "Make load order of local manifests deterministic\n\nLocal manifest files stored in the local_manifests folder are loaded\nin alphabetical order, so it\u0027s easier to know in which order project\nremovals/additions/modifications will be applied.\n\nIf local_manifests.xml exists, it will be loaded before the files in\nlocal_manifests.\n\nChange-Id: Ia5c0349608f1823b4662cd6b340b99915bd973d5\n"
    },
    {
      "commit": "717ece9d81ab428ff7358fb3d8a941f8371b626c",
      "tree": "6016811bf8504da6042727f46ff8510d61a84a42",
      "parents": [
        "5566ae5ddea409279b13e538b513a73062862c3e"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 08:49:16 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 09:35:37 2012 +0900"
      },
      "message": "Better handling of duplicate remotes\n\nIn the current implementation, an error is raised if a remote with the\nsame name is defined more than once.  The check is only that the remote\nhas the same name as an existing remote.\n\nWith the support for multiple local manifests, it is more likely than\nbefore that the same remote is defined in more than one manifest.\n\nChange the check so that it only raises an error if a remote is defined\nmore than once with the same name, but different attributes.\n\nChange-Id: Ic3608646cf9f40aa2bea7015d3ecd099c5f5f835\n"
    },
    {
      "commit": "5566ae5ddea409279b13e538b513a73062862c3e",
      "tree": "8eee7a90ecf3692659eb2249c1a7b48c81de28a2",
      "parents": [
        "2d5a0df798b7b16ccf9c17b2435a9640cf0d81c0"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 03:04:18 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 08:19:51 2012 +0900"
      },
      "message": "Print deprecation warning when local_manifest.xml is used\n\nThe preferred way to specify local manifests is to drop the file(s)\nin the local_manifests folder.  Print a deprecation warning when\nthe legacy local_manifest.xml file is used.\n\nChange-Id: Ice85bd06fb612d6fcceeaa0755efd130556c4464\n"
    },
    {
      "commit": "2d5a0df798b7b16ccf9c17b2435a9640cf0d81c0",
      "tree": "ca99d70bdf9e4602beff0181f29f36a9d28eec7d",
      "parents": [
        "f7fc8a95beb1337e23f146cad8086c1fc05902ee"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 02:50:36 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 08:19:51 2012 +0900"
      },
      "message": "Add support for multiple local manifests\n\nAdd support for multiple local manifests stored in the local_manifests\nfolder under the .repo home directory.\n\nLocal manifests will be processed in addition to local_manifest.xml.\n\nChange-Id: Ia0569cea7e9ae0fe3208a8ffef5d9679e14db03b\n"
    },
    {
      "commit": "f7fc8a95beb1337e23f146cad8086c1fc05902ee",
      "tree": "53c36c8d5cd0aee9d30dc62b61cf47af69c94bf7",
      "parents": [
        "1ad7b555df77d27fac485ac2815dd6ce9b8b8dfd"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 04:00:28 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Nov 13 05:53:41 2012 +0900"
      },
      "message": "Handle XML errors when parsing the manifest\n\nCatch ExpatError and exit gracefully with an error message, rather\nthan exiting with a python traceback.\n\nChange-Id: Ifd0a7762aab4e8de63dab8a66117170a05586866\n"
    },
    {
      "commit": "1d947b30342163b723c96db563967323535fef45",
      "tree": "b6b02d02df01792b356b9e50ceeaadcaf3a2e8c5",
      "parents": [
        "2d113f35460051823ea54d61c5c939565518f969"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Thu Oct 25 12:23:11 2012 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "time": "Tue Oct 30 10:28:20 2012 +0900"
      },
      "message": "Even more coding style cleanup\n\nFixing some more pylint warnings:\n\nW1401: Anomalous backslash in string\nW0623: Redefining name \u0027name\u0027 from outer scope\nW0702: No exception type(s) specified\nE0102: name: function already defined line n\n\nChange-Id: I5afcdb4771ce210390a79981937806e30900a93c\n"
    },
    {
      "commit": "cd81dd6403fc8dbe6ec5920c517d9083902c3c1f",
      "tree": "935f3f82d2eb32c06b812f66d56d138074309ef8",
      "parents": [
        "80d2ceb22267b7dc61b107934ff5264b6439a785"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:18:00 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri Oct 26 12:24:57 2012 -0700"
      },
      "message": "Revert \"Represent git-submodule as nested projects\"\n\nThis reverts commit 69998b0c6ff724bf620480140ccce648fec7d6a9.\nBroke Android\u0027s non-gitmodule use case.\n\nConflicts:\n\tproject.py\n\tsubcmds/sync.py\n\nChange-Id: I68ceeb63d8ee3b939f85a64736bdc81dfa352aed\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": "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": "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": "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": "9779565abf06d2f1e48548197be350a06c1eab9b",
      "tree": "2df81e18395ef2a4782e0a889abaaebcea0e40f1",
      "parents": [
        "cf76b1bcec6386f9530636e64746502f9856b5cf"
      ],
      "author": {
        "name": "David Holmer",
        "email": "odinguru@gmail.com",
        "time": "Wed Sep 26 01:58:48 2012 -0400"
      },
      "committer": {
        "name": "David Holmer",
        "email": "odinguru@gmail.com",
        "time": "Wed Sep 26 01:58:48 2012 -0400"
      },
      "message": "Fix incorrect default_groups when parsing projects from XML manifest\n\nChange Details:\n* Switch first default group to \u0027all\u0027 instead of \u0027default\u0027\n\nChange Benefits:\n* More consistent with default_groups in the counterpart Save() function\n* Fixes bug where command \u0027repo manifest\u0027 added an extra \u0027default\u0027\n  group to every output project element groups attribute. This bug was\n  particularly confusing for projects which had \u0027groups\u003d\"notdefault\"\u0027\n  as they were output as \u0027groups\u003d\"notdefault,default\"\u0027 by \u0027repo manifest\u0027\n\nChange-Id: I5611c027a982d3394899466248b971910bec8c6b\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": "34acdd253439448b6c08c3abfc5e7b8bd03f383f",
      "tree": "f3290384d6d47fa8187678f75ed9885dbbfad20e",
      "parents": [
        "d94aaef39e301cc912968c07d1783232bf34a174"
      ],
      "author": {
        "name": "Jooncheol Park",
        "email": "jooncheol@gmail.com",
        "time": "Mon Aug 27 02:25:59 2012 +0900"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 07 08:38:08 2012 -0700"
      },
      "message": "Fix ManifestParseError when first child node is comment\n\nIf the first line of manifest.xml is a XML comment, root.childNodes[0]\nis not a \u0027manifest\u0027 element node. The python minidom module will makes\na \u0027Comment\u0027 node as root.childNodes[0]. Since the original code only\nchecks whether the first child node is \u0027manifest\u0027, it couldn\u0027t do any\ncommand including \u0027sync\u0027 due to the \u0027ManifestParseError\u0027 exception. This\npatch could allow the comments between \u0027\u003c?xml ...?\u003e\u0027 and \u0027\u003cmanifest\u003e\u0027 in\nthe manifest.xml file.\n\nChange-Id: I0b81dea4f806965eca90f704c8aa7df49c579402\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": "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": "17f85eab24739c2982bf0613a13b155f712e045d",
      "tree": "0ae1dffe2eed0bd32b89ab126de70562661593b3",
      "parents": [
        "b9477bc2dd8ef1e931f208733976c56a0f2344a3"
      ],
      "author": {
        "name": "Dmitry Fink",
        "email": "dmitry@finik.net",
        "time": "Mon Aug 06 14:52:29 2012 -0700"
      },
      "committer": {
        "name": "gerrit code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 07 11:42:54 2012 -0700"
      },
      "message": "Omit all default groups when generating a manifest\n\nOne of the recent changes introduced implicit path:xxx and name:xxx groups\nto every project, however they are not being stripped when generating\na manifest using \"repo manifest\" command resulting in clutter\n\nChange-Id: Iec8610ba794b2fe4a6cdf0f59ca561595b66f9b5\n"
    },
    {
      "commit": "f35b2d9c31f62a488a0d470f269c85cda5b02d72",
      "tree": "64b0e9105d915467be2a130f8e8848bcd66c4b54",
      "parents": [
        "e0904f721b51fb1f3f11fb4755e476d759b7b3e3"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 11:46:22 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Aug 02 11:46:22 2012 -0700"
      },
      "message": "Fix mirror mode\n\nChange-Id: Ica0e8392562a7ae5aad7e45441c1540e5e2b0238\n"
    },
    {
      "commit": "b292b98c3e9a9f666ca780ba60fdb4f306eca343",
      "tree": "75cea727be50c2e5b86d5c0fa62baae379315bf7",
      "parents": [
        "2f127de7520a0b689bfe5082360eeb53a05d6e2d"
      ],
      "author": {
        "name": "Yestin Sun",
        "email": "sunyi0804@gmail.com",
        "time": "Mon Jul 02 07:32:50 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jul 31 22:13:13 2012 -0700"
      },
      "message": "Add remote alias support in manifest\n\nThe `alias` is an optional attribute in element `remote`. It can be\nused to override attibute `name` to be set as the remote name in each\nproject\u0027s .git/config. Its value can be duplicated while attribute\n`name` has to be unique across the manifest file. This helps each\nproject to be able to have same remote name which actually points\nto different remote url.\n\nIt eases some automation scripts to be able to checkout/push to same\nremote name but actually different remote url, like:\n\nrepo forall -c \"git checkout -b work same_remote/work\"\nrepo forall -c \"git push same_remote work:work\"\n\nfor example:\nThe manifest with \u0027alias\u0027 will look like:\n\n\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\n\u003cmanifest\u003e\n  \u003cremote alias\u003d\"same_alias\" fetch\u003d\"git://git.external1.org/\" name\u003d\"ext1\"\n      review\u003d\"http://review.external1.org\"/\u003e\n  \u003cremote alias\u003d\"same_alias\" fetch\u003d\"git://git.external2.org/\" name\u003d\"ext2\"\n      review\u003d\"http://review.external2.org\"/\u003e\n  \u003cremote alias\u003d\"same_alias\" fetch\u003d\"ssh://git.internal.com:29418\" name\u003d\"int\"\n      review\u003d\"http://review.internal.com\"/\u003e\n  \u003cdefault remote\u003d\"int\" revision\u003d\"int-branch\" sync-j\u003d\"2\"/\u003e\n  \u003cproject name\u003d\"path/to/project1\" path\u003d\"project1\" remote\u003d\"ext1\"/\u003e\n  \u003cproject name\u003d\"path/to/project2\" path\u003d\"project2\" remote\u003d\"ext2\"/\u003e\n  \u003cproject name\u003d\"path/to/project3\" path\u003d\"project3\"/\u003e\n  ...\n\u003c/manifest\u003e\n\nIn each project, use command \"git remote -v\"\n\nproject1:\nsame_alias  git://git.external1.org/project1 (fetch)\nsame_alias  git://git.external1.org/project1 (push)\n\nproject2:\nsame_alias  git://git.external2.org/project2 (fetch)\nsame_alias  git://git.external2.org/project2 (push)\n\nproject3:\nsame_alias  ssh://git.internal.com:29418/project3 (fetch)\nsame_alias  ssh://git.internal.com:29418/project3 (push)\n\nChange-Id: I2c48263097ff107f0c978f3e83966ae71d06cb90\n"
    },
    {
      "commit": "7da1314e38a2bb2941511c9003fa388eddb55c0a",
      "tree": "21eb19cb1edb13fc0931fbef074d3dd36e5dc7ba",
      "parents": [
        "435370c6f0e202378ae233cf1088e499ba07e971"
      ],
      "author": {
        "name": "Brian Harring",
        "email": "ferringb@chromium.org",
        "time": "Fri Jun 15 02:24:20 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Jul 31 22:05:44 2012 -0700"
      },
      "message": "Inject the project name into each projects groups.\n\nFor CrOS, we have scenarios were people checkout a smaller version\nof our manifest via groups, and enable individual repositories as\nneeded for their work.  Previously this was via local_manifest\nmanipulation, which breaks via manifest-groups would require a\nremove-project tag.\n\nVia injecting the projects name into the projects groups, this\nallows us to instead manipulate the configured groups allowing\nthe user to turn on/off projects as necessary.\n\nChange-Id: I07b7918e16cc9dc28eb47e19a46a04dc4fd0be74\n"
    },
    {
      "commit": "475a47d531bfe5ad82ec104189075df72a3143b7",
      "tree": "db44a1646f6f02c2105bf7946359076cf1d0a864",
      "parents": [
        "62d0b10a7bea2aa5cb7593ff12d14c482a1a663c"
      ],
      "author": {
        "name": "Brian Harring",
        "email": "ferringb@google.com",
        "time": "Thu Jun 07 20:05:35 2012 -0700"
      },
      "committer": {
        "name": "Brian Harring",
        "email": "ferringb@google.com",
        "time": "Thu Jun 07 20:19:04 2012 -0700"
      },
      "message": "Restore include support.\n\nCalculation of where the include file lives was broken by 23acdd3f14\nsince it resulted in looking for the first include in .repo, rather\nthan .repo/manifests.\n\nWhile people can work around it via setting their includes to\nmanifests/\u003cinclude-target\u003e, that breaks down since each layer of\nincludes would then have to be relative.\n\nAs such, restore the behaviour back to 2644874d; manifests includes\nare calculated relative to the manifest root (ie, .repo/manifests);\nlocal manifests includes are calculated relative to .repo/ .\n\nChange-Id: I74c19ba614c41d2f08cd3e9fd094f3c510e3bfd1\n"
    },
    {
      "commit": "23acdd3f1460bc1c040b319940c5e0e8a78f1040",
      "tree": "85709c15416db6717cdff2025cc1aacc438c7ce9",
      "parents": [
        "2644874d9d3e6c16299a01acddf66cd99fd43414"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Sat Apr 21 00:33:54 2012 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu May 24 09:32:15 2012 -0700"
      },
      "message": "Parse manifest and local_manifest together\n\nCombine manifest and local_manifest into a single list of elements\nbefore parsing.  This will allow elements in the local_manifest to\naffect elements in the main manifest.\n\nChange-Id: I4d34c9260b299a76be2960b07c0c3fe1af35f33c\n"
    },
    {
      "commit": "2644874d9d3e6c16299a01acddf66cd99fd43414",
      "tree": "bd2e86186a48a22286c6e919758d7edf366bda9a",
      "parents": [
        "3d125940f6223efe62e35b795f57e7e717b4528e"
      ],
      "author": {
        "name": "Brian Harring",
        "email": "brian.harring@intel.com",
        "time": "Thu Apr 28 05:04:41 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu May 24 09:07:24 2012 -0700"
      },
      "message": "ManifestXml: add include support\n\nHaving the ability to include other manifests is a very practical feature\nto ease the managment of manifest. It allows to divide a manifest into separate\nfiles, and create different environment depending  on what we want to release\n\nYou can have unlimited recursion of include, the manifest configs will simply be concatenated\nas if it was in a single file.\n\ncommand \"repo manifest\" will create a single manifest, and not recreate the manifest hierarchy\n\nfor example:\nOur developement manifest will look like:\n\n\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\n\u003cmanifest\u003e\n  \u003cdefault revision\u003d\"platform/android/main\" remote\u003d\"intel\"/\u003e\n  \u003cinclude name\u003d\"server.xml\"/\u003e \u003c!-- The Server configuration --\u003e\n  \u003cinclude name\u003d\"aosp.xml\" /\u003e  \u003c!-- All the AOSP projects --\u003e\n  \u003cinclude name\u003d\"bsp.xml\" /\u003e   \u003c!-- The BSP projects that we release in source form --\u003e\n  \u003cinclude name\u003d\"bsp-priv.xml\" /\u003e \u003c!-- The source of the BSP projects we release in binary form --\u003e\n\u003c/manifest\u003e\n\nOur release manifest will look like:\n\n\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\n\u003cmanifest\u003e\n  \u003cdefault revision\u003d\"platform/android/release-ext\" remote\u003d\"intel\"/\u003e\n  \u003cinclude name\u003d\"server.xml\"/\u003e \u003c!-- The Server configuration --\u003e\n  \u003cinclude name\u003d\"aosp.xml\" /\u003e  \u003c!-- All the AOSP projects --\u003e\n  \u003cinclude name\u003d\"bsp.xml\" /\u003e   \u003c!-- The BSP projects that we release in source form --\u003e\n  \u003cinclude name\u003d\"bsp-ext.xml\" /\u003e \u003c!-- The PREBUILT version of the BSP projects we release in binary form --\u003e\n\u003c/manifest\u003e\n\nAnd it is also easy to create and maintain feature branch with a manifest that looks like:\n\n\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\n\u003cmanifest\u003e\n  \u003cdefault revision\u003d\"feature_branch_foobar\" remote\u003d\"intel\"/\u003e\n  \u003cinclude name\u003d\"server.xml\"/\u003e \u003c!-- The Server configuration --\u003e\n  \u003cinclude name\u003d\"aosp.xml\" /\u003e  \u003c!-- All the AOSP projects --\u003e\n  \u003cinclude name\u003d\"bsp.xml\" /\u003e   \u003c!-- The BSP projects that we release in source form --\u003e\n  \u003cinclude name\u003d\"bsp-priv.xml\" /\u003e \u003c!-- The source of the BSP projects we release in binary form --\u003e\n\u003c/manifest\u003e\n\nSigned-off-by: Brian Harring \u003cbrian.harring@intel.com\u003e\nSigned-off-by: Pierre Tardy \u003cpierre.tardy@intel.com\u003e\nChange-Id: I833a30d303039e485888768e6b81561b7665e89d\n"
    },
    {
      "commit": "79770d269e319dee578beed682669703d4c764ba",
      "tree": "23e733be2bf80454de9352225366b92ef5cc9139",
      "parents": [
        "c39864f5e12fa4a6d3f2cdb4921afc021406d106"
      ],
      "author": {
        "name": "Anatol Pomazau",
        "email": "anatol@google.com",
        "time": "Fri Apr 20 14:41:59 2012 -0700"
      },
      "committer": {
        "name": "Anatol Pomazau",
        "email": "anatol@google.com",
        "time": "Mon Apr 23 14:10:52 2012 -0700"
      },
      "message": "Add sync-c option to manifest\n\nThere are use-cases when fetching all branch is impractical and\nwe really need to fetch only one branch/tag.\ne.g. there is a large project with binaries and every update of a\nbinary file is put to a separate branch.\nThe whole project history might be too large to allow users fetch it.\n\nAdd \u0027sync-c\u0027 option to \u0027project\u0027 and \u0027default\u0027 tags to make it possible\nto configure \u0027sync-c\u0027 behavior at per-project and per-manifest level.\n\nNote that currently there is no possibility to revert boolean flag from\ncommand line. If \u0027sync-c\u0027 is set in manifest then you cannot make\nfull fetch by providing a repo tool argument.\n\nChange-Id: Ie36fe5737304930493740370239403986590f593\n"
    },
    {
      "commit": "c39864f5e12fa4a6d3f2cdb4921afc021406d106",
      "tree": "b8e5749072fb6e08c2f2f6f019aeb7532a1cccb3",
      "parents": [
        "5465727e538bcd77200f8b3c75f002367597fc51"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Apr 23 13:41:58 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Apr 23 13:43:41 2012 -0700"
      },
      "message": "Treat groups\u003d as default\n\nPrevious incarnations of groups support left \"groups\u003d\" in the\nrepo .config, which is now treated as \"delete all the projects\".\nTreat empty groups configuration the same as no groups\nconfiguration.\n\nChange-Id: I57dab8dac55bdbf4cc181e2748cd2e4e510764f5\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": "d3153825723b2bec3476e84f2e423c646fd4c598",
      "tree": "11436435822daca2da44674fc538b3a668c199a5",
      "parents": [
        "43bda84362b8fd8bb74a81003e8b49cff15ea5ed"
      ],
      "author": {
        "name": "Mike Pontillo",
        "email": "pontillo@gmail.com",
        "time": "Tue Feb 28 11:53:24 2012 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon Mar 12 12:24:22 2012 -0700"
      },
      "message": "Add \u0027rebase\u003d\"false\"\u0027 attribute to the \u003cproject/\u003e XML.\n\nThis new attribute can prevent \u0027repo sync\u0027 from automatically rebasing.\n\nI hit a situation in where one of the git repositories I was tracking\nwas actually an external repository that I wanted to pull commits\ninto and merge myself. (NOT rebase, since that would lose the merge\nhistory.) In this case, I\u0027m not using \u0027repo upload\u0027, I\u0027m manually\nmanaging the merges to and from this repository.\n\nEverything was going great until I typed \u0027repo sync\u0027 and it rebased\nmy manually-merged tree. Hence the option to skip it.\n\nChange-Id: I965e0dd1acb87f4a56752ebedc7e2de1c502dbf8\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": "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": "9d8f914fe8ac75e18e0da2b7ce4886a2ba490fc6",
      "tree": "ff7fef6ee9840cdb1fb762cbb58e5ffc3ec6232e",
      "parents": [
        "ceea368e887b1c1c600400f40564eca4f8b40192"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 20 14:36:35 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 03 13:05:14 2011 -0700"
      },
      "message": "Remove extra \u0027/\u0027 in RemoteSpec\n\nurljoin appends a \u0027/\u0027 if only the domain is in the url path.  This\nchange strips that off before creating a RemoteSpec\n"
    },
    {
      "commit": "ceea368e887b1c1c600400f40564eca4f8b40192",
      "tree": "5cdd2d5a985e6b10e9f5116ad5a5aa7065ef7105",
      "parents": [
        "b660539c4ac691312b44c13c6311568749537290"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Thu Oct 20 10:45:47 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 20 11:01:38 2011 -0700"
      },
      "message": "Correctly name projects when mirroring\n\nA bug introduced by relative urls caused projects such as manifest.git\nto be placed in the root directory instead of the directory they should\nby in.\n\nThis fix creates and refers to a resolvedFetchUrl in the _XmlRemote\nclass in order to get a fetchUrl that is never relative.\n"
    },
    {
      "commit": "db728cd866d4950779620993e12e76f09eb6e2ee",
      "tree": "3a0fb3eb745da641f18dbea75e6bef0c7001f4a4",
      "parents": [
        "c4657969ebd3ec6bf28a37b6a53360314a01be73"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Mon Sep 26 16:34:01 2011 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Sep 28 10:07:01 2011 -0700"
      },
      "message": "Allow remote url to be relative to manifst url\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": "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": "df14a70c4529821d7450303ec553a9f608af1656",
      "tree": "4631409d5610fb103912687dc4f8321d9b46f3a4",
      "parents": [
        "f18cb761731a791bf1b9ee8c6308bfce5c9d3e62"
      ],
      "author": {
        "name": "Anthony Newnam",
        "email": "anthony.newnam@garmin.com",
        "time": "Sun Jan 09 17:31:57 2011 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Sun Jan 09 17:39:19 2011 -0800"
      },
      "message": "Make path references OS independent\n\nChange-Id: I5573995adfd52fd54bddc62d1d1ea78fb1328130\n(cherry picked from commit b0f9a02394779c1c9422a9649412c9ac5fb0f12f)\n\nConflicts:\n\n\tcommand.py\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": "a1bfd2cd7253b1662e08f5ec5be3d863430c756c",
      "tree": "48cf4d0a983e37b50220cecc043793d6a5f0c319",
      "parents": [
        "6d7508b3d52781a3f8170a4257c65e2de176cc68"
      ],
      "author": {
        "name": "Nico Sallembien",
        "email": "nsallembien@google.com",
        "time": "Tue Apr 06 10:40:01 2010 -0700"
      },
      "committer": {
        "name": "Nico Sallembien",
        "email": "nsallembien@google.com",
        "time": "Tue Apr 13 10:20:37 2010 -0700"
      },
      "message": "Add a \u0027smart sync\u0027 option to repo sync\n\nThis option allows the user to specify a manifest server to use when\nsyncing. This manifest server will provide a manifest pegging each\nproject to a known green build. This allows developers to work on a\nknown good tree that is known to build and pass tests, preventing\nfailed builds to hamper productivity.\n\nThe manifest used is not \"sticky\" so as to allow subsequent\n\u0027repo sync\u0027 calls to sync to the tip of the tree.\n\nChange-Id: Id0a24ece20f5a88034ad364b416a1dd2e394226d\n"
    },
    {
      "commit": "21c5c34ee28036e595aab3cfc72e58c6c8f526b3",
      "tree": "f40717343efa47e15535172cf0b4bf776a870891",
      "parents": [
        "54fccd71fbdc60adf99b9a9bf4712c121d4312ba"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 25 16:47:30 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Jun 25 16:47:30 2009 -0700"
      },
      "message": "Support detached HEAD in manifest repository\n\nIf the manifest repository is on a detached HEAD and we are parsing\nan XML formatted manifest we should simply set the branch property\nto None, rather than crash with an AttributeError.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "3c8dea1f8d7c4257d080f9f34159cdb2fffb81e6",
      "tree": "2a5e48ce93bc913076034f88f8878e4bfffef4dc",
      "parents": [
        "8ad8a0e61d919e76f521f3124c91bd46fbaa84e2"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 18:38:17 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 18:45:20 2009 -0700"
      },
      "message": "Change project.revision to revisionExpr and revisionId\n\nThe revisionExpr field now holds an expression from the manifest,\nsuch as \"refs/heads/master\", while revisionId holds the current\ncommit-ish SHA-1 of the revisionExpr.  Currently that is only\nfilled in if the manifest points directly to a SHA-1.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "d1f70d9929ddd2748ccc9c1dd2f9603068e1f3e6",
      "tree": "746fa0d1ace702f114357d1798bc67eddd1b79a9",
      "parents": [
        "c8a300f6397dad7db00c3654ff6e50e9519ed7c9"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 14:58:02 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 09:31:28 2009 -0700"
      },
      "message": "Refactor how projects parse remotes so it can be replaced\n\nWe now feed Project a RemoteSpec, instead of the Remote directly\nfrom the XmlManifest.  This way the RemoteSpec already has the\nfull project URL, rather than just the base, permitting other\ntypes of manifests to produce the URL in their own style.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "c8a300f6397dad7db00c3654ff6e50e9519ed7c9",
      "tree": "4bd29d3d580e53965b66ed2d10e13507584fe577",
      "parents": [
        "1b34c9118ed86a15b0bc1094804c095dd7be33cb"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Mon May 18 13:19:57 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Fri May 29 09:31:28 2009 -0700"
      },
      "message": "Refactor Manifest to be XmlManifest\n\nWe\u0027ll soon be supporting two different manifest formats, but we\ncan\u0027t immediately remove support for the current XML one that is\nin wide spread use within Android.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "242b52690d327a77e47140509085f406155c5722",
      "tree": "92b58b51e6f0b38bea6cc98a0c67604c5d08b7f1",
      "parents": [
        "4cc70ce501321733a1b389e685e964d34b3b4cf5"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 13:00:29 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 13:01:52 2009 -0700"
      },
      "message": "Remove support for the extra \u003cremote\u003e definitions in manifests\n\nThese aren\u0027t that widely used, and actually make it difficult for\nusers to fully mirror a forest of repositories, and then permit\nsomeone else to clone off that forest, rather then the original\nupstream servers.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "4cc70ce501321733a1b389e685e964d34b3b4cf5",
      "tree": "d8d30b416faf3cbfe20d07ef3d0f020a16649791",
      "parents": [
        "498a0e8a79ab76eeb6adc40f12b04d59820716f9"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 12:49:46 2009 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue May 19 13:01:48 2009 -0700"
      },
      "message": "Remove unused parsing support for \u003crequire commit\u003d\"\"/\u003e\n\nWe haven\u0027t supported this in a while, but the parser was still here.\nIts all dead code, so strip it out.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "c7a4eefa7e775b64916a66b52ca6c5f31e2cf5c8",
      "tree": "49451ef2767128c809e48f980766c1a02d6504aa",
      "parents": [
        "43c3d9ea17f1436a6b3b2e7e7827da6f48a21da9"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Mar 05 10:32:38 2009 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Mar 05 10:32:38 2009 -0800"
      },
      "message": "Add repo manifest -o to save a manifest\n\nThis can be useful to create a new manifest from an existing client,\nespecially if the client wants to use the \"-r\" option to set each\nproject\u0027s revision to the current commit SHA-1, making a sort of a\ntag file that can be used to recreate this exact state elsewhere.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "03eaf07ec6aa7e99a0444ac1ec708b2a5f7cbbf5",
      "tree": "3de33686218f59849912004a4376402082384fff",
      "parents": [
        "2896a79120fe1de65472736f756c47b558b44db1"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 20 11:42:22 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 20 11:54:46 2008 -0800"
      },
      "message": "Support \u003cremove-project name\u003d\"X\"\u003e in manifest to remove/replace X\n\nThe manifest files now permit removing a project so the user can\neither keep it out of their client, or replace it with a different\nproject using an entirely different configuration.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "5d40e26201ed87ae8276a77e263b8cbe50598703",
      "tree": "3130b4b5db0466e07ed9fa4e7bb2383dc91954f6",
      "parents": [
        "70939e2f73bf118c89cf4af4988dba807c50a0ce"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 06 11:07:42 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 06 11:23:27 2008 -0800"
      },
      "message": "Treat missing attributes as None when parsing the manifest\n\nSome of our code assumes that a property is None.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "70939e2f73bf118c89cf4af4988dba807c50a0ce",
      "tree": "b1849b9a48572876b35cd621192cbb4c712e816e",
      "parents": [
        "ae6e0949d187c35d79dbc0b21788fdbb2c65bf78"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 06 11:07:14 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 06 11:23:08 2008 -0800"
      },
      "message": "Add \u003cadd-remote to-project\u003d\"...\"\u003e to inject additional remotes\n\nThis way users can add forks they know about to an existing project\nthat was already declared in the primary manifest.  This is mostly\nuseful with the Linux kernel project, where multiple forks is quite\ncommon for the main upstream tree (e.g. Linus\u0027 tree), a platform\narchitecture tree (e.g. ARM) and a device specific tree (e.g. the\nmsm7k tree used by Android).\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "ae6e0949d187c35d79dbc0b21788fdbb2c65bf78",
      "tree": "7a825c0e8cb24f0df512f62f4e44970026641dda",
      "parents": [
        "339ba9f6f70b1733f89a5ff89d5f155389a04094"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 06 10:25:35 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Nov 06 11:23:06 2008 -0800"
      },
      "message": "Add \u003cremote project-name\u003d\"...\"\u003e attribute within projects\n\nBy setting a project-name on a remote nested within a project forks\nof a project like the Linux kernel can be easily handled by fetching\nall relevant forks into the same client side project under different\nremote names.  Developers can create branches off different remotes\nusing `git checkout --track -b $myname $remote/$branch` and later\n`repo upload` automatically redirects to the proper fork project\nin the code review server.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "e284ad1d1a2c6fa0e0ac800e87b2607f9bda339e",
      "tree": "fcf35ac784ec2e13c78ee3882ccb1fec0ad3d049",
      "parents": [
        "3e5481999d5f853e19ee5caaaaa968fc4b5176ab"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 04 07:37:10 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Nov 05 18:08:32 2008 -0800"
      },
      "message": "Add \u0027repo init --mirror\u0027 to download a complete forrest\n\nThe mirror option downloads a complete forrest (as described by the\nmanifest) and creates a replica of the remote repositories rather\nthan a client working directory.  This permits other clients to\nsync off the mirror site.\n\nA mirror can be positioned in a \"DMZ\", where the mirror executes\n\"repo sync\" to obtain changes from the external upstream and\nclients inside the protected zone operate off the mirror only,\nand therefore do not require direct git:// access to the external\nupstream repositories.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "2450a2987afcf3d01a4d43fffe590b02880d9aa7",
      "tree": "adcfcf649c387da978bc1ddf22f0883ce984c679",
      "parents": [
        "f5c25a68d832f7eed55f939f97098071b20f753a"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 04 08:22:07 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 04 09:45:59 2008 -0800"
      },
      "message": "Assume the manifest branch matches the branch name in Git\n\nWhatever branch name we checked the manifest out from is the name\nwe want to reflect throughout the rest of the projects, e.g. within\nthe special \"m/\" remote space.\n\nThis reduces the difference between different branches within the\nmanifest file.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "f5c25a68d832f7eed55f939f97098071b20f753a",
      "tree": "981c72da9567548971a71e8b85d39b4ecfabb6a8",
      "parents": [
        "9fa44db94bfabcf43160316660801a2c1db2dbb9"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 04 08:11:53 2008 -0800"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Tue Nov 04 09:45:59 2008 -0800"
      },
      "message": "Cleanup stale manifest migration code from manifest.py\n\nPrior to open-sourcing repo we had manifests in two different\nlayouts; one where the manifest was a straight-up git clone, and\none where the manifest was our bare repository with symlink work\ntree format (identical to what our projects use).  Only the latter\nform is created or used by repo at this point, so the transition\ncode to handle the straight-up git clone is not necessary.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "df830f12389984adeeba04659615b9fc230f2db3",
      "tree": "ea5857656f63f9b375dbb9851e8801062570c24d",
      "parents": [
        "90be5c0839762d14bdee75d121c3923ed91c8404"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 30 09:21:43 2008 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 30 09:21:43 2008 -0700"
      },
      "message": "Remove import_tar, import_zip and the \u003csnapshot\u003e elements\n\nNow that repo relies only on the git data stream (as it is much\nfaster to download through) we don\u0027t really need to be parsing the\n\u003csnapshot\u003e elements within manifest.  Its a lot of complex code to\nconvert the tar (or zip) through to a fast import stream, and we\njust aren\u0027t calling it anymore.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "7965f9fed083f07255d62f2a4a49fb54424356e4",
      "tree": "60b0eff346743da51bf3f4952bd40623e046c362",
      "parents": [
        "de646819b8e43a906d86a579c68118cad31934cc"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Oct 29 15:20:02 2008 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Wed Oct 29 15:24:34 2008 -0700"
      },
      "message": "Move the Editor configuration out of Manifest\u0027s constructor\n\nThis way we can build more than one Manifest instance in memory\nand not muck around with the Editor configuration each time we\nbuild a new instance.\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "5cc6679fb84ec887a09895c53a279df821faad49",
      "tree": "36c80f9302586c639385084d1970f982b1434006",
      "parents": [
        "632768bc65ae0f1dc9eb9260c9146c42d9965a18"
      ],
      "author": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 23 16:19:27 2008 -0700"
      },
      "committer": {
        "name": "Shawn O. Pearce",
        "email": "sop@google.com",
        "time": "Thu Oct 23 16:20:14 2008 -0700"
      },
      "message": "Support user supplied custom .repo/local_manifest.xml files\n\nBy creating a .repo/local_manifest.xml the user can add extra\nprojects into their client space, without touching the main\nmanifest script.\n\nFor example:\n\n  $ cat .repo/local_manifest.xml\n  \u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e\n  \u003cmanifest\u003e\n   \u003cproject path\u003d\"android-build\"\n            name\u003d\"platform/build\"\n            remote\u003d\"korg\"\n            revision\u003d\"android-1.0\" /\u003e\n  \u003c/manifest\u003e\n\nSigned-off-by: Shawn O. Pearce \u003csop@google.com\u003e\n"
    },
    {
      "commit": "cf31fe9b4fb650b27e19f5d7ee7297e383660caf",
      "tree": "d04ca6a45d579dca5e5469606c48c405aee68f4b",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
