Exemple #1
0
    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,
    )
Exemple #3
0
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,
    )
Exemple #4
0
  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,
  )
Exemple #6
0
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,
    )
Exemple #7
0
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,
    )
Exemple #8
0
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))