Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/pybin/tools.py

    r143e6f3 r34e1494  
    2323
    2424# helper functions to run terminal commands
    25 def sh(*cmd, timeout = False, output = None, input = None, error = subprocess.STDOUT):
     25def sh(*cmd, timeout = False, output_file = None, input_file = None, input_text = None, error = subprocess.STDOUT, ignore_dry_run = False):
    2626        cmd = list(cmd)
    2727
     28        if input_file and input_text:
     29                return 401, "Cannot use both text and file inputs"
     30
    2831        # if this is a dry_run, only print the commands that would be ran
    29         if settings.dry_run :
     32        if settings.dry_run and not ignore_dry_run:
    3033                cmd = "{} cmd: {}".format(os.getcwd(), ' '.join(cmd))
    31                 if output and not isinstance(output, int):
     34                if output_file and not isinstance(output_file, int):
    3235                        cmd += " > "
    33                         cmd += output
     36                        cmd += output_file
    3437
    3538                if error and not isinstance(error, int):
     
    3740                        cmd += error
    3841
    39                 if input and not isinstance(input, int) and os.path.isfile(input):
     42                if input_file and not isinstance(input_file, int) and os.path.isfile(input_file):
    4043                        cmd += " < "
    41                         cmd += input
     44                        cmd += input_file
    4245
    4346                print(cmd)
     
    4649        with contextlib.ExitStack() as onexit:
    4750                # add input redirection if needed
    48                 input = openfd(input, 'r', onexit, True)
     51                input_file = openfd(input_file, 'r', onexit, True)
    4952
    5053                # add output redirection if needed
    51                 output = openfd(output, 'w', onexit, False)
     54                output_file = openfd(output_file, 'w', onexit, False)
    5255
    5356                # add error redirection if needed
     
    5861                        proc = subprocess.run(
    5962                                cmd,
    60                                 stdin =input,
    61                                 stdout=output,
    62                                 stderr=error,
    63                                 timeout=settings.timeout.single if timeout else None
     63                                **({'input' : bytes(input_text, encoding='utf-8')} if input_text else {'stdin' : input_file}),
     64                                stdout  = output_file,
     65                                stderr  = error,
     66                                timeout = settings.timeout.single if timeout else None
    6467                        )
     68
    6569                        return proc.returncode, proc.stdout.decode("utf-8") if proc.stdout else None
    6670                except subprocess.TimeoutExpired:
     
    7579                return False
    7680
    77         code, out = sh("file %s" % fname, output=subprocess.PIPE)
     81        code, out = sh("file %s" % fname, output_file=subprocess.PIPE)
    7882        if code != 0:
    7983                return False
     
    107111        if isinstance(files, str ): files = [ files ]
    108112        for file in files:
    109                 sh( 'rm', '-f', file, output=subprocess.DEVNULL, error=subprocess.DEVNULL )
     113                sh( 'rm', '-f', file, output_file=subprocess.DEVNULL, error=subprocess.DEVNULL )
    110114
    111115# Create 1 or more directory
     
    115119                p = os.path.normpath( file )
    116120                d = os.path.dirname ( p )
    117                 sh( 'mkdir', '-p', d, output=subprocess.DEVNULL, error=subprocess.DEVNULL )
     121                sh( 'mkdir', '-p', d, output_file=subprocess.DEVNULL, error=subprocess.DEVNULL )
    118122
    119123
     
    138142                lhs,
    139143                rhs,
    140                 output=subprocess.PIPE
     144                output_file=subprocess.PIPE
    141145        )
    142146
    143147# call make
    144 def make(target, *, flags = '', output = None, error = None, error_file = None, silent = False):
     148def make(target, *, flags = '', output_file = None, error = None, error_file = None, silent = False):
    145149        test_param = """test="%s" """ % (error_file) if error_file else None
    146150        cmd = [
     
    151155                settings.debug.flags,
    152156                settings.install.flags,
     157                settings.distcc if settings.distribute else None,
    153158                flags,
    154159                target
    155160        ]
    156161        cmd = [s for s in cmd if s]
    157         return sh(*cmd, output=output, error=error)
     162        return sh(*cmd, output_file=output_file, error=error)
    158163
    159164def which(program):
     
    201206# cat one file into the other
    202207def cat(source, dest):
    203         ret, _ = sh("cat", source, output=dest)
     208        ret, _ = sh("cat", source, output_file=dest)
    204209        return ret
    205210
     
    256261                        os.write(int(make_jobs_fds.group(3)), tokens)
    257262                else :
    258                         options.jobs = multiprocessing.cpu_count()
     263                        if settings.distribute:
     264                                ret, jstr = sh("distcc", "-j", output_file=subprocess.PIPE, ignore_dry_run=True)
     265                                if ret == 0:
     266                                        options.jobs = int(jstr.strip())
     267                                else :
     268                                        options.jobs = multiprocessing.cpu_count()
     269                        else:
     270                                options.jobs = multiprocessing.cpu_count()
    259271        else :
    260272                force = True
     
    274286################################################################################
    275287
     288# get hash for given configuration
     289def config_hash():
     290        path = os.path.normpath(os.path.join(
     291                settings.SRCDIR,
     292        ))
     293
     294        distcc_hash = os.path.join(settings.SRCDIR, '../tools/build/distcc_hash')
     295        config = "%s-%s" % (settings.arch.target, settings.debug.path)
     296        _, out = sh(distcc_hash, config, output_file=subprocess.PIPE, ignore_dry_run=True)
     297        return out.strip()
     298
     299# get pretty string for time of day
    276300def pretty_now():
    277301        ts = time.time()
     
    308332                return 1, "ERR No core dump"
    309333
    310         return sh('gdb', '-n', path, core, '-batch', '-x', cmd, output=subprocess.PIPE)
     334        return sh('gdb', '-n', path, core, '-batch', '-x', cmd, output_file=subprocess.PIPE)
    311335
    312336def core_archive(dst, name, exe):
Note: See TracChangeset for help on using the changeset viewer.