cmake: Handle a few more stub messages

pull/4969/head
Daniel Mensinger 6 years ago
parent ef18afc48b
commit 9aae603d1b
No known key found for this signature in database
GPG Key ID: 54DD94C131E277D4
  1. 46
      mesonbuild/cmake/client.py

@ -30,7 +30,10 @@ CMAKE_SERVER_END_STR = ']== "CMake Server" ==]'
CMAKE_MESSAGE_TYPES = {
'error': ['cookie', 'errorMessage'],
'hello': ['supportedProtocolVersions'],
'message': ['cookie', 'message'],
'progress': ['cookie'],
'reply': ['cookie', 'inReplyTo'],
'signal': ['cookie', 'name'],
}
CMAKE_REPLY_TYPES = {
@ -66,6 +69,14 @@ class ReplyBase(MessageBase):
super().__init__('reply', cookie)
self.in_reply_to = in_reply_to
class SignalBase(MessageBase):
def __init__(self, cookie: str, signal_name: str):
super().__init__('signal', cookie)
self.signal_name = signal_name
def log(self) -> None:
mlog.log(mlog.bold('CMake signal:'), mlog.yellow(self.signal_name))
# Special Message classes
class Error(MessageBase):
@ -76,6 +87,21 @@ class Error(MessageBase):
def log(self) -> None:
mlog.error(mlog.bold('CMake server error:'), mlog.red(self.message))
class Message(MessageBase):
def __init__(self, cookie: str, message: str):
super().__init__('message', cookie)
self.message = message
def log(self) -> None:
mlog.log(mlog.bold('CMake:'), self.message)
class Progress(MessageBase):
def __init__(self, cookie: str):
super().__init__('progress', cookie)
def log(self) -> None:
pass
class MessageHello(MessageBase):
def __init__(self, supported_protocol_versions: List[dict]):
super().__init__('hello', '')
@ -122,13 +148,16 @@ class CMakeClient:
self.env = env
self.proc = None
self.type_map = {
'hello': self.resolve_type_hello,
'error': self.resolve_type_error,
'error': lambda data: Error(data['cookie'], data['errorMessage']),
'hello': lambda data: MessageHello(data['supportedProtocolVersions']),
'message': lambda data: Message(data['cookie'], data['message']),
'progress': lambda data: Progress(data['cookie']),
'reply': self.resolve_type_reply,
'signal': lambda data: SignalBase(data['cookie'], data['name'])
}
self.reply_map = {
'handshake': self.resolve_reply_handshake,
'handshake': lambda data: ReplyHandShake(data['cookie']),
}
def readMessageRaw(self) -> dict:
@ -175,7 +204,7 @@ class CMakeClient:
self.writeMessage(request)
while True:
reply = self.readMessage()
if reply.cookie == request.cookie:
if reply.cookie == request.cookie and reply.type in ['reply', 'error']:
return reply
reply.log()
@ -194,12 +223,6 @@ class CMakeClient:
raise CMakeException('Failed to perform the handshake with the CMake server')
mlog.log('CMake server handshake:', mlog.green('OK'))
def resolve_type_error(self, data: dict) -> Error:
return Error(data['cookie'], data['errorMessage'])
def resolve_type_hello(self, data: dict) -> MessageHello:
return MessageHello(data['supportedProtocolVersions'])
def resolve_type_reply(self, data: dict) -> ReplyBase:
reply_type = data['inReplyTo']
func = self.reply_map.get(reply_type, None)
@ -210,9 +233,6 @@ class CMakeClient:
raise CMakeException('Key "{}" is missing from CMake server message type {}'.format(i, type))
return func(data)
def resolve_reply_handshake(self, data: dict) -> ReplyHandShake:
return ReplyHandShake(data['cookie'])
@contextmanager
def connect(self):
self.startup()

Loading…
Cancel
Save