Mercurial > hg > graal-compiler
comparison mxtool/mx.py @ 22030:5b4a974d9ae6
mx: added support for overridden commands to be available via a qualified name
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 19 Jun 2015 15:59:22 +0200 |
parents | e942083c0fcc |
children | 434fbaaf53d7 |
comparison
equal
deleted
inserted
replaced
22029:0eedd37f45ba | 22030:5b4a974d9ae6 |
---|---|
1842 def _handle_conflict_resolve(self, action, conflicting_actions): | 1842 def _handle_conflict_resolve(self, action, conflicting_actions): |
1843 self._handle_conflict_error(action, conflicting_actions) | 1843 self._handle_conflict_error(action, conflicting_actions) |
1844 | 1844 |
1845 def _format_commands(): | 1845 def _format_commands(): |
1846 msg = '\navailable commands:\n\n' | 1846 msg = '\navailable commands:\n\n' |
1847 for cmd in sorted(_commands.iterkeys()): | 1847 for cmd in sorted([k for k in _commands.iterkeys() if ':' not in k]) + sorted([k for k in _commands.iterkeys() if ':' in k]): |
1848 c, _ = _commands[cmd][:2] | 1848 c, _ = _commands[cmd][:2] |
1849 doc = c.__doc__ | 1849 doc = c.__doc__ |
1850 if doc is None: | 1850 if doc is None: |
1851 doc = '' | 1851 doc = '' |
1852 msg += ' {0:<20} {1}\n'.format(cmd, doc.split('\n', 1)[0]) | 1852 msg += ' {0:<20} {1}\n'.format(cmd, doc.split('\n', 1)[0]) |
5670 assert _argParser is not None | 5670 assert _argParser is not None |
5671 _argParser.add_argument(*args, **kwargs) | 5671 _argParser.add_argument(*args, **kwargs) |
5672 | 5672 |
5673 def update_commands(suite, new_commands): | 5673 def update_commands(suite, new_commands): |
5674 for key, value in new_commands.iteritems(): | 5674 for key, value in new_commands.iteritems(): |
5675 if _commands.has_key(key): | 5675 assert ':' not in key |
5676 warn("redefining command '" + key + "' in suite " + suite.name) | 5676 old = _commands.get(key) |
5677 if old is not None: | |
5678 oldSuite = _commandsToSuite.get(key) | |
5679 if not oldSuite: | |
5680 # Core mx command is overridden by first suite | |
5681 # defining command of same name. The core mx | |
5682 # command has its name prefixed with ':'. | |
5683 _commands[':' + key] = old | |
5684 else: | |
5685 # Previously specified command from another suite | |
5686 # is not overridden. Instead, the new command | |
5687 # has a name qualified by the suite name. | |
5688 key = suite.name + ':' + key | |
5677 _commands[key] = value | 5689 _commands[key] = value |
5690 _commandsToSuite[key] = suite | |
5678 | 5691 |
5679 def warn(msg): | 5692 def warn(msg): |
5680 if _warn: | 5693 if _warn: |
5681 print 'WARNING: ' + msg | 5694 print 'WARNING: ' + msg |
5682 | 5695 |
5683 # Table of commands in alphabetical order. | 5696 # Table of commands in alphabetical order. |
5684 # Keys are command names, value are lists: [<function>, <usage msg>, <format args to doc string of function>...] | 5697 # Keys are command names, value are lists: [<function>, <usage msg>, <format args to doc string of function>...] |
5685 # If any of the format args are instances of Callable, then they are called with an 'env' are before being | 5698 # If any of the format args are instances of Callable, then they are called before being |
5686 # used in the call to str.format(). | 5699 # used in the call to str.format(). |
5687 # Suite extensions should not update this table directly, but use update_commands | 5700 # Suite extensions should not update this table directly, but use update_commands |
5688 _commands = { | 5701 _commands = { |
5689 'about': [about, ''], | 5702 'about': [about, ''], |
5690 'build': [build, '[options]'], | 5703 'build': [build, '[options]'], |
5710 'netbeansinit': [netbeansinit, ''], | 5723 'netbeansinit': [netbeansinit, ''], |
5711 'suites': [show_suites, ''], | 5724 'suites': [show_suites, ''], |
5712 'projects': [show_projects, ''], | 5725 'projects': [show_projects, ''], |
5713 'unittest' : [mx_unittest.unittest, '[unittest options] [--] [VM options] [filters...]', mx_unittest.unittestHelpSuffix], | 5726 'unittest' : [mx_unittest.unittest, '[unittest options] [--] [VM options] [filters...]', mx_unittest.unittestHelpSuffix], |
5714 } | 5727 } |
5728 _commandsToSuite = {} | |
5715 | 5729 |
5716 _argParser = ArgParser() | 5730 _argParser = ArgParser() |
5717 | 5731 |
5718 def _suitename(mxDir): | 5732 def _suitename(mxDir): |
5719 base = os.path.basename(mxDir) | 5733 base = os.path.basename(mxDir) |