def fill_dictionary(cls, result_dir, old_version=None, new_version=None): """ Parsed files.xml and symbols.xml and fill dictionary :param result_dir: where should be stored file for pkgdiff :param old_version: old version of package :param new_version: new version of package :return: """ XML_FILES = ['files.xml', 'symbols.xml'] if old_version is None: old_version = OutputLogger.get_old_build().get('version') if old_version is '': old_version = cls._get_rpm_info('version', OutputLogger.get_old_build()['rpm']) if new_version is None: new_version = OutputLogger.get_new_build().get('version') if new_version is '': new_version = cls._get_rpm_info('version', OutputLogger.get_new_build()['rpm']) for tag in settings.CHECKER_TAGS: cls.results_dict[tag] = [] for file_name in [os.path.join(result_dir, x) for x in XML_FILES]: logger.debug('Processing %s file.', file_name) try: with open(file_name, "r") as f: lines = ['<pkgdiff>'] lines.extend(f.readlines()) lines.append('</pkgdiff>') pkgdiff_tree = ElementTree.fromstringlist(lines) for tag in settings.CHECKER_TAGS: for pkgdiff in pkgdiff_tree.findall('.//' + tag): files = [x.strip() for x in pkgdiff.text.strip().split('\n')] files = [x.replace(old_version, '*') for x in files] files = [x.replace(new_version, '*') for x in files] cls.results_dict[tag].extend(files) except IOError: continue
def run_check(cls, results_dir): """Compares old and new RPMs using pkgdiff""" results_dict = {} for tag in settings.CHECKER_TAGS: results_dict[tag] = [] cls.results_dir = results_dir # Only S (size), M(mode) and 5 (checksum) are now important not_catched_flags = ['T', 'F', 'G', 'U', 'V', 'L', 'D', 'N'] old_pkgs = cls._get_rpms(OutputLogger.get_old_build().get('rpm', None)) new_pkgs = cls._get_rpms(OutputLogger.get_new_build().get('rpm', None)) for key, value in six.iteritems(old_pkgs): cmd = [cls.CMD] # TODO modify to online command for x in not_catched_flags: cmd.extend(['-i', x]) cmd.append(value) # We would like to build correct old package against correct new packages cmd.append(new_pkgs[key]) output = StringIO() try: ProcessHelper.run_subprocess(cmd, output=output) except OSError: raise CheckerNotFoundError("Checker '%s' was not found or installed." % cls.CMD) results_dict = cls._analyze_logs(output, results_dict) results_dict = cls.update_added_removed(results_dict) results_dict = dict((k, v) for k, v in six.iteritems(results_dict) if v) text = [] for key, val in six.iteritems(results_dict): text.append('Following files were %s:\n%s' % (key, '\n'.join(val))) pkgdiff_report = os.path.join(cls.results_dir, 'report-' + cls.CMD + '.log') try: with open(pkgdiff_report, "w") as f: f.writelines(text) except IOError: raise RebaseHelperError("Unable to write result from %s to '%s'" % (cls.CMD, pkgdiff_report)) return {pkgdiff_report: None}
def run_check(cls, results_dir): """Compares old and new RPMs using pkgdiff""" csmock_report = {} old_pkgs = OutputLogger.get_old_build().get('srpm', None) new_pkgs = OutputLogger.get_new_build().get('srpm', None) csmock_dir = os.path.join(results_dir, cls.CMD) os.makedirs(csmock_dir) arguments = ['--force', '-a', '-r', 'fedora-rawhide-x86_64', '--base-srpm'] if old_pkgs and new_pkgs: cmd = [cls.CMD] cmd.extend(arguments) cmd.append(old_pkgs) cmd.append(new_pkgs) cmd.extend(['-o', csmock_dir]) output = StringIO() try: ProcessHelper.run_subprocess(cmd, output=output) except OSError: raise CheckerNotFoundError("Checker '%s' was not found or installed." % cls.CMD) csmock_report['error'] = PathHelper.find_all_files_current_dir(csmock_dir, '*.err') csmock_report['txt'] = PathHelper.find_all_files_current_dir(csmock_dir, '*.txt') csmock_report['log'] = PathHelper.find_all_files_current_dir(csmock_dir, '*.log') return csmock_report