Esempio n. 1
0
    def prepare(self):
        """prepare task. Prebuild the package and run rpmbuild -bp on it."""
        srpm = self.prebuild()
        utils.safe_makedirs(self.results_dir)
        shutil.copy(srpm, self.results_dir)
        for dname in ['BUILD', 'tmp']:
            utils.safe_makedirs(os.path.join(self.results_dir, dname))
        rpm_cmd = (["rpm"] +
                   self.get_rpmbuild_defines(prebuild=False) +
                   ["-i", srpm])
        ret = utils.unchecked_call(rpm_cmd)
        if ret != 0:
            raise Error("Unable to unpack SRPM: rpm -i returned %d" % ret)

        rpmbuild_cmd = (["rpmbuild", "-bp", "--nodeps"] +
                        self.get_rpmbuild_defines(prebuild=False) +
                        glob.glob(os.path.join(self.results_dir, "*.spec")))
        if self.buildopts['target_arch'] is not None:
            rpmbuild_cmd += ["--target", self.buildopts['target_arch']]
        ret = utils.unchecked_call(rpmbuild_cmd)
        if ret != 0:
            raise Error(
                "Unable to prepare the package: rpmbuild -bp returned %d" % ret)
        log.info("Files prepared in: " +
                     os.path.join(self.results_dir, "BUILD"))
Esempio n. 2
0
    def rpmbuild(self):
        """rpmbuild task.
        Build the package using rpmbuild on the local machine.

        """
        srpm = self.prebuild()
        utils.safe_makedirs(self.results_dir)
        shutil.copy(srpm, self.results_dir)
        for d in ['BUILD', 'tmp']:
            utils.safe_makedirs(os.path.join(self.results_dir, d))
        cmd = (["rpmbuild"] +
               self.get_rpmbuild_defines(prebuild=False) +
               ["--rebuild", srpm])
        if self.buildopts['target_arch'] is not None:
            cmd += ["--target", self.buildopts['target_arch']]
        err = utils.unchecked_call(cmd)

        # TODO Parse rpmbuild output instead of using glob
        if err:
            raise OSGBuildError('Making RPM failed (command was: ' +
                                " ".join(cmd) +')')
        else:
            rpms = [x for x in glob.glob(os.path.join(self.results_dir, "*.rpm"))
                    if not fnmatch.fnmatch(x, '*.src.rpm')]
            if not rpms:
                raise OSGBuildError("No RPMs found. Making RPMs failed?")
            log.info("The following RPM(s) have been created:\n" +
                         "\n".join(rpms))
Esempio n. 3
0
    def rpmbuild(self):
        """rpmbuild task.
        Build the package using rpmbuild on the local machine.

        """
        srpm = self.prebuild()
        utils.safe_makedirs(self.results_dir)
        shutil.copy(srpm, self.results_dir)
        for d in ['BUILD', 'tmp']:
            utils.safe_makedirs(os.path.join(self.results_dir, d))
        cmd = (["rpmbuild"] +
               self.get_rpmbuild_defines(prebuild=False) +
               ["--rebuild", srpm])
        if self.buildopts['target_arch'] is not None:
            cmd += ["--target", self.buildopts['target_arch']]
        err = utils.unchecked_call(cmd)

        # TODO Parse rpmbuild output instead of using glob
        if err:
            raise OSGBuildError('Making RPM failed (command was: ' +
                                " ".join(cmd) +')')
        else:
            rpms = [x for x in glob.glob(os.path.join(self.results_dir, "*.rpm"))
                    if not fnmatch.fnmatch(x, '*.src.rpm')]
            if not rpms:
                raise OSGBuildError("No RPMs found. Making RPMs failed?")
            log.info("The following RPM(s) have been created:\n" +
                         "\n".join(rpms))
