summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
Commit message (Collapse)AuthorAgeFilesLines
...
* | Merge "Better handling of duplicate default"David Pursehouse2013-10-151-5/+14
|\ \ | |/ |/|
| * Better handling of duplicate defaultJulien Campergue2013-10-101-5/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | Currently, an error is raised if more than one default is defined. When including another manifest, it is likely that a default has been defined in both manifests. Don't raise an error if all the defaults defined have the same attributes. Change-Id: I2603020687e2ba04c2c62c3268ee375279b34a08 Signed-off-by: Julien Campergue <julien.campergue@parrot.com>
* | Respect remote aliasesConley Owens2013-10-081-1/+6
|/ | | | | | | | | | | Previously, change I7150e449341ed8655d398956a095261978d95870 had broken alias support in order to fix the manifest command to keep it from spitting projects that point to an alias that wasn't recorded. This commit reverts that commit and instead solves the issue more correctly, outputting the alias in the remote node of the manifest and respecting that alias when outputting the list of projects. Change-Id: I941fc4adb7121d2e61cedc5838e80d3918c977c3
* Give the node _Default class a destBranchExprConley Owens2013-09-251-0/+1
| | | | | | | | | This is to avoid the following AttributeError: line 681, in _ParseProject AttributeError: '_Default' object has no attribute 'destBranchExpr' Change-Id: Ia9f7e2cce1409d22d71bc8a74b33edf2b27702ca
* Fix urllib.parse (urlparse) handlingChirayu Desai2013-06-111-1/+1
| | | | | | | | | | | | | | | Revert "Fix "'module' object is not callable" error", and fix it properly. * The urlparse module is renamed to urllib.parse in Python 3. * This commit fixes the code to use "urllib.parse.urlparse" instead of creating a new module urlib and setting urlib.parse to urlparse.urlparse. * Fixes an AttributeError: 'function' object has no attribute 'uses_relative' This reverts commit cd51f17c643370e6199216462c1be36f04d57291. Change-Id: I48490b20ecd19cf5a6edd835506ea5a467d556ac
* Fix "'module' object is not callable" errorDavid Pursehouse2013-06-081-1/+1
| | | | | | | | In a couple of files the urlparse method was not being set up correctly for python < 3 and this resulted in an error being thrown when trying to call it. Change-Id: I4d2040ac77101e4e228ee225862f365ae3d96cec
* Send reviews to a different branch from fetchBryan Jacobs2013-05-241-1/+6
| | | | | | | | This adds the ability to have reviews pushed to a different branch from the one on which changes are based. This is useful for "gateway" systems without smartsync. Change-Id: I3a8a0fabcaf6055e62d3fb55f89c944e2f81569f
* Move Python version checking to a separate moduleDavid Pursehouse2013-05-231-5/+5
| | | | | | | | | | | | | | | | | Add a new module with methods for checking the Python version. Instead of handling Python3 imports with try...except blocks, first check the python version and then import the relevant modules. This makes the code a bit cleaner and will result in less diff when/if we remove support for Python < 3 later. Use the same mechanism to handle `input` vs. `raw_input` and add suppression of pylint warnings caused by redefinition of the built-in method `input`. Change-Id: Ia403e525b88d77640a741ac50382146e7d635924 Also-by: Chirayu Desai <cdesai@cyanogenmod.org> Signed-off-by: Chirayu Desai <cdesai@cyanogenmod.org>
* Some fixes for supporting python3Chirayu Desai2013-04-181-32/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | * Fix imports. * Use python3 syntax. * Wrap map() calls with list(). * Use list() only wherever needed. (Thanks Conley!) * Fix dictionary iteration methods (s/iteritems/items/). * Make use of sorted() in appropriate places * Use iterators directly in the loop. * Don't use .keys() wherever it isn't needed. * Use sys.maxsize instead of sys.maxint TODO: * Make repo work fully with python3. :) Some of this was done by the '2to3' tool [1], by applying the needed fixes in a way that doesn't break compatibility with python2. Links: [1]: http://docs.python.org/2/library/2to3.html Change-Id: Ibdf3bf9a530d716db905733cb9bfef83a48820f7 Signed-off-by: Chirayu Desai <cdesai@cyanogenmod.org>
* Allow mirror to be created in directories specified by 'path' attributeScott Fan2013-04-111-0/+4
| | | | | | | | | | | | | In some cases, especially when local manifest files exist, users may want to force the mirrored repositories to be created in folders according to their 'path' attribute in the manifest, rather than according to the name of the repositories. To enable this functionality for specified mirror, add a new attribute 'force-path' for that project in the manifest, set its value to 'true'. Change-Id: I61df8c987a23d84309b113e7d886ec90c838a6cc Signed-off-by: Scott Fan <fancp2007@gmail.com>
* Allow clone depth to be specified per projectDavid Pursehouse2013-04-101-0/+11
| | | | | | | | | | | If the clone-depth attribute is set on a project, its value will be used to set the depth when fetching the git. The value, if given, must be a positive integer. The value in the clone-depth attribute overrides any value given to repo init via the --depth command line option. Change-Id: I273015b3724213600b63e40cca4cafaa9f782ddf
* Fix `repo manifest` support of remote aliases.Brian Harring2013-04-031-2/+0
| | | | | | | | | Long story short, w/out this modification the manifest dump points at the alias, rather than the actual remote for the project. This breaks sync'ing for scenarios where the alias doesn't have the same repos available as the remote, plus just plain is wrong. Change-Id: I7150e449341ed8655d398956a095261978d95870
* Fix: local manifest deprecation warning appears more than onceDavid Pursehouse2013-02-171-3/+6
| | | | | | | | | When running repo sync, the local_manifest.xml deprecation warning is shown twice. Add a flag to ensure that it is only displayed once. Change-Id: Icfa2b0b6249c037c29771f9860252e6eda3ae651
* Exit with fatal error if local manifest file cannot be parsedDavid Pursehouse2013-02-171-5/+2
| | | | | | | | | | | | | If the .repo/local_manifests folder includes a local manifest file that cannot be parsed, the current behaviour is to catch the parse exception, print a warning, and continue to process remaining files. This can cause any errors to go unnoticed. Remove the exception handling, so that the exception is instead caught in main._Main, and repo exits with a fatal error. Change-Id: I75a70b7b850d2eb3e4ac99d435a4568ff598b7f4
* Show full path of `local_manifests` folder in deprecation warningDavid Pursehouse2013-02-171-2/+2
| | | | | | | | | | | | When a local_manifest.xml file is present, a deprecation warning is printed telling the user to put local manifest files in the `local_manifests` directory. Include the full path to the `local_manifests` directory in the warning, to reduce confusion about where the directory should be located. Also enclose the directory name in backticks. Change-Id: I85710cfbd6e77fb2fa6b7b0ce66d77693ccd649f
* Merge "should use os.path.lexist instead of os.path.exist"Shawn Pearce2013-01-281-3/+3
|\
| * should use os.path.lexist instead of os.path.existSebastian Frias2012-11-231-3/+3
| | | | | | | | | | | | | | | | | | | | The logic of the program requires a check on the existence of the link itself See repo issue #125 : https://code.google.com/p/git-repo/issues/detail?id=125 Change-Id: Ia7300d22d6d656259f47c539febf1597f0c35538
* | If parsing the manifests fails, reset the XmlManifest objectJoe Onorato2013-01-171-1/+7
| | | | | | | | | | | | so that if it's called again, we see the correct errors. Change-Id: I909488feeac04aecfc92a9b5d6fb17827ef2f213
* | Merge "Pass full path of the XML in local_manifests to the parser"Conley Owens2013-01-171-1/+2
|\ \
| * | Pass full path of the XML in local_manifests to the parserTobias Droste2013-01-071-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes the following python error message if the current working directory is not .repo/local_manifests: IOError: [Errno 2] No such file or directory: 'local_manifest.xml' Signed-off-by: Tobias Droste <tdroste87@gmail.com> CC: David Pursehouse <david.pursehouse@sonymobile.com> Change-Id: I4668dc04219b6233c7ff6ca3b4138bec9ee3529f
* | | Merge "Make -notdefault a default manifest group"Conley Owens2013-01-141-3/+2
|\ \ \ | |/ / |/| |
| * | Make -notdefault a default manifest groupMatt Gumbel2012-12-211-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When trying to render manifest with SHAs, projects in group notdefault caused the following crash: Traceback (most recent call last): File ".repo/repo/main.py", line 385, in <module> _Main(sys.argv[1:]) File ".repo/repo/main.py", line 365, in _Main result = repo._Run(argv) or 0 File ".repo/repo/main.py", line 137, in _Run result = cmd.Execute(copts, cargs) File ".repo/repo/subcmds/manifest.py", line 129, in Execute self._Output(opt, manifest) File ".repo/repo/subcmds/manifest.py", line 79, in _Output peg_rev = opt.peg_rev) File ".repo/repo/manifest_xml.py", line 199, in Save p.work_git.rev_parse(HEAD + '^0')) File ".repo/repo/project.py", line 2035, in runner capture_stderr = True) File ".repo/repo/git_command.py", line 215, in __init__ raise GitError('%s: %s' % (command[1], e)) error.GitError: rev-parse: [Errno 2] No such file or directory: 'prebuilts/eclipse-build-deps' This patch resolves the issue by making sure that -notdefault is always used as a default manifest group so that notdefault projects are not rendered out by the manifest subcmd. Change-Id: I4a8bd18ea7600309f39ceff1b1ab6e1ff3adf21d Signed-off-by: Matt Gumbel <matthew.k.gumbel@intel.com>
* | | Support resolving relative fetch URLs on persistent-https://v1.12.0Shawn Pearce2013-01-021-1/+8
|/ / | | | | | | | | | | | | | | | | Some versions of Python will only attempt to resolve a relative URL if they understand the URL scheme. Convert persistent-http:// and persistent-https:// schemes to the more typical http:// and https:// versions for the resolve call. Change-Id: I99072d5a69be8cfaa429a3ab177ba644d928ffba
* / Represent git-submodule as nested projects, take 2Che-Liang Chiou2012-11-191-26/+103
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (Previous submission of this change broke Android buildbot due to incorrect regular expression for parsing git-config output. During investigation, we also found that Android, which pulls Chromium, has a workaround for Chromium's submodules; its manifest includes Chromium's submodules. This new change, in addition to fixing the regex, also take this type of workarounds into consideration; it adds a new attribute that makes repo not fetch submodules unless submodules have a project element defined in the manifest, or this attribute is overridden by a parent project element or by the default element.) We need a representation of git-submodule in repo; otherwise repo will not sync submodules, and leave workspace in a broken state. Of course this will not be a problem if all projects are owned by the owner of the manifest file, who may simply choose not to use git-submodule in all projects. However, this is not possible in practice because manifest file owner is unlikely to own all upstream projects. As git submodules are simply git repositories, it is natural to treat them as plain repo projects that live inside a repo project. That is, we could use recursively declared projects to denote the is-submodule relation of git repositories. The behavior of repo remains the same to projects that do not have a sub-project within. As for parent projects, repo fetches them and their sub-projects as normal projects, and then checks out subprojects at the commit specified in parent's commit object. The sub-project is fetched at a path relative to parent project's working directory; so the path specified in manifest file should match that of .gitmodules file. If a submodule is not registered in repo manifest, repo will derive its properties from itself and its parent project, which might not always be correct. In such cases, the subproject is called a derived subproject. To a user, a sub-project is merely a git-submodule; so all tips of working with a git-submodule apply here, too. For example, you should not run `repo sync` in a parent repository if its submodule is dirty. Change-Id: I4b8344c1b9ccad2f58ad304573133e5d52e1faef
* Better error message if 'remove-project' refers to non-existent projectDavid Pursehouse2012-11-161-3/+2
| | | | | | | | | | If a local manifest includes a 'remove-project' element that refers to a project that does not exist in the manifest, the error message is a bit cryptic. Change the error message to make it clearer what is wrong. Change-Id: I0b1043aaec87893c3128211d3a9ab2db6d600755
* Fix inconsistent indentationDavid Pursehouse2012-11-141-22/+22
| | | | | | | | | | The repo coding style is to indent at 2 characters, but there are many places where this is not followed. Enable pylint warning "W0311: Bad indentation" and make sure all indentation is at multiples of 2 characters. Change-Id: I68f0f64470789ce2429ab11104d15d380a63e6a8
* Change print statements to work in python3Sarah Owens2012-11-131-3/+5
| | | | | | This is part of a series of changes to introduce Python3 support. Change-Id: I373be5de7141aa127d7debdbce1df39148dbec32
* Make load order of local manifests deterministicDavid Pursehouse2012-11-141-1/+1
| | | | | | | | | | | Local manifest files stored in the local_manifests folder are loaded in alphabetical order, so it's easier to know in which order project removals/additions/modifications will be applied. If local_manifests.xml exists, it will be loaded before the files in local_manifests. Change-Id: Ia5c0349608f1823b4662cd6b340b99915bd973d5
* Better handling of duplicate remotesDavid Pursehouse2012-11-131-5/+14
| | | | | | | | | | | | | | In the current implementation, an error is raised if a remote with the same name is defined more than once. The check is only that the remote has the same name as an existing remote. With the support for multiple local manifests, it is more likely than before that the same remote is defined in more than one manifest. Change the check so that it only raises an error if a remote is defined more than once with the same name, but different attributes. Change-Id: Ic3608646cf9f40aa2bea7015d3ecd099c5f5f835
* Print deprecation warning when local_manifest.xml is usedDavid Pursehouse2012-11-131-0/+2
| | | | | | | | The preferred way to specify local manifests is to drop the file(s) in the local_manifests folder. Print a deprecation warning when the legacy local_manifest.xml file is used. Change-Id: Ice85bd06fb612d6fcceeaa0755efd130556c4464
* Add support for multiple local manifestsDavid Pursehouse2012-11-131-1/+13
| | | | | | | | | Add support for multiple local manifests stored in the local_manifests folder under the .repo home directory. Local manifests will be processed in addition to local_manifest.xml. Change-Id: Ia0569cea7e9ae0fe3208a8ffef5d9679e14db03b
* Handle XML errors when parsing the manifestDavid Pursehouse2012-11-131-1/+5
| | | | | | | Catch ExpatError and exit gracefully with an error message, rather than exiting with a python traceback. Change-Id: Ifd0a7762aab4e8de63dab8a66117170a05586866
* Even more coding style cleanupDavid Pursehouse2012-10-301-1/+1
| | | | | | | | | | | Fixing some more pylint warnings: W1401: Anomalous backslash in string W0623: Redefining name 'name' from outer scope W0702: No exception type(s) specified E0102: name: function already defined line n Change-Id: I5afcdb4771ce210390a79981937806e30900a93c
* Revert "Represent git-submodule as nested projects"v1.11.1Shawn O. Pearce2012-10-261-82/+26
| | | | | | | | | | | This reverts commit 69998b0c6ff724bf620480140ccce648fec7d6a9. Broke Android's non-gitmodule use case. Conflicts: project.py subcmds/sync.py Change-Id: I68ceeb63d8ee3b939f85a64736bdc81dfa352aed
* Merge "Use modern Python exception syntax"Conley Owens2012-10-251-1/+1
|\
| * Use modern Python exception syntaxSarah Owens2012-10-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | "except Exception as e" instead of "except Exception, e" This is part of a transition to supporting Python 3. Python >= 2.6 support "as" syntax. Note: this removes Python 2.5 support. Change-Id: I309599f3981bba2b46111c43102bee38ff132803
* | Add pylint configuration and instructionsDavid Pursehouse2012-10-241-1/+1
| | | | | | | | | | | | | | | | | | | | pylint configuration file (.pylintrc) is added, and submission instructions are updated to include pylint usage steps. Deprecated pylint suppression (`disable-msg`) is updated in a few modules to make it work properly with the latest version (0.26). Change-Id: I4ec2ef318e23557a374ecdbf40fe12645766830c
* | Represent git-submodule as nested projectsChe-Liang Chiou2012-10-231-26/+82
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We need a representation of git-submodule in repo; otherwise repo will not sync submodules, and leave workspace in a broken state. Of course this will not be a problem if all projects are owned by the owner of the manifest file, who may simply choose not to use git-submodule in all projects. However, this is not possible in practice because manifest file owner is unlikely to own all upstream projects. As git submodules are simply git repositories, it is natural to treat them as plain repo projects that live inside a repo project. That is, we could use recursively declared projects to denote the is-submodule relation of git repositories. The behavior of repo remains the same to projects that do not have a sub-project within. As for parent projects, repo fetches them and their sub-projects as normal projects, and then checks out subprojects at the commit specified in parent's commit object. The sub-project is fetched at a path relative to parent project's working directory; so the path specified in manifest file should match that of .gitmodules file. If a submodule is not registered in repo manifest, repo will derive its properties from itself and its parent project, which might not always be correct. In such cases, the subproject is called a derived subproject. To a user, a sub-project is merely a git-submodule; so all tips of working with a git-submodule apply here, too. For example, you should not run `repo sync` in a parent repository if its submodule is dirty. Change-Id: I541e9e2ac1a70304272dbe09724572aa1004eb5c
* More coding style cleanupDavid Pursehouse2012-10-221-1/+2
| | | | | | | | | | | | | | | | Fixing more issues found with pylint. Some that were supposed to have been fixed in the previous sweep (Ie0db839e) but were missed: C0321: More than one statement on a single line W0622: Redefining built-in 'name' And some more: W0631: Using possibly undefined loop variable 'name' W0223: Method 'name' is abstract in class 'name' but is not overridden W0231: __init__ method from base class 'name' is not called Change-Id: Ie119183708609d6279e973057a385fde864230c3
* Coding style cleanupDavid Pursehouse2012-10-091-2/+1
| | | | | | | | | | | | | | | Fix the following issues reported by pylint: C0321: More than one statement on a single line W0622: Redefining built-in 'name' W0612: Unused variable 'name' W0613: Unused argument 'name' W0102: Dangerous default value 'value' as argument W0105: String statement has no effect Also fixed a few cases of inconsistent indentation. Change-Id: Ie0db839e7c57d576cff12d8c055fe87030d00744
* Merge "manifest: record the original revision when in -r mode."Conley Owens2012-10-031-6/+13
|\
| * manifest: record the original revision when in -r mode.Brian Harring2012-09-281-6/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently when doing a sync against a revision locked manifest, sync has no option but to fall back to sync'ing the entire refs space; it doesn't know which ref to ask for that contains the sha1 it wants. This sucks if we're in -c mode; thus when we generate a revision locked manifest, record the originating branch- and try syncing that branch first. If the sha1 is found within that branch, this saves us having to pull down the rest of the repo- a potentially heavy saving. If that branch doesn't have the desired sha1, we fallback to sync'ing everything. Change-Id: I99a5e44fa1d792dfcada76956a2363187df94cf1
* | Fix incorrect default_groups when parsing projects from XML manifestDavid Holmer2012-09-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Change Details: * Switch first default group to 'all' instead of 'default' Change Benefits: * More consistent with default_groups in the counterpart Save() function * Fixes bug where command 'repo manifest' added an extra 'default' group to every output project element groups attribute. This bug was particularly confusing for projects which had 'groups="notdefault"' as they were output as 'groups="notdefault,default"' by 'repo manifest' Change-Id: I5611c027a982d3394899466248b971910bec8c6b
* | Clean up importsDavid Pursehouse2012-09-181-1/+2
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | manifest_xml: import `HEAD` and `R_HEADS` from correct module version: import `HEAD` from correct module `HEAD` and `R_HEADS` should be imported from the git_refs module, where they are originally defined, rather than from the project module. repo: remove unused import of readline cherry_pick: import standard modules on separate lines smartsync: import subcmd modules explicitly from subcmd Use: `import re import sys` and `from subcmds.sync import Sync` Instead of: `import sys, re` and `from sync import Sync` Change-Id: Ie10dd6832710939634c4f5c86b9ba5a9cd6fc92e
* Fix ManifestParseError when first child node is commentv1.10.4Jooncheol Park2012-09-071-3/+5
| | | | | | | | | | | | If the first line of manifest.xml is a XML comment, root.childNodes[0] is not a 'manifest' element node. The python minidom module will makes a 'Comment' node as root.childNodes[0]. Since the original code only checks whether the first child node is 'manifest', it couldn't do any command including 'sync' due to the 'ManifestParseError' exception. This patch could allow the comments between '<?xml ...?>' and '<manifest>' in the manifest.xml file. Change-Id: I0b81dea4f806965eca90f704c8aa7df49c579402
* Allow projects to be specified as notdefaultConley Owens2012-09-051-2/+2
| | | | | | | | | | | | Instead of every group being in the group "default", every project is now in the group "all". A group that should not be downloaded by default may be added to the group "notdefault". This allows all group names to be positive (instead of removing groups directly in the manifest with -default) and offers a clear way of selecting every project (--groups all). Change-Id: I99cd70309adb1f8460db3bbc6eff46bdcd22256f
* Remove unused importsDavid Pursehouse2012-08-231-1/+1
| | | | | | There are several imports that are not used. Remove them. Change-Id: I2ac3be66827bd68d3faedcef7d6bbf30ea01d3f2
* Omit all default groups when generating a manifestDmitry Fink2012-08-071-1/+2
| | | | | | | | One of the recent changes introduced implicit path:xxx and name:xxx groups to every project, however they are not being stripped when generating a manifest using "repo manifest" command resulting in clutter Change-Id: Iec8610ba794b2fe4a6cdf0f59ca561595b66f9b5
* Fix mirror modev1.10.2Shawn O. Pearce2012-08-021-1/+1
| | | | Change-Id: Ica0e8392562a7ae5aad7e45441c1540e5e2b0238
* Add remote alias support in manifestYestin Sun2012-07-311-2/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `alias` is an optional attribute in element `remote`. It can be used to override attibute `name` to be set as the remote name in each project's .git/config. Its value can be duplicated while attribute `name` has to be unique across the manifest file. This helps each project to be able to have same remote name which actually points to different remote url. It eases some automation scripts to be able to checkout/push to same remote name but actually different remote url, like: repo forall -c "git checkout -b work same_remote/work" repo forall -c "git push same_remote work:work" for example: The manifest with 'alias' will look like: <?xml version='1.0' encoding='UTF-8'?> <manifest> <remote alias="same_alias" fetch="git://git.external1.org/" name="ext1" review="http://review.external1.org"/> <remote alias="same_alias" fetch="git://git.external2.org/" name="ext2" review="http://review.external2.org"/> <remote alias="same_alias" fetch="ssh://git.internal.com:29418" name="int" review="http://review.internal.com"/> <default remote="int" revision="int-branch" sync-j="2"/> <project name="path/to/project1" path="project1" remote="ext1"/> <project name="path/to/project2" path="project2" remote="ext2"/> <project name="path/to/project3" path="project3"/> ... </manifest> In each project, use command "git remote -v" project1: same_alias git://git.external1.org/project1 (fetch) same_alias git://git.external1.org/project1 (push) project2: same_alias git://git.external2.org/project2 (fetch) same_alias git://git.external2.org/project2 (push) project3: same_alias ssh://git.internal.com:29418/project3 (fetch) same_alias ssh://git.internal.com:29418/project3 (push) Change-Id: I2c48263097ff107f0c978f3e83966ae71d06cb90