Beispiel #1
0
    def run(self, cmdline, db):
        repo = (db.session.query(Repo)
                .filter(Repo.name == cmdline.NAME)
                .first())

        if repo:
            self.log_error("Repository '{0}' already defined"
                           .format(cmdline.NAME))
            return 1

        self.log_info("Adding repository '{0}' ({1})"
                      .format(cmdline.NAME, cmdline.URL))

        new = Repo()
        new.name = cmdline.NAME
        new.type = cmdline.TYPE
        for url in cmdline.URL:
            new_url = Url()
            new_url.url = url
            new.url_list.append(new_url)

        if cmdline.nice_name:
            new.nice_name = cmdline.nice_name

        new.nogpgcheck = cmdline.nogpgcheck

        db.session.add(new)
        db.session.flush()
        return 0
Beispiel #2
0
    def run(self, cmdline, db):
        repo = (db.session.query(Repo)
                          .filter(Repo.name == cmdline.NAME)
                          .first())

        if repo:
            self.log_error("Repository '{0}' already defined"
                           .format(cmdline.NAME))
            return 1

        self.log_info("Adding repository '{0}' ({1})"
                      .format(cmdline.NAME, cmdline.URL))

        new = Repo()
        new.name = cmdline.NAME
        new.type = cmdline.TYPE
        for url in cmdline.URL:
            new_url = Url()
            new_url.url = url
            new.url_list.append(new_url)

        if cmdline.nice_name:
            new.nice_name = cmdline.nice_name

        new.nogpgcheck = cmdline.nogpgcheck

        db.session.add(new)
        db.session.flush()
Beispiel #3
0
    def run(self, cmdline, db):
        repo = (db.session.query(Repo)
                .filter(Repo.name == cmdline.NAME)
                .first())

        if not repo:
            self.log_error("Repository '{0}' not found"
                           .format(cmdline.NAME))
            return 1

        if cmdline.name:
            dbrepo = (db.session.query(Repo)
                      .filter(Repo.name == cmdline.name)
                      .first())
            if dbrepo:
                self.log_error("Unable to rename repository '{0}' to '{1}',"
                               " the latter is already defined"
                               .format(repo.name, dbrepo.name))
                return 1

        options = ["name", "type", "nice_name"]
        for opt in options:
            if hasattr(cmdline, opt) and getattr(cmdline, opt):
                newval = getattr(cmdline, opt)
                self.log_info("Updating {0} on '{1}' to '{2}'"
                              .format(opt, repo.name, newval))
                setattr(repo, opt, newval)

        if cmdline.add_url:
            new_url = Url()
            new_url.url = getattr(cmdline, "add_url")
            repo.url_list.append(new_url)

        if cmdline.remove_url:
            url = (db.session.query(Url)
                   .join(UrlRepo)
                   .filter(Url.url == cmdline.remove_url)
                   .filter(UrlRepo.repo_id == repo.id)
                   .first())
            if not url:
                self.log_error("Url is not assigned to selected repository."
                               " Use repoinfo to find out more about repository.")
                return 1

            repo.url_list.remove(url)
            db.session.delete(url)

        if cmdline.gpgcheck:
            repo.nogpgcheck = False

        if cmdline.nogpgcheck:
            repo.nogpgcheck = True

        db.session.add(repo)
        db.session.flush()

        self.log_info("Repository modified")
        return 0
Beispiel #4
0
    def run(self, cmdline, db):
        repo = (db.session.query(Repo)
                .filter(Repo.name == cmdline.NAME)
                .first())

        if not repo:
            self.log_error("Repository '{0}' not found"
                           .format(cmdline.NAME))
            return 1

        if cmdline.name:
            dbrepo = (db.session.query(Repo)
                      .filter(Repo.name == cmdline.name)
                      .first())
            if dbrepo:
                self.log_error("Unable to rename repository '{0}' to '{1}',"
                               " the latter is already defined"
                               .format(repo.name, dbrepo.name))
                return 1

        options = ["name", "type", "nice_name"]
        for opt in options:
            if hasattr(cmdline, opt) and getattr(cmdline, opt):
                newval = getattr(cmdline, opt)
                self.log_info("Updating {0} on '{1}' to '{2}'"
                              .format(opt, repo.name, newval))
                setattr(repo, opt, newval)

        if cmdline.add_url:
            new_url = Url()
            new_url.url = getattr(cmdline, "add_url")
            repo.url_list.append(new_url)

        if cmdline.remove_url:
            url = (db.session.query(Url)
                   .join(UrlRepo)
                   .filter(Url.url == cmdline.remove_url)
                   .filter(UrlRepo.repo_id == repo.id)
                   .first())
            if not url:
                self.log_error("Url is not assigned to selected repository."
                               " Use repoinfo to find out more about repository.")
                return 1

            repo.url_list.remove(url)
            db.session.delete(url)

        if cmdline.gpgcheck:
            repo.nogpgcheck = False

        if cmdline.nogpgcheck:
            repo.nogpgcheck = True

        db.session.add(repo)
        db.session.flush()

        self.log_info("Repository modified")
