Bug 1244736 - Remove `mach update-uuids` and related code; r?froydnj draft
authorGregory Szorc <gps@mozilla.com>
Mon, 01 Feb 2016 13:06:34 -0800
changeset 327758 f4a8f9727f1213ae4fe5d17fa1a648ed8802095f
parent 327605 d07dbd40dcd209124149f331f60dd55c8da33fbe
child 513744 8d93fdfce06bcd89656cee96385ea8889db77870
push id10287
push usergszorc@mozilla.com
push dateMon, 01 Feb 2016 21:07:17 +0000
reviewersfroydnj
bugs1244736
milestone47.0a1
Bug 1244736 - Remove `mach update-uuids` and related code; r?froydnj We no longer update UUIDs when changing XPIDL interfaces. `mach update-uuids` was invented to make this process easier. Delete the command and related code since it is no longer needed.
tools/mach_commands.py
--- 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='',