Bug 1244736 - Remove `mach update-uuids` and related code; r=froydnj
authorGregory Szorc <gps@mozilla.com>
Mon, 01 Feb 2016 16:10:08 -0800
changeset 282642 345a7fbe46221835417d6f112e6f6f407629bee2
parent 282641 2e3bde77f6d2a01b99992bbae699400fba96967a
child 282643 fe69c7cd7a5e9475d76b77117bdef1267bd32279
push id29968
push usercbook@mozilla.com
push dateTue, 02 Feb 2016 10:51:21 +0000
treeherdermozilla-central@5f9ba76eb3b1 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersfroydnj
bugs1244736
milestone47.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
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='',