mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	Split _abi_compliance_command into smaller functions
This makes the code easier to read and pacifies pylint.
This commit is contained in:
		
							parent
							
								
									3e2da4acf2
								
							
						
					
					
						commit
						ada828f36a
					
				@ -233,73 +233,84 @@ class AbiChecker(object):
 | 
			
		||||
                if not problems.getchildren():
 | 
			
		||||
                    report.remove(problems)
 | 
			
		||||
 | 
			
		||||
    def _abi_compliance_command(self, mbed_module, output_path):
 | 
			
		||||
        """Build the command to run to analyze the library mbed_module.
 | 
			
		||||
        The report will be placed in output_path."""
 | 
			
		||||
        abi_compliance_command = [
 | 
			
		||||
            "abi-compliance-checker",
 | 
			
		||||
            "-l", mbed_module,
 | 
			
		||||
            "-old", self.old_version.abi_dumps[mbed_module],
 | 
			
		||||
            "-new", self.new_version.abi_dumps[mbed_module],
 | 
			
		||||
            "-strict",
 | 
			
		||||
            "-report-path", output_path,
 | 
			
		||||
        ]
 | 
			
		||||
        if self.skip_file:
 | 
			
		||||
            abi_compliance_command += ["-skip-symbols", self.skip_file,
 | 
			
		||||
                                       "-skip-types", self.skip_file]
 | 
			
		||||
        if self.brief:
 | 
			
		||||
            abi_compliance_command += ["-report-format", "xml",
 | 
			
		||||
                                       "-stdout"]
 | 
			
		||||
        return abi_compliance_command
 | 
			
		||||
 | 
			
		||||
    def _is_library_compatible(self, mbed_module, compatibility_report):
 | 
			
		||||
        """Test if the library mbed_module has remained compatible.
 | 
			
		||||
        Append a message regarding compatibility to compatibility_report."""
 | 
			
		||||
        output_path = os.path.join(
 | 
			
		||||
            self.report_dir, "{}-{}-{}.html".format(
 | 
			
		||||
                mbed_module, self.old_version.revision,
 | 
			
		||||
                self.new_version.revision
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        try:
 | 
			
		||||
            subprocess.check_output(
 | 
			
		||||
                self._abi_compliance_command(mbed_module, output_path),
 | 
			
		||||
                stderr=subprocess.STDOUT
 | 
			
		||||
            )
 | 
			
		||||
        except subprocess.CalledProcessError as err:
 | 
			
		||||
            if err.returncode != 1:
 | 
			
		||||
                raise err
 | 
			
		||||
            if self.brief:
 | 
			
		||||
                self.log.info(
 | 
			
		||||
                    "Compatibility issues found for {}".format(mbed_module)
 | 
			
		||||
                )
 | 
			
		||||
                report_root = ET.fromstring(err.output.decode("utf-8"))
 | 
			
		||||
                self._remove_extra_detail_from_report(report_root)
 | 
			
		||||
                self.log.info(ET.tostring(report_root).decode("utf-8"))
 | 
			
		||||
            else:
 | 
			
		||||
                self.can_remove_report_dir = False
 | 
			
		||||
                compatibility_report.append(
 | 
			
		||||
                    "Compatibility issues found for {}, "
 | 
			
		||||
                    "for details see {}".format(mbed_module, output_path)
 | 
			
		||||
                )
 | 
			
		||||
            return False
 | 
			
		||||
        compatibility_report.append(
 | 
			
		||||
            "No compatibility issues for {}".format(mbed_module)
 | 
			
		||||
        )
 | 
			
		||||
        if not (self.keep_all_reports or self.brief):
 | 
			
		||||
            os.remove(output_path)
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
    def get_abi_compatibility_report(self):
 | 
			
		||||
        """Generate a report of the differences between the reference ABI
 | 
			
		||||
        and the new ABI. ABI dumps from self.old_version and self.new_version
 | 
			
		||||
        must be available."""
 | 
			
		||||
        compatibility_report = ("Checking evolution from {} to {}\n".format(
 | 
			
		||||
        compatibility_report = ["Checking evolution from {} to {}".format(
 | 
			
		||||
            self._pretty_revision(self.old_version),
 | 
			
		||||
            self._pretty_revision(self.new_version)
 | 
			
		||||
        ))
 | 
			
		||||
        )]
 | 
			
		||||
        compliance_return_code = 0
 | 
			
		||||
        shared_modules = list(set(self.old_version.modules.keys()) &
 | 
			
		||||
                              set(self.new_version.modules.keys()))
 | 
			
		||||
        for mbed_module in shared_modules:
 | 
			
		||||
            output_path = os.path.join(
 | 
			
		||||
                self.report_dir, "{}-{}-{}.html".format(
 | 
			
		||||
                    mbed_module, self.old_version.revision,
 | 
			
		||||
                    self.new_version.revision
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
            abi_compliance_command = [
 | 
			
		||||
                "abi-compliance-checker",
 | 
			
		||||
                "-l", mbed_module,
 | 
			
		||||
                "-old", self.old_version.abi_dumps[mbed_module],
 | 
			
		||||
                "-new", self.new_version.abi_dumps[mbed_module],
 | 
			
		||||
                "-strict",
 | 
			
		||||
                "-report-path", output_path,
 | 
			
		||||
            ]
 | 
			
		||||
            if self.skip_file:
 | 
			
		||||
                abi_compliance_command += ["-skip-symbols", self.skip_file,
 | 
			
		||||
                                           "-skip-types", self.skip_file]
 | 
			
		||||
            if self.brief:
 | 
			
		||||
                abi_compliance_command += ["-report-format", "xml",
 | 
			
		||||
                                           "-stdout"]
 | 
			
		||||
            try:
 | 
			
		||||
                subprocess.check_output(
 | 
			
		||||
                    abi_compliance_command,
 | 
			
		||||
                    stderr=subprocess.STDOUT
 | 
			
		||||
                )
 | 
			
		||||
            except subprocess.CalledProcessError as err:
 | 
			
		||||
                if err.returncode == 1:
 | 
			
		||||
                    compliance_return_code = 1
 | 
			
		||||
                    if self.brief:
 | 
			
		||||
                        self.log.info(
 | 
			
		||||
                            "Compatibility issues found for {}".format(mbed_module)
 | 
			
		||||
                        )
 | 
			
		||||
                        report_root = ET.fromstring(err.output.decode("utf-8"))
 | 
			
		||||
                        self._remove_extra_detail_from_report(report_root)
 | 
			
		||||
                        self.log.info(ET.tostring(report_root).decode("utf-8"))
 | 
			
		||||
                    else:
 | 
			
		||||
                        self.can_remove_report_dir = False
 | 
			
		||||
                        compatibility_report += (
 | 
			
		||||
                            "Compatibility issues found for {}, "
 | 
			
		||||
                            "for details see {}\n".format(mbed_module, output_path)
 | 
			
		||||
                        )
 | 
			
		||||
                else:
 | 
			
		||||
                    raise err
 | 
			
		||||
            else:
 | 
			
		||||
                compatibility_report += (
 | 
			
		||||
                    "No compatibility issues for {}\n".format(mbed_module)
 | 
			
		||||
                )
 | 
			
		||||
                if not (self.keep_all_reports or self.brief):
 | 
			
		||||
                    os.remove(output_path)
 | 
			
		||||
            if not self._is_library_compatible(mbed_module,
 | 
			
		||||
                                               compatibility_report):
 | 
			
		||||
                compliance_return_code = 1
 | 
			
		||||
        for version in [self.old_version, self.new_version]:
 | 
			
		||||
            for mbed_module, mbed_module_dump in version.abi_dumps.items():
 | 
			
		||||
                os.remove(mbed_module_dump)
 | 
			
		||||
        if self.can_remove_report_dir:
 | 
			
		||||
            os.rmdir(self.report_dir)
 | 
			
		||||
        self.log.info(compatibility_report)
 | 
			
		||||
        self.log.info("\n".join(compatibility_report))
 | 
			
		||||
        return compliance_return_code
 | 
			
		||||
 | 
			
		||||
    def check_for_abi_changes(self):
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user