Beispiel #5
0
    def _import_yum_repo(self, fp):
        """
        Parse open .repo file `fp` and return
        list of Repo instances.

        Section name is used as repository name,
        baseurl (required) and gpgcheck are stored.
        """

        parser = ConfigParser.SafeConfigParser()
        try:
            parser.readfp(fp)
        except ConfigParser.Error as exc:
            self.log_error("Exception while parsing repository file: "
                           "'{0}'".format(exc))
            return None

        result = []
        for section in parser.sections():
            new = Repo()
            new.name = section
            new.type = "yum"
            if not parser.has_option(section, "baseurl"):
                self.log_error("Repo '{0}' is missing required"
                               " option 'baseurl'".format(section))
                return None

            new_url = Url()
            new_url.url = parser.get(section, "baseurl")
            new.url_list = [new_url]

            if parser.has_option(section, "gpgcheck"):
                new.nogpgcheck = parser.getint(section, "gpgcheck") == 0

            result.append(new)

        return result
Beispiel #6
0
    def run(self, cmdline, db) -> int:
        if not cmdline.REPO and not cmdline.all:
            self.log_error("No repositories specified")
            return 1

        repos = []

        for pattern in cmdline.REPO:
            wildcard_used = any(c in pattern for c in ['?', '*'])
            if wildcard_used:
                break

        if (len(cmdline.REPO) > 1 or cmdline.all
                or wildcard_used) and (cmdline.name or cmdline.nice_name):
            self.log_error(
                "Can't assign the same name to multiple repositories")
            return 1

        if cmdline.all or '*' in cmdline.REPO:
            repos.extend(db.session.query(Repo).all())

        else:
            repos.extend(get_repos_by_wildcards(db, cmdline.REPO))

        if repos:
            repos = sorted(list(set(repos)), key=lambda x: x.name)

        else:
            self.log_warn("No matching repositories found")
            return 1

        if cmdline.name:
            dbrepo = (db.session.query(Repo).filter(
                Repo.name == cmdline.name).first())
            if dbrepo:
                self.log_error("Unable to rename repository '{0}' to '{1}',"
                               " the latter is already defined".format(
                                   cmdline.REPO[0], dbrepo.name))
                return 1

        options = ["name", "type", "nice_name"]
        for repo in repos:
            for opt in options:
                if hasattr(cmdline, opt) and getattr(cmdline, opt):
                    newval = getattr(cmdline, opt)
                    self.log_info("Updating {0} on '{1}' to '{2}'".format(
                        opt, repo.name, newval))
                    setattr(repo, opt, newval)

            if cmdline.add_url:
                new_url = Url()
                new_url.url = getattr(cmdline, "add_url")
                repo.url_list.append(new_url)

            if cmdline.remove_url:
                url = (db.session.query(Url).join(UrlRepo).filter(
                    Url.url == cmdline.remove_url).filter(
                        UrlRepo.repo_id == repo.id).first())
                if not url:
                    self.log_warn(
                        "Url is not assigned to {0} repository."
                        " Use repoinfo to find out more about repository.".
                        format(repo.name))
                    continue

                repo.url_list.remove(url)
                db.session.delete(url)

            if cmdline.gpgcheck == "enable":
                repo.nogpgcheck = False

            if cmdline.gpgcheck == "disable":
                repo.nogpgcheck = True

            db.session.add(repo)
            self.log_info("Repository {0} modified".format(repo.name))

        db.session.flush()

        return 0