author | Gregory Szorc <gps@mozilla.com> |
Mon, 01 Feb 2016 16:10:08 -0800 | |
changeset 282642 | 345a7fbe46221835417d6f112e6f6f407629bee2 |
parent 282641 | 2e3bde77f6d2a01b99992bbae699400fba96967a |
child 282643 | fe69c7cd7a5e9475d76b77117bdef1267bd32279 |
push id | 29968 |
push user | cbook@mozilla.com |
push date | Tue, 02 Feb 2016 10:51:21 +0000 |
treeherder | mozilla-central@5f9ba76eb3b1 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | froydnj |
bugs | 1244736 |
milestone | 47.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/tools/mach_commands.py +++ b/tools/mach_commands.py @@ -63,91 +63,16 @@ class SearchProvider(object): 'MDN, and MXR.') @CommandArgument('term', nargs='+', help='Term(s) to search for.') def search(self, term): self.google(term) self.mdn(term) self.mxr(term) -class Interface(object): - ''' - Represents an XPIDL interface, in what file it is defined, what it derives - from, what its uuid is, and where in the source file the uuid is. - ''' - def __init__(self, filename, production): - from xpidl import xpidl - assert isinstance(production, xpidl.Interface) - self.name = production.name - self.base = production.base - self.filename = filename - self.uuid = production.attributes.uuid - location = production.location - data = location._lexdata - attr_pos = data.rfind(b'[', 0, location._lexpos) - # uuid is always lowercase, but actual file content may not be. - self.uuid_pos = data[attr_pos:location._lexpos].lower() \ - .rfind(self.uuid) + attr_pos - - -class InterfaceRegistry(object): - ''' - Tracks XPIDL interfaces, and allow to search them by name and by the - interface they derive from. - ''' - def __init__(self): - self.by_name = {} - self.by_base = {} - - def get_by_name(self, name): - return self.by_name.get(name, []) - - def get_by_base(self, base): - return self.by_base.get(base, []) - - def add(self, interface): - l = self.by_name.setdefault(interface.name, []) - l.append(interface) - l = self.by_base.setdefault(interface.base, []) - l.append(interface) - - -class IDLUpdater(object): - ''' - Updates interfaces uuids in IDL files. - ''' - def __init__(self, interfaces): - from mozpack.copier import FileRegistry - self.interfaces = interfaces; - self.registry = FileRegistry() - - def add(self, name): - for interface in self.interfaces.get_by_name(name): - self._add(interface) - - def _add(self, interface): - from mozpack.files import GeneratedFile - from uuid import uuid4 - path = interface.filename - if not self.registry.contains(path): - self.registry.add(path, GeneratedFile(open(path).read())) - content = self.registry[path].content - content = content[:interface.uuid_pos] + str(uuid4()) + \ - content[interface.uuid_pos + len(interface.uuid):] - self.registry[path].content = content - - # Recurse through all the interfaces deriving from this one - for derived in self.interfaces.get_by_base(interface.name): - self._add(derived) - - def update(self): - for p, f in self.registry: - f.copy(p) - - @CommandProvider class UUIDProvider(object): @Command('uuid', category='misc', description='Generate a uuid.') @CommandArgument('--format', '-f', choices=['idl', 'cpp', 'c++'], help='Output format for the generated uuid.') def uuid(self, format=None): import uuid @@ -157,56 +82,16 @@ class UUIDProvider(object): if format is None: print('') if format in [None, 'cpp', 'c++']: u = u.hex print('{ 0x%s, 0x%s, 0x%s, \\' % (u[0:8], u[8:12], u[12:16])) pairs = tuple(map(lambda n: u[n:n+2], range(16, 32, 2))) print((' { ' + '0x%s, ' * 7 + '0x%s } }') % pairs) - @Command('update-uuids', category='misc', - description='Update IDL files with new UUIDs.') - @CommandArgument('--path', default='.', - help='Base path under which uuids will be searched.') - @CommandArgument('interfaces', nargs='+', - help='Changed interfaces whose UUIDs need to be updated. ' + - 'Their descendants are updated as well.') - def update_uuids(self, path, interfaces): - import os - from xpidl import xpidl - from mozpack.files import FileFinder - import mozpack.path as mozpath - from tempfile import mkdtemp - - finder = FileFinder(path, find_executables=False) - # Avoid creating xpidllex and xpidlyacc in the current directory. - tmpdir = mkdtemp() - try: - parser = xpidl.IDLParser(outputdir=tmpdir) - registry = InterfaceRegistry() - for p, f in finder.find('**/*.idl'): - p = mozpath.join(path, p) - try: - content = f.open().read() - idl = parser.parse(content, filename=p) - except Exception: - continue - for prod in idl.productions: - if isinstance(prod, xpidl.Interface): - registry.add(Interface(p, prod)) - finally: - import shutil - shutil.rmtree(tmpdir) - - updates = IDLUpdater(registry) - - for interface in interfaces: - updates.add(interface) - - updates.update() @CommandProvider class PastebinProvider(object): @Command('pastebin', category='misc', description='Command line interface to pastebin.mozilla.org.') @CommandArgument('--language', default=None, help='Language to use for syntax highlighting') @CommandArgument('--poster', default='',