3 # ===- pipeline_helper.py - Remote Index pipeline Helper *- python -------*--===#
5 # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
6 # See https://llvm.org/LICENSE.txt for license information.
7 # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
9 # ===------------------------------------------------------------------------===#
14 from socket
import socket
20 def kill_process_after_delay(server_process
):
22 if server_process
.poll() is None:
27 parser
= argparse
.ArgumentParser()
28 parser
.add_argument("--input-file-name", required
=True)
29 parser
.add_argument("--project-root", required
=True)
30 parser
.add_argument("--index-file", required
=True)
31 parser
.add_argument("--server-arg", action
="append", default
=[])
33 "--server-log", nargs
="?", type=argparse
.FileType("wb"), default
=os
.devnull
36 args
= parser
.parse_args()
38 # Grab an available port.
40 s
.bind(("localhost", 0))
41 server_address
= "localhost:" + str(s
.getsockname()[1])
43 print("Initializing clangd-index-server...", file=sys
.stderr
)
44 index_server_process
= subprocess
.Popen(
46 "clangd-index-server",
47 "--server-address=" + server_address
,
52 stderr
=subprocess
.PIPE
,
55 # This will kill index_server_process if it hangs without printing init
57 shutdown_thread
= threading
.Thread(
58 target
=kill_process_after_delay
, args
=(index_server_process
,)
60 shutdown_thread
.daemon
= True
61 shutdown_thread
.start()
63 # Wait for the server to warm-up.
64 found_init_message
= False
65 while index_server_process
.poll() is None:
66 line
= index_server_process
.stderr
.readline()
67 args
.server_log
.write(line
)
68 args
.server_log
.flush()
69 if b
"Server listening" in line
:
70 print("Server initialization complete.", file=sys
.stderr
)
71 found_init_message
= True
74 if not found_init_message
:
75 print("Server initialization failed. Shutting down.", file=sys
.stderr
)
78 print("Running clangd-index-server-monitor...", file=sys
.stderr
)
79 index_server_monitor_process
= subprocess
.Popen(
81 "clangd-index-server-monitor",
84 stderr
=subprocess
.PIPE
,
87 index_server_monitor_process
.wait()
89 in_file
= open(args
.input_file_name
)
91 print("Staring clangd...", file=sys
.stderr
)
92 clangd_process
= subprocess
.Popen(
95 "--remote-index-address=" + server_address
,
96 "--project-root=" + args
.project_root
,
102 clangd_process
.wait()
104 "Clangd executed successfully, shutting down child processes.", file=sys
.stderr
106 index_server_process
.kill()
107 for line
in index_server_process
.stderr
:
108 args
.server_log
.write(line
)
109 args
.server_log
.flush()
111 for line
in index_server_monitor_process
.stderr
:
112 args
.server_log
.write(line
)
113 args
.server_log
.flush()
116 if __name__
== "__main__":