def test_find_with_recursion(self): assert PathHelper.find_first_file(os.path.curdir, "*.spec", 0) is None assert PathHelper.find_first_file(os.path.curdir, "*.spec", 1) is None assert PathHelper.find_first_file(os.path.curdir, "*.spec", 2) is None assert PathHelper.find_first_file(os.path.curdir, "*.spec", 3) is None assert PathHelper.find_first_file( os.path.curdir, "*.spec", 4) == os.path.abspath(self.files[-1])
def _do_build_srpm(cls, spec, workdir, results_dir): """ Build SRPM using rpmbuild. :param spec: abs path to SPEC file inside the rpmbuild/SPECS in workdir. :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :return: If build process ends successfully returns abs path to built SRPM, otherwise 'None'. """ logger.info("Building SRPM") spec_loc, spec_name = os.path.split(spec) output = os.path.join(results_dir, "build.log") cmd = ['rpmbuild', '-bs', spec_name] ret = ProcessHelper.run_subprocess_cwd_env(cmd, cwd=spec_loc, env={'HOME': workdir}, output=output) if ret != 0: return None else: return PathHelper.find_first_file(workdir, '*.src.rpm')
def _get_spec_file(self): """ Function gets the spec file from the execution_dir directory """ self.spec_file_path = PathHelper.find_first_file(self.execution_dir, '*.spec', 0) if not self.spec_file_path: raise RebaseHelperError("Could not find any SPEC file in the current directory '%s'", self.execution_dir)
def _do_build_srpm(cls, spec, workdir, results_dir): """ Build SRPM using rpmbuild. :param spec: abs path to SPEC file inside the rpmbuild/SPECS in workdir. :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :return: If build process ends successfully returns abs path to built SRPM, otherwise 'None'. """ logger.info("Building SRPM") spec_loc, spec_name = os.path.split(spec) output = os.path.join(results_dir, "build.log") cmd = ['rpmbuild', '-bs', spec_name] ret = ProcessHelper.run_subprocess_cwd_env(cmd, cwd=spec_loc, env={'HOME': workdir}, output=output) if ret != 0: return None else: return PathHelper.find_first_file(workdir, '*.src.rpm')
def _get_spec_file(self): """Function gets the spec file from the execution_dir directory""" self.spec_file_path = PathHelper.find_first_file( self.execution_dir, '*.spec', 0) if not self.spec_file_path: raise RebaseHelperError( "Could not find any SPEC file in the current directory '%s'", self.execution_dir)
def _build_srpm(cls, spec, workdir, results_dir, srpm_results_dir, srpm_builder_options): """ Build SRPM using mock. :param spec: abs path to SPEC file inside the rpmbuild/SPECS in workdir. :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :param srpm_results_dir: path to directory where SRPM will be placed. :param srpm_builder_options: list of additional options for mock build tool(eg. '-r fedora-XX-x86_64'). :return: abs path to built SRPM. """ logger.info("Building SRPM") spec_loc = os.path.dirname(spec) output = os.path.join(results_dir, "build.log") path_to_sources = os.path.join(workdir, 'SOURCES') cmd = ['mock', '--old-chroot', '--buildsrpm'] if srpm_builder_options is not None: cmd.extend(srpm_builder_options) cmd.extend(['--spec', spec]) cmd.extend(['--sources', path_to_sources]) cmd.extend(['--resultdir', results_dir]) ret = ProcessHelper.run_subprocess_cwd_env(cmd, cwd=spec_loc, env={'HOME': workdir}, output_file=output) build_log_path = os.path.join(srpm_results_dir, 'build.log') mock_log_path = os.path.join(srpm_results_dir, 'mock_output.log') root_log_path = os.path.join(srpm_results_dir, 'root.log') if ret == 0: return PathHelper.find_first_file(workdir, '*.src.rpm') if ret == 1: if not os.path.exists(build_log_path) and os.path.exists( mock_log_path): logfile = mock_log_path else: logfile = build_log_path else: logfile = root_log_path cls.logs = [ l for l in PathHelper.find_all_files(srpm_results_dir, '*.log') ] raise SourcePackageBuildError("Building SRPM failed!", logfile=logfile)
def _build_srpm(cls, spec, sources, results_dir, root=None, arch=None): """Build SRPM using mock.""" logger.info("Building SRPM") output = os.path.join(results_dir, "mock_output.log") cmd = [cls.CMD, '--buildsrpm', '--spec', spec, '--sources', sources, '--resultdir', results_dir] if root is not None: cmd.extend(['--root', root]) if arch is not None: cmd.extend(['--arch', arch]) ret = ProcessHelper.run_subprocess(cmd, output=output) if ret != 0: return None else: return PathHelper.find_first_file(results_dir, '*.src.rpm')
def build(cls, spec, sources, patches, results_dir, root=None, arch=None, **kwargs): """ Builds the SRPM and RPM using mock :param spec: absolute path to a SPEC file :param sources: list with absolute paths to SOURCES :param patches: list with absolute paths to PATCHES :param results_dir: absolute path to directory where results will be stored :param root: mock root used for building :param arch: architecture to build the RPM for :return: dict with: 'srpm' -> absolute path to SRPM 'rpm' -> list with absolute paths to RPMs 'logs' -> list with absolute paths to logs """ # build SRPM srpm, cls.logs = cls._build_srpm(spec, sources, patches, results_dir) # build RPMs rpm_results_dir = os.path.join(results_dir, "RPM") with MockTemporaryEnvironment(sources, patches, spec, rpm_results_dir) as tmp_env: env = tmp_env.env() tmp_results_dir = env.get(MockTemporaryEnvironment.TEMPDIR_RESULTS) rpms = cls._build_rpm(srpm, tmp_results_dir) # remove SRPM - side product of building RPM tmp_srpm = PathHelper.find_first_file(tmp_results_dir, "*.src.rpm") if tmp_srpm is not None: os.unlink(tmp_srpm) if rpms is None: # We need to be inform what directory to analyze and what spec file failed cls.logs.extend([l for l in PathHelper.find_all_files(rpm_results_dir, '*.log')]) raise BinaryPackageBuildError("Building RPMs failed!", rpm_results_dir, spec) else: logger.info("Building RPMs finished successfully") rpms = [os.path.join(rpm_results_dir, os.path.basename(f)) for f in rpms] logger.debug("Successfully built RPMs: '%s'", str(rpms)) # gather logs cls.logs.extend([l for l in PathHelper.find_all_files(rpm_results_dir, '*.log')]) logger.debug("logs: '%s'", str(cls.logs)) return {'srpm': srpm, 'rpm': rpms, 'logs': cls.logs}
def build(cls, spec, results_dir, srpm, **kwargs): """ Builds the RPMs using mock :param spec: SpecFile object :param results_dir: absolute path to directory where results will be stored :param srpm: absolute path to SRPM :param root: mock root used for building :param arch: architecture to build the RPM for :return: dict with: 'rpm' -> list with absolute paths to RPMs 'logs' -> list with absolute paths to logs """ rpm_results_dir = os.path.join(results_dir, "RPM") sources = spec.get_sources() patches = [p.get_path() for p in spec.get_patches()] with MockTemporaryEnvironment(sources, patches, spec.get_path(), rpm_results_dir) as tmp_env: env = tmp_env.env() tmp_results_dir = env.get(MockTemporaryEnvironment.TEMPDIR_RESULTS) rpms = cls._build_rpm( srpm, tmp_results_dir, rpm_results_dir, builder_options=cls.get_builder_options(**kwargs)) # remove SRPM - side product of building RPM tmp_srpm = PathHelper.find_first_file(tmp_results_dir, "*.src.rpm") if tmp_srpm is not None: os.unlink(tmp_srpm) logger.info("Building RPMs finished successfully") rpms = [ os.path.join(rpm_results_dir, os.path.basename(f)) for f in rpms ] logger.debug("Successfully built RPMs: '%s'", str(rpms)) # gather logs cls.logs.extend( [l for l in PathHelper.find_all_files(rpm_results_dir, '*.log')]) logger.debug("logs: '%s'", str(cls.logs)) return dict(rpm=rpms, logs=cls.logs)
def _build_srpm(cls, spec, workdir, results_dir, srpm_results_dir, srpm_builder_options): """ Build SRPM using rpmbuild. :param spec: abs path to SPEC file inside the rpmbuild/SPECS in workdir. :param workdir: abs path to working directory with rpmbuild directory structure, which will be used as HOME dir. :param results_dir: abs path to dir where the log should be placed. :param srpm_results_dir: path to directory where SRPM will be placed. :param srpm_builder_options: list of additional options to rpmbuild. :return: abs path to built SRPM. """ logger.info("Building SRPM") spec_loc, spec_name = os.path.split(spec) output = os.path.join(results_dir, "build.log") cmd = ['rpmbuild', '-bs', spec_name] if srpm_builder_options is not None: cmd.extend(srpm_builder_options) ret = ProcessHelper.run_subprocess_cwd_env(cmd, cwd=spec_loc, env={'HOME': workdir}, output_file=output) build_log_path = os.path.join(srpm_results_dir, 'build.log') if ret == 0: return PathHelper.find_first_file(workdir, '*.src.rpm') # An error occurred, raise an exception logfile = build_log_path cls.logs = [ l for l in PathHelper.find_all_files(srpm_results_dir, '*.log') ] raise SourcePackageBuildError("Building SRPM failed!", logfile=logfile)
def test_find_file(self): assert PathHelper.find_first_file( "dir1", "file") == os.path.abspath(self.files[9]) assert PathHelper.find_first_file( os.path.curdir, "file") == os.path.abspath(self.files[0]) assert PathHelper.find_first_file("dir1/baz", "file") is None
def test_find_file(self): assert PathHelper.find_first_file("dir1", "file") == os.path.abspath(self.files[9]) assert PathHelper.find_first_file(os.path.curdir, "file") == os.path.abspath(self.files[0]) assert PathHelper.find_first_file("dir1/baz", "file") is None
def build(cls, spec, sources, patches, results_dir, root=None, arch=None, **kwargs): """ Builds the SRPM and RPM using mock :param spec: absolute path to a SPEC file :param sources: list with absolute paths to SOURCES :param patches: list with absolute paths to PATCHES :param results_dir: absolute path to directory where results will be stored :param root: mock root used for building :param arch: architecture to build the RPM for :return: dict with: 'srpm' -> absolute path to SRPM 'rpm' -> list with absolute paths to RPMs 'logs' -> list with absolute paths to logs """ # build SRPM srpm, cls.logs = cls._build_srpm(spec, sources, patches, results_dir) # build RPMs rpm_results_dir = os.path.join(results_dir, "RPM") with MockTemporaryEnvironment(sources, patches, spec, rpm_results_dir) as tmp_env: env = tmp_env.env() tmp_results_dir = env.get(MockTemporaryEnvironment.TEMPDIR_RESULTS) rpms = cls._build_rpm( srpm, tmp_results_dir, builder_options=cls.get_builder_options(**kwargs)) # remove SRPM - side product of building RPM tmp_srpm = PathHelper.find_first_file(tmp_results_dir, "*.src.rpm") if tmp_srpm is not None: os.unlink(tmp_srpm) if rpms is None: # We need to be inform what directory to analyze and what spec file failed cls.logs.extend([ l for l in PathHelper.find_all_files(rpm_results_dir, '*.log') ]) raise BinaryPackageBuildError("Building RPMs failed!", rpm_results_dir, spec) else: logger.info("Building RPMs finished successfully") rpms = [ os.path.join(rpm_results_dir, os.path.basename(f)) for f in rpms ] logger.debug("Successfully built RPMs: '%s'", str(rpms)) # gather logs cls.logs.extend( [l for l in PathHelper.find_all_files(rpm_results_dir, '*.log')]) logger.debug("logs: '%s'", str(cls.logs)) return {'srpm': srpm, 'rpm': rpms, 'logs': cls.logs}
def test_find_pythoon(self): assert PathHelper.find_first_file("dir1", "pythooon") == os.path.abspath(self.files[4]) assert PathHelper.find_first_file(os.path.curdir, "py*n") == os.path.abspath(self.files[4]) assert PathHelper.find_first_file("dir1/bar", "pythooon") is None
def test_find_ffile(self): assert PathHelper.find_first_file("dir1", "*le") == os.path.abspath(self.files[9]) assert PathHelper.find_first_file("dir1", "ff*") == os.path.abspath(self.files[8]) assert PathHelper.find_first_file("dir1/foo", "ff*") is None
def test_find_without_recursion(self): assert PathHelper.find_first_file( os.path.curdir, "*.spec") == os.path.abspath(self.files[-1])
def test_find_with_recursion(self): assert PathHelper.find_first_file(os.path.curdir, "*.spec", 0) is None assert PathHelper.find_first_file(os.path.curdir, "*.spec", 1) is None assert PathHelper.find_first_file(os.path.curdir, "*.spec", 2) is None assert PathHelper.find_first_file(os.path.curdir, "*.spec", 3) is None assert PathHelper.find_first_file(os.path.curdir, "*.spec", 4) == os.path.abspath(self.files[-1])
def test_find_pythoon(self): assert PathHelper.find_first_file( "dir1", "pythooon") == os.path.abspath(self.files[4]) assert PathHelper.find_first_file( os.path.curdir, "py*n") == os.path.abspath(self.files[4]) assert PathHelper.find_first_file("dir1/bar", "pythooon") is None
def test_find_ffile(self): assert PathHelper.find_first_file( "dir1", "*le") == os.path.abspath(self.files[9]) assert PathHelper.find_first_file( "dir1", "ff*") == os.path.abspath(self.files[8]) assert PathHelper.find_first_file("dir1/foo", "ff*") is None
def test_find_without_recursion(self): assert PathHelper.find_first_file(os.path.curdir, "*.spec") == os.path.abspath(self.files[-1])