зеркало из https://github.com/mozilla/gecko-dev.git
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. --HG-- extra : commitid : GLChZKelC0Q extra : rebase_source : f4a8f9727f1213ae4fe5d17fa1a648ed8802095f extra : amend_source : 2fdab014f16482ae82e0cc0f9b2c2f4620001657
This commit is contained in:
Родитель
369461b3ab
Коммит
0b6ca59214
|
@ -68,81 +68,6 @@ class SearchProvider(object):
|
|||
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',
|
||||
|
@ -162,46 +87,6 @@ class UUIDProvider(object):
|
|||
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):
|
||||
|
|
Загрузка…
Ссылка в новой задаче