Esempio n. 4
0
    def prepare(self):
        """prepare task. Prebuild the package and run rpmbuild -bp on it."""
        srpm = self.prebuild()
        utils.safe_makedirs(self.results_dir)
        shutil.copy(srpm, self.results_dir)
        for dname in ['BUILD', 'tmp']:
            utils.safe_makedirs(os.path.join(self.results_dir, dname))
        rpm_cmd = (["rpm"] +
                   self.get_rpmbuild_defines(prebuild=False) +
                   ["-i", srpm])
        ret = utils.unchecked_call(rpm_cmd)
        if ret != 0:
            raise Error("Unable to unpack SRPM: rpm -i returned %d" % ret)

        rpmbuild_cmd = (["rpmbuild", "-bp", "--nodeps"] +
                        self.get_rpmbuild_defines(prebuild=False) +
                        glob.glob(os.path.join(self.results_dir, "*.spec")))
        if self.buildopts['target_arch'] is not None:
            rpmbuild_cmd += ["--target", self.buildopts['target_arch']]
        ret = utils.unchecked_call(rpmbuild_cmd)
        if ret != 0:
            raise Error(
                "Unable to prepare the package: rpmbuild -bp returned %d" % ret)
        log.info("Files prepared in: " +
                     os.path.join(self.results_dir, "BUILD"))
Esempio n. 5
0
    def mock(self):
        """mock task. Build the package using mock on the local machine."""
        srpm = self.prebuild()
        utils.safe_makedirs(self.results_dir)

        rpms = self.mock_obj.rebuild(self.results_dir, srpm)
        if self.buildopts['mock_clean']:
            self.mock_obj.clean()
        log.info("The following RPM(s) have been created:\n" +
                     "\n".join(rpms))
Esempio n. 6
0
def extract_srpms(srpms_downloaded, destdir):
    """Extract SRPMs to destdir"""
    abs_srpms_downloaded = [os.path.abspath(x) for x in srpms_downloaded]
    utils.safe_makedirs(destdir)
    old_dir = os.getcwd()
    os.chdir(destdir)
    for srpm in abs_srpms_downloaded:
        log.info("Unpacking SRPM " + srpm)
        utils.super_unpack(srpm)
    os.chdir(old_dir)
Esempio n. 7
0
def extract_srpms(srpms_downloaded, destdir):
    """Extract SRPMs to destdir"""
    abs_srpms_downloaded = [os.path.abspath(x) for x in srpms_downloaded]
    utils.safe_makedirs(destdir)
    old_dir = os.getcwd()
    os.chdir(destdir)
    for srpm in abs_srpms_downloaded:
        log.info("Unpacking SRPM " + srpm)
        utils.super_unpack(srpm)
    os.chdir(old_dir)
Esempio n. 8
0
    def mock(self):
        """mock task. Build the package using mock on the local machine."""
        srpm = self.prebuild()
        utils.safe_makedirs(self.results_dir)

        rpms = self.mock_obj.rebuild(self.results_dir, srpm)
        if self.buildopts['mock_clean']:
            self.mock_obj.clean()
        log.info("The following RPM(s) have been created:\n" +
                     "\n".join(rpms))
Esempio n. 9
0
    def koji(self):
        """koji task. Submit a build to koji; add the package first if
        necessary.

        """
        if not self.buildopts['scratch']:
            self.koji_obj.add_pkg(self.package_name)
        utils.safe_makedirs(self.results_dir)
        srpm = self.prebuild()
        task_id = self.koji_obj.build_srpm(srpm)
        return task_id
Esempio n. 10
0
    def koji(self):
        """koji task. Submit a build to koji; add the package first if
        necessary.

        """
        if not self.buildopts['scratch']:
            self.koji_obj.add_pkg(self.package_name)
        utils.safe_makedirs(self.results_dir)
        srpm = self.prebuild()
        task_id = self.koji_obj.build_srpm(srpm)
        return task_id
Esempio n. 11
0
def move_to_cache(srpm, upstream_root):
    """Move the srpm to the upstream cache. Return the path to the file in the cache."""
    name, version = srpm_nvr(srpm)[0:2]
    base_srpm = os.path.basename(srpm)
    upstream_dir = os.path.join(upstream_root, name, version)
    utils.safe_makedirs(upstream_dir)
    dest_file = os.path.join(upstream_dir, base_srpm)
    if os.path.exists(dest_file):
        os.unlink(dest_file)
    shutil.move(srpm, dest_file)

    return dest_file
Esempio n. 12
0
def move_to_cache(srpm, upstream_root):
    """Move the srpm to the upstream cache. Return the path to the file in the cache."""
    name, version = srpm_nvr(srpm)[0:2]
    base_srpm = os.path.basename(srpm)
    upstream_dir = os.path.join(upstream_root, name, version)
    utils.safe_makedirs(upstream_dir)
    dest_file = os.path.join(upstream_dir, base_srpm)
    if os.path.exists(dest_file):
        os.unlink(dest_file)
    shutil.move(srpm, dest_file)

    return dest_file
Esempio n. 13
0
def full_extract(unpacked_dir, archives_downloaded, destdir):
    """Extract downloaded archives plus archives inside downloaded SRPMs"""
    archives_in_srpm = []
    if os.path.isdir(unpacked_dir):
        for fname in glob.glob(os.path.join(unpacked_dir, '*')):
            if os.path.isfile(fname):
                archives_in_srpm.append(os.path.abspath(fname))
    utils.safe_makedirs(destdir)
    old_dir = os.getcwd()
    os.chdir(destdir)
    for fname in archives_downloaded + archives_in_srpm:
        log.info("Extracting " + fname)
        utils.super_unpack(fname)
    os.chdir(old_dir)
    log.info('Extracted files to ' + destdir)
Esempio n. 14
0
def full_extract(unpacked_dir, archives_downloaded, destdir):
    """Extract downloaded archives plus archives inside downloaded SRPMs"""
    archives_in_srpm = []
    if os.path.isdir(unpacked_dir):
        for fname in glob.glob(os.path.join(unpacked_dir, '*')):
            if os.path.isfile(fname):
                archives_in_srpm.append(os.path.abspath(fname))
    utils.safe_makedirs(destdir)
    old_dir = os.getcwd()
    os.chdir(destdir)
    for fname in archives_downloaded + archives_in_srpm:
        log.info("Extracting " + fname)
        utils.super_unpack(fname)
    os.chdir(old_dir)
    log.info('Extracted files to ' + destdir)
Esempio n. 15
0
    def prebuild(self):
        """prebuild task.
        Create an SRPM containing upstream sources (if any) plus our changes
        (if any) plus a spec file.

        Return the name of the SRPM created.

        """
        utils.safe_makedirs(self.prebuild_dir)
        spec_filename = self.prebuild_external_sources()

        result_srpm = self.make_srpm(spec_filename)

        if result_srpm:
            log.info("Files have been prepared in %s.", self.prebuild_dir)
            return os.path.abspath(result_srpm)
Esempio n. 16
0
    def prebuild(self):
        """prebuild task.
        Create an SRPM containing upstream sources (if any) plus our changes
        (if any) plus a spec file.
        
        Return the name of the SRPM created.

        """
        utils.safe_makedirs(self.prebuild_dir)
        spec_filename = self.prebuild_external_sources()

        result_srpm = self.make_srpm(spec_filename)

        if result_srpm:
            log.info("Files have been prepared in %s.", self.prebuild_dir)
            return os.path.abspath(result_srpm)
Esempio n. 17
0
def download_koji_file(task_id, filename, destdir):
    """Download a the file 'filename' for task number 'task_id' and place it
    in destdir/task_id/filename

    """
    url = "http://koji-hub.batlab.org/koji/getfile?taskID=%d&name=%s" % (
        task_id, filename)
    log.debug('Retrieving ' + url)
    handle = urllib2.urlopen(url)
    utils.safe_makedirs(destdir)
    full_filename = os.path.join(destdir, filename)
    desthandle = open(full_filename, 'w')
    try:
        desthandle.write(handle.read())
    finally:
        desthandle.close()
Esempio n. 18
0
def process_dot_source(cache_prefix, sfilename, destdir):
    """Read a .source file, fetch any files mentioned in it from the
    cache.

    """
    utils.safe_makedirs(destdir)
    downloaded = []
    try:
        sfile = open(sfilename, 'r')
        for lineno, line in enumerate(sfile):
            line = line.strip()
            if line.startswith('#'):
                continue
            if line == '':
                continue
            basename = os.path.basename(line)
            if line.startswith('/'):
                uri = "file://" + line
                log.warning(
                    "An absolute path has been given in %s line %d. "
                    "It is recommended to use only paths relative to %s"
                    "in your source files.", sfilename, lineno + 1,
                    cache_prefix)
            elif not re.match(r'/|\w+://', line):  # relative path
                uri = os.path.join(cache_prefix, line)
            else:
                uri = line

            log.info('Retrieving ' + uri)
            try:
                handle = urllib2.urlopen(uri)
            except urllib2.URLError, err:
                raise Error("Unable to download %s\n%s" % (uri, str(err)))
            filename = os.path.join(destdir, basename)
            try:
                desthandle = open(filename, 'w')
                desthandle.write(handle.read())
            except EnvironmentError, err:
                raise Error("Unable to save downloaded file to %s\n%s" %
                            (filename, str(err)))
            downloaded.append(filename)
Esempio n. 19
0
def process_dot_source(cache_prefix, sfilename, destdir):
    """Read a .source file, fetch any files mentioned in it from the
    cache.

    """
    utils.safe_makedirs(destdir)
    downloaded = []
    try:
        sfile = open(sfilename, 'r')
        for lineno, line in enumerate(sfile):
            line = line.strip()
            if line.startswith('#'):
                continue
            if line == '':
                continue
            basename = os.path.basename(line)
            if line.startswith('/'):
                uri = "file://" + line
                log.warning(
                    "An absolute path has been given in %s line %d. "
                    "It is recommended to use only paths relative to %s"
                    "in your source files.", sfilename, lineno+1,
                    cache_prefix)
            elif not re.match(r'/|\w+://', line): # relative path
                uri = os.path.join(cache_prefix, line)
            else:
                uri = line

            log.info('Retrieving ' + uri)
            try:
                handle = urllib2.urlopen(uri)
            except urllib2.URLError, err:
                raise Error("Unable to download %s\n%s" % (uri, str(err)))
            filename = os.path.join(destdir, basename)
            try:
                desthandle = open(filename, 'w')
                desthandle.write(handle.read())
            except EnvironmentError, err:
                raise Error("Unable to save downloaded file to %s\n%s" % (filename, str(err)))
            downloaded.append(filename)
Esempio n. 20
0
    def quilt(self):
        """quilt task. Prebuild the package (except for making the SRPM)
        and run 'quilt setup' on the spec file.

        """
        if not utils.which("quilt"):
            raise ProgramNotFoundError("quilt")

        if self.buildopts['autoclean']:
            if os.path.exists(self.quilt_dir):
                log.debug("autoclean removing " + self.quilt_dir)
                shutil.rmtree(self.quilt_dir)

        utils.safe_makedirs(self.quilt_dir)
        spec_filename = self.prebuild_external_sources(destdir=self.quilt_dir)

        os.chdir(self.quilt_dir)
        ret = utils.unchecked_call(["quilt", "-v", "setup", spec_filename])
        if ret != 0:
            raise Error("Error running 'quilt setup' on the spec file.")

        log.info("quilt files ready in %s", self.quilt_dir)
Esempio n. 21
0
    def quilt(self):
        """quilt task. Prebuild the package (except for making the SRPM)
        and run 'quilt setup' on the spec file.

        """
        if not utils.which("quilt"):
            raise ProgramNotFoundError("quilt")

        if self.buildopts['autoclean']:
            if os.path.exists(self.quilt_dir):
                log.debug("autoclean removing " + self.quilt_dir)
                shutil.rmtree(self.quilt_dir)

        utils.safe_makedirs(self.quilt_dir)
        spec_filename = self.prebuild_external_sources(destdir=self.quilt_dir)

        os.chdir(self.quilt_dir)
        ret = utils.unchecked_call(["quilt", "-v", "setup", spec_filename])
        if ret != 0:
            raise Error("Error running 'quilt setup' on the spec file.")

        log.info("quilt files ready in %s", self.quilt_dir)