[Lldb-commits] [lldb] r254025 - Include config settings in the archive, and extract on the remote.

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Tue Nov 24 13:35:50 PST 2015


Author: zturner
Date: Tue Nov 24 15:35:50 2015
New Revision: 254025

URL: http://llvm.org/viewvc/llvm-project?rev=254025&view=rev
Log:
Include config settings in the archive, and extract on the remote.

Added:
    lldb/trunk/scripts/swig_bot_lib/config.py
Modified:
    lldb/trunk/scripts/swig_bot_lib/client.py
    lldb/trunk/scripts/swig_bot_lib/local.py
    lldb/trunk/scripts/swig_bot_lib/server.py

Modified: lldb/trunk/scripts/swig_bot_lib/client.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/client.py?rev=254025&r1=254024&r2=254025&view=diff
==============================================================================
--- lldb/trunk/scripts/swig_bot_lib/client.py (original)
+++ lldb/trunk/scripts/swig_bot_lib/client.py Tue Nov 24 15:35:50 2015
@@ -23,6 +23,7 @@ from lldbsuite.support import fs
 from lldbsuite.support import sockutil
 
 # package imports
+from . import config
 from . import local
 
 default_ip = "127.0.0.1"
@@ -151,11 +152,17 @@ def run(args):
         if not os.path.isfile(options.swig_executable):
             logging.error("Swig executable '{}' does not exist."
                           .format(options.swig_executable))
-        local.generate(options)
+        gen_options = local.GenOptions()
+        gen_options.languages = options.languages
+        gen_options.src_root = options.src_root
+        gen_options.target_dir = options.target_dir
+        gen_options.swig_executable = options.swig_executable
+        local.generate(gen_options)
     else:
         logging.info("swig bot client using remote generation with server '{}'"
                      .format(options.remote))
-        packed_input = local.pack_input(options)
+        config_json = config.generate_config_json(options)
+        packed_input = local.pack_archive(config_json, options)
         connection = establish_remote_connection(options.remote)
         response = transmit_data(connection, packed_input)
         logging.debug("Received {} byte response.".format(len(response)))

Added: lldb/trunk/scripts/swig_bot_lib/config.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/config.py?rev=254025&view=auto
==============================================================================
--- lldb/trunk/scripts/swig_bot_lib/config.py (added)
+++ lldb/trunk/scripts/swig_bot_lib/config.py Tue Nov 24 15:35:50 2015
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+
+"""
+Shared functionality used by `client` and `server` when dealing with
+configuration data
+"""
+
+# Future imports
+from __future__ import absolute_import
+from __future__ import print_function
+
+# Python modules
+import json
+import logging
+import os
+import socket
+import struct
+import sys
+
+# LLDB modules
+import use_lldb_suite
+
+# package imports
+from . import local
+
+def generate_config_json(options):
+    config = {"languages": options.languages}
+    return json.dumps(config)
+
+def parse_config_json(option_json):
+    return json.loads(option_json)

Modified: lldb/trunk/scripts/swig_bot_lib/local.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/local.py?rev=254025&r1=254024&r2=254025&view=diff
==============================================================================
--- lldb/trunk/scripts/swig_bot_lib/local.py (original)
+++ lldb/trunk/scripts/swig_bot_lib/local.py Tue Nov 24 15:35:50 2015
@@ -17,12 +17,19 @@ import logging
 import os
 import subprocess
 import sys
+import tempfile
 import zipfile
 
 # LLDB modules
 import use_lldb_suite
 
-def pack_input(options):
+class GenOptions(object):
+    src_root = None
+    target_dir = None
+    languages = None
+    swig_executable = None
+
+def pack_archive(config_json, options):
     logging.info("Creating input file package...")
     zip_data = io.BytesIO()
     zip_file = None
@@ -61,8 +68,26 @@ def pack_input(options):
                 os.path.join(options.src_root, relative_path))
             logging.info("{} -> {}".format(full_path, relative_path))
             zip_file.write(full_path, relative_path)
+
+    logging.info("(null) -> config.json")
+    zip_file.writestr("config.json", config_json)
+    zip_file.close()
     return zip_data.getvalue()
 
+def unpack_archive(subfolder, archive_bytes):
+    tempfolder = os.path.join(tempfile.gettempdir(), subfolder)
+    os.makedirs(tempfolder, exist_ok=True)
+
+    tempfolder = tempfile.mkdtemp(dir=tempfolder)
+    logging.debug("Extracting archive to {}".format(tempfolder))
+
+    zip_data = io.BytesIO(archive_bytes)
+    logging.debug("Opening zip archive...")
+    zip_file = zipfile.ZipFile(zip_data, mode='r')
+    zip_file.extractall(tempfolder)
+    zip_file.close()
+    return tempfolder
+
 def generate(options):
     include_folder = os.path.join(options.src_root, "include")
     in_file = os.path.join(options.src_root, "scripts", "lldb.swig")

Modified: lldb/trunk/scripts/swig_bot_lib/server.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/server.py?rev=254025&r1=254024&r2=254025&view=diff
==============================================================================
--- lldb/trunk/scripts/swig_bot_lib/server.py (original)
+++ lldb/trunk/scripts/swig_bot_lib/server.py Tue Nov 24 15:35:50 2015
@@ -14,9 +14,11 @@ import argparse
 import logging
 import os
 import select
+import shutil
 import socket
 import struct
 import sys
+import tempfile
 import traceback
 
 # LLDB modules
@@ -68,9 +70,19 @@ def accept_once(sock, options):
         logging.info("Received {} bytes of data from client"
                      .format(len(data)))
 
-        logging.info("Sending {} byte response".format(len(data)))
-        client.sendall(struct.pack("!I", len(data)))
-        client.sendall(data)
+        pack_location = None
+        try:
+            pack_location = local.unpack_archive("swig-bot", data)
+            logging.debug("Successfully unpacked archive...")
+
+            logging.info("Sending {} byte response".format(len(data)))
+            client.sendall(struct.pack("!I", len(data)))
+            client.sendall(data)
+        finally:
+            if pack_location is not None:
+                logging.debug("Removing temporary folder {}"
+                              .format(pack_location))
+                shutil.rmtree(pack_location)
 
 def accept_loop(sock, options):
     while True:




More information about the lldb-commits mailing list