Beispiel #1
0
class ReviewHelper(object):
    def __init__(self):
        self.bug = None
        self.checks = None
        self.log = Settings.get_logger()
        self.verbose = False
        self.outfile = None
        self.prebuilt = False

    def __download_sources(self):
        sources = self.checks.spec.get_sources('Source')
        self.sources = Sources(self.checks.spec)
        self.sources.extract_all()
        return True

    def __do_report(self):
        ''' Create a review report'''
        self.log.info('Getting .spec and .srpm Urls from : ' +
                      self.bug.get_location())

        Settings.dump()
        if not self.bug.find_urls():
            self.log.error('Cannot find .spec or .srpm URL(s)')
            raise HandledError()

        if not ReviewDirs.is_inited:
            wd = self.bug.get_dirname()
            ReviewDirs.workdir_setup(wd)

        if not self.bug.download_files():
            self.log.error('Cannot download .spec and .srpm')
            raise HandledError()

        Settings.name = self.bug.get_name()
        self.__run_checks(self.bug.spec_file, self.bug.srpm_file)

    def __list_checks(self):
        """ List all the checks available.
        """
        ChecksLister().list()

    def __print_version(self):
        print('fedora-review version ' + __version__ + ' ' + build_full)

    def __run_checks(self, spec, srpm):
        self.checks = Checks(spec, srpm)
        if Settings.no_report:
            self.outfile = '/dev/null'
        else:
            self.outfile = ReviewDirs.report_path(self.checks.spec.name)
        with open(self.outfile, "w") as output:
            if Settings.nobuild:
                self.checks.srpm.is_build = True
            self.log.info('Running checks and generate report\n')
            self.checks.run_checks(output=output,
                                   writedown=not Settings.no_report)
            output.close()
        if not os.path.exists('BUILD'):
            os.symlink(Mock.get_builddir('BUILD'), 'BUILD')
        if not Settings.no_report:
            print "Review in: " + self.outfile

    def run(self):
        self.log.debug("Command  line: " + ' '.join(sys.argv))
        try:
            Settings.init()
            make_report = True
            if Settings.list_checks:
                self.__list_checks()
                make_report = False
            elif Settings.version:
                self.__print_version()
                make_report = False
            elif Settings.url:
                self.log.info("Processing bug on url: " + Settings.url)
                self.bug = UrlBug(Settings.url)
            elif Settings.bug:
                self.log.info("Processing bugzilla bug: " + Settings.bug)
                self.bug = BugzillaBug(Settings.bug, user=Settings.user)
            elif Settings.name:
                self.log.info("Processing local files: " + Settings.name)
                self.bug = NameBug(Settings.name)
            if make_report:
                self.__do_report()
            return 0
        except BugException as err:
            print str(err)
            return 2
        except HandledError as err:
            print str(err)
            return 2
        except SettingsError as err:
            self.log.error("Incompatible settings: " + str(err))
            return 2
        except ReviewDirExistsError as err:
            print("The directory %s is in the way, please remove." % err.value)
            return 4
        except CleanExitError as err:
            self.log.debug('Processing CleanExit')
            return 2
        except:
            self.log.debug("Exception down the road...", exc_info=True)
            self.log.error("Exception down the road...")
            return 1
        return 0
class ReviewHelper(object):

    def __init__(self):
        self.bug = None
        self.checks = None
        self.log = Settings.get_logger()
        self.verbose = False
        self.outfile = None
        self.prebuilt = False

    def __download_sources(self):
        sources = self.checks.spec.get_sources('Source')
        self.sources = Sources(self.checks.spec)
        self.sources.extract_all()
        return True

    def __do_report(self):
        ''' Create a review report'''
        self.log.info('Getting .spec and .srpm Urls from : '
                       + self.bug.get_location())

        Settings.dump()
        if not self.bug.find_urls():
            self.log.error( 'Cannot find .spec or .srpm URL(s)')
            raise HandledError()

        if not ReviewDirs.is_inited:
            wd = self.bug.get_dirname()
            ReviewDirs.workdir_setup(wd)

        if not self.bug.download_files():
            self.log.error('Cannot download .spec and .srpm')
            raise HandledError()

        Settings.name = self.bug.get_name()
        self.__run_checks(self.bug.spec_file, self.bug.srpm_file)

    def __list_checks(self):
        """ List all the checks available.
        """
        ChecksLister().list()

    def __print_version(self):
        print('fedora-review version ' + __version__ + ' ' + build_full)

    def __run_checks(self, spec, srpm):
        self.checks = Checks(spec, srpm )
        if Settings.no_report:
            self.outfile = '/dev/null'
        else:
            self.outfile = ReviewDirs.report_path(self.checks.spec.name)
        with open(self.outfile,"w") as output:
            if Settings.nobuild:
                self.checks.srpm.is_build = True
            self.log.info('Running checks and generate report\n')
            self.checks.run_checks(output=output,
                                   writedown=not Settings.no_report)
            output.close()
        if not os.path.exists('BUILD'):
            os.symlink(Mock.get_builddir('BUILD'), 'BUILD')
        if not Settings.no_report:
            print "Review in: " + self.outfile

    def run(self):
        self.log.debug( "Command  line: " + ' '.join(sys.argv))
        try:
            Settings.init()
            make_report = True
            if Settings.list_checks:
                self.__list_checks()
                make_report = False
            elif Settings.version:
                self.__print_version()
                make_report = False
            elif Settings.url:
                self.log.info("Processing bug on url: " + Settings.url )
                self.bug = UrlBug(Settings.url)
            elif Settings.bug:
                self.log.info("Processing bugzilla bug: " + Settings.bug )
                self.bug = BugzillaBug(Settings.bug, user=Settings.user)
            elif Settings.name:
                self.log.info("Processing local files: " + Settings.name )
                self.bug = NameBug(Settings.name)
            if make_report:
                self.__do_report()
            return 0
        except BugException as err:
            print str(err)
            return 2
        except HandledError as err:
            print str(err)
            return 2
        except SettingsError as err:
            self.log.error("Incompatible settings: " + str(err))
            return 2
        except ReviewDirExistsError as err:
            print("The directory %s is in the way, please remove." %
                  err.value)
            return 4
        except CleanExitError as err:
            self.log.debug('Processing CleanExit')
            return 2
        except:
            self.log.debug("Exception down the road...", exc_info=True)
            self.log.error("Exception down the road...")
            return 1
        return 0