def _execute_hermetic_compile(self, cmd, ctx): # For now, executing a compile remotely only works for targets that # do not have any dependencies or inner classes input_snapshot = ctx.target.sources_snapshot( scheduler=self.context._scheduler) output_files = tuple( # Assume no extra .class files to grab. We'll fix up that case soon. # Drop the source_root from the file path. # Assumes `-d .` has been put in the command. os.path.relpath(f.path.replace('.java', '.class'), ctx.target.target_base) for f in input_snapshot.files if f.path.endswith('.java')) exec_process_request = ExecuteProcessRequest.create_from_snapshot( argv=tuple(cmd), snapshot=input_snapshot, output_files=output_files, description='Compiling {} with javac'.format( ctx.target.address.spec), ) exec_result = self.context.execute_process_synchronously( exec_process_request, 'javac', (WorkUnitLabel.TASK, WorkUnitLabel.JVM), ) # Dump the output to the .pants.d directory where it's expected by downstream tasks. classes_directory = ctx.classes_dir self.context._scheduler.materialize_directories( (DirectoryToMaterialize(text_type(classes_directory), exec_result.output_directory_digest), ))
def javac_compile_process_result(javac_compile_req): java_files = javac_compile_req.javac_sources.java_files for java_file in java_files: if not java_file.endswith(".java"): raise ValueError( "Can only compile .java files but got {}".format(java_file)) sources_snapshot = yield Get(Snapshot, PathGlobs, PathGlobs(java_files, ())) process_request = ExecuteProcessRequest.create_from_snapshot( argv=javac_compile_req.argv_from_source_snapshot(sources_snapshot), env=dict(), snapshot=sources_snapshot, output_files=tuple(java_file[:-5] + ".class" for java_file in java_files), ) javac_proc_result = yield Get(ExecuteProcessResult, ExecuteProcessRequest, process_request) exit_code = javac_proc_result.exit_code stdout = javac_proc_result.stdout stderr = javac_proc_result.stderr if exit_code != 0: raise ProcessExecutionFailure(exit_code, stdout, stderr, 'javac compilation') yield JavacCompileResult( stdout, stderr, javac_proc_result.output_directory_digest, )
def javac_compile_process_result(javac_compile_req): java_files = javac_compile_req.javac_sources.java_files for java_file in java_files: if not java_file.endswith(".java"): raise ValueError( "Can only compile .java files but got {}".format(java_file)) sources_snapshot = yield Get(Snapshot, PathGlobs, PathGlobs(java_files, ())) output_dirs = tuple( {os.path.dirname(java_file) for java_file in java_files}) process_request = ExecuteProcessRequest.create_from_snapshot( argv=javac_compile_req.argv_from_source_snapshot(sources_snapshot), snapshot=sources_snapshot, output_directories=output_dirs, description='javac compilation') javac_proc_result = yield Get(ExecuteProcessResult, ExecuteProcessRequest, process_request) stdout = javac_proc_result.stdout stderr = javac_proc_result.stderr yield JavacCompileResult( text_type(stdout), text_type(stderr), javac_proc_result.output_directory_digest, )
def _execute_hermetic_compile(self, cmd, ctx): # For now, executing a compile remotely only works for targets that # do not have any dependencies or inner classes input_snapshot = ctx.target.sources_snapshot(scheduler=self.context._scheduler) output_files = tuple( # Assume no extra .class files to grab. We'll fix up that case soon. # Drop the source_root from the file path. # Assumes `-d .` has been put in the command. os.path.relpath(f.path.replace('.java', '.class'), ctx.target.target_base) for f in input_snapshot.files if f.path.endswith('.java') ) exec_process_request = ExecuteProcessRequest.create_from_snapshot( argv=tuple(cmd), snapshot=input_snapshot, output_files=output_files, description='Compiling {} with javac'.format(ctx.target.address.spec), ) exec_result = self.context.execute_process_synchronously( exec_process_request, 'javac', (WorkUnitLabel.TASK, WorkUnitLabel.JVM), ) # Dump the output to the .pants.d directory where it's expected by downstream tasks. classes_directory = ctx.classes_dir self.context._scheduler.materialize_directories(( DirectoryToMaterialize(text_type(classes_directory), exec_result.output_directory_digest), ))
def javac_compile_process_result(javac_compile_req): java_files = javac_compile_req.javac_sources.java_files for java_file in java_files: if not java_file.endswith(".java"): raise ValueError("Can only compile .java files but got {}".format(java_file)) sources_snapshot = yield Get(Snapshot, PathGlobs, PathGlobs(java_files, ())) process_request = ExecuteProcessRequest.create_from_snapshot( argv=javac_compile_req.argv_from_source_snapshot(sources_snapshot), env=dict(), snapshot=sources_snapshot, output_files=tuple(java_file[:-5] + ".class" for java_file in java_files), ) javac_proc_result = yield Get(ExecuteProcessResult, ExecuteProcessRequest, process_request) exit_code = javac_proc_result.exit_code stdout = javac_proc_result.stdout stderr = javac_proc_result.stderr if exit_code != 0: raise ProcessExecutionFailure( exit_code, stdout, stderr, 'javac compilation') yield JavacCompileResult( stdout, stderr, javac_proc_result.output_directory_digest, )
def cat_files_process_request_input_snapshot(cat_exe_req): cat_bin = cat_exe_req.shell_cat cat_files_snapshot = yield Get(Snapshot, PathGlobs, cat_exe_req.path_globs) yield ExecuteProcessRequest.create_from_snapshot( argv=cat_bin.argv_from_snapshot(cat_files_snapshot), env=tuple(), snapshot=cat_files_snapshot, )
def javac_compile_sources_execute_process_request(javac_compile_req): sources_snapshot = yield Get(Snapshot, PathGlobs, javac_compile_req.javac_sources.path_globs) yield ExecuteProcessRequest.create_from_snapshot( argv=javac_compile_req.argv_from_source_snapshot(sources_snapshot), env=tuple(), snapshot=sources_snapshot, )
def cat_files_process_result_concatted(cat_exe_req): cat_bin = cat_exe_req.shell_cat cat_files_snapshot = yield Get(Snapshot, PathGlobs, cat_exe_req.path_globs) process_request = ExecuteProcessRequest.create_from_snapshot( argv=cat_bin.argv_from_snapshot(cat_files_snapshot), snapshot=cat_files_snapshot, description='cat some files', ) cat_process_result = yield Get(ExecuteProcessResult, ExecuteProcessRequest, process_request) yield Concatted(text_type(cat_process_result.stdout))
def cat_files_process_result_concatted(cat_exe_req): cat_bin = cat_exe_req.shell_cat cat_files_snapshot = yield Get(Snapshot, PathGlobs, cat_exe_req.path_globs) process_request = ExecuteProcessRequest.create_from_snapshot( argv=cat_bin.argv_from_snapshot(cat_files_snapshot), env=dict(), snapshot=cat_files_snapshot, output_files=(), ) cat_process_result = yield Get(ExecuteProcessResult, ExecuteProcessRequest, process_request) yield Concatted(str(cat_process_result.stdout))
def cat_files_process_result_concatted(cat_exe_req): cat_bin = cat_exe_req.shell_cat cat_files_snapshot = yield Get(Snapshot, PathGlobs, cat_exe_req.path_globs) process_request = ExecuteProcessRequest.create_from_snapshot( argv=cat_bin.argv_from_snapshot(cat_files_snapshot), env=dict(), snapshot=cat_files_snapshot, output_files=(), ) cat_process_result = yield Get(ExecuteProcessResult, ExecuteProcessRequest, process_request) yield Concatted(str(cat_process_result.stdout))