diff options
Diffstat (limited to 'pym/gentoolkit/revdep_rebuild/stuff.py')
-rw-r--r-- | pym/gentoolkit/revdep_rebuild/stuff.py | 164 |
1 files changed, 86 insertions, 78 deletions
diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py index 432dc8f..eee90c8 100644 --- a/pym/gentoolkit/revdep_rebuild/stuff.py +++ b/pym/gentoolkit/revdep_rebuild/stuff.py @@ -11,95 +11,103 @@ from portage.output import green, red # util. functions def call_program(args): - ''' Calls program with specified parameters - and returns the stdout as a str object. + """Calls program with specified parameters + and returns the stdout as a str object. - @param, args: arument list to pass to subprocess - @return str - ''' - args = [arg if isinstance(arg, bytes) else arg.encode('utf-8') for arg in args] - subp = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdout, stderr = subp.communicate() - stdout = stdout.decode('utf-8') - return stdout + @param, args: arument list to pass to subprocess + @return str + """ + args = [arg if isinstance(arg, bytes) else arg.encode("utf-8") for arg in args] + subp = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = subp.communicate() + stdout = stdout.decode("utf-8") + return stdout def scan(params, files, max_args, logger): - ''' Calls scanelf with given params and files to scan. - @param params is list of parameters that should - be passed into scanelf app. - @param files list of files to scan. - @param max_args number of files to process at once - - When files count is greater CMD_MAX_ARGS, it'll be divided - into several parts - - @return scanelf output (joined if was called several times) - ''' - logger.debug("\tscan(), scanelf params = %s, # files: %d" % (params, len(files))) - # change it to a sorted list for group processing - _files = sorted(files) - out = [] - for i in range(0, len(_files), max_args): - output = call_program( - ['scanelf'] + params + _files[i:i+max_args]).strip().split('\n') - output = [x for x in output if x != ''] - if output: - out.extend(output) - logger.debug("\tscan(), final output length: %d" % len(out)) - return out + """Calls scanelf with given params and files to scan. + @param params is list of parameters that should + be passed into scanelf app. + @param files list of files to scan. + @param max_args number of files to process at once + + When files count is greater CMD_MAX_ARGS, it'll be divided + into several parts + + @return scanelf output (joined if was called several times) + """ + logger.debug("\tscan(), scanelf params = %s, # files: %d" % (params, len(files))) + # change it to a sorted list for group processing + _files = sorted(files) + out = [] + for i in range(0, len(_files), max_args): + output = ( + call_program(["scanelf"] + params + _files[i : i + max_args]) + .strip() + .split("\n") + ) + output = [x for x in output if x != ""] + if output: + out.extend(output) + logger.debug("\tscan(), final output length: %d" % len(out)) + return out def get_masking_status(ebuild): - """returns the masking status of an ebuild + """returns the masking status of an ebuild - @param ebuild: str - @return list - """ - try: - status = portage.getmaskingstatus(ebuild) - except KeyError: - status = ['unavailable'] - return status + @param ebuild: str + @return list + """ + try: + status = portage.getmaskingstatus(ebuild) + except KeyError: + status = ["unavailable"] + return status def _match_str_in_list(lst, stri): - """ - @param lst: list - @param stri: string - @return boolean or list menber that matches stri.endswith(member) - """ - for item in lst: - if stri.endswith(item): - return item - return False + """ + @param lst: list + @param stri: string + @return boolean or list menber that matches stri.endswith(member) + """ + for item in lst: + if stri.endswith(item): + return item + return False def filter_masked(assigned, logger): - '''Filter out masked pkgs/ebuilds''' - - def is_masked(ebuild): - if get_masking_status(ebuild): - logger.warning(' !!! ' + red('All ebuilds that could satisfy: ') + - green(ebuild) + red(' have been masked')) - return True - return False - - has_masked = False - tmp = [] - for ebuild in assigned: - if not is_masked(ebuild): - tmp.append(ebuild) - else: - has_masked = True - if has_masked: - logger.info('\t' + red('* ') + - 'Unmask all ebuild(s) listed above and call revdep-rebuild ' - 'again or manually emerge given packages.') - return tmp - - - - -if __name__ == '__main__': - print("There is nothing to run here.") + """Filter out masked pkgs/ebuilds""" + + def is_masked(ebuild): + if get_masking_status(ebuild): + logger.warning( + " !!! " + + red("All ebuilds that could satisfy: ") + + green(ebuild) + + red(" have been masked") + ) + return True + return False + + has_masked = False + tmp = [] + for ebuild in assigned: + if not is_masked(ebuild): + tmp.append(ebuild) + else: + has_masked = True + if has_masked: + logger.info( + "\t" + + red("* ") + + "Unmask all ebuild(s) listed above and call revdep-rebuild " + "again or manually emerge given packages." + ) + return tmp + + +if __name__ == "__main__": + print("There is nothing to run here.") |