From f7f4a89b782806e71dfe7f125de82351197a0b07 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Wed, 16 Jul 2008 14:08:41 -0400 Subject: Add the new blacklist and whiteout plugins to anaconda source. --- yum-plugins/Makefile | 33 ++++++++++++++++++++++++++ yum-plugins/blacklist.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ yum-plugins/whiteout.py | 57 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 yum-plugins/Makefile create mode 100644 yum-plugins/blacklist.py create mode 100644 yum-plugins/whiteout.py (limited to 'yum-plugins') diff --git a/yum-plugins/Makefile b/yum-plugins/Makefile new file mode 100644 index 000000000..d5542981e --- /dev/null +++ b/yum-plugins/Makefile @@ -0,0 +1,33 @@ +# +# Makefile +# +# Copyright (C) 2008 Red Hat, Inc. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +include ../Makefile.inc + +all: + echo "nothing to make" + +install: + mkdir -p $(DESTDIR)/usr/lib/yum-plugins + install *.py $(DESTDIR)/usr/lib/yum-plugins + ../py-compile --basedir $(DESTDIR)/usr/lib/yum-plugins $(DESTDIR)/usr/lib/yum-plugins/*.py + +clean: + rm -f *.pyc + +depend: diff --git a/yum-plugins/blacklist.py b/yum-plugins/blacklist.py new file mode 100644 index 000000000..0fce5cf26 --- /dev/null +++ b/yum-plugins/blacklist.py @@ -0,0 +1,61 @@ +#!/usr/bin/python +# +# Copyright (C) 2008 +# Red Hat, Inc. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author(s): Chris Lumens + +# This yum plugin handles the upgrade blacklist. This is a repo-specific +# metadata file that tells us about packages that have been obsoleted by +# some other package and should therefore be removed on upgrade. Usually +# packages themselves provide this information through Obsoletes:, but +# with multilib we can't always count on that. +from yum.plugins import TYPE_CORE + +try: + from xml.etree import cElementTree +except ImportError: + import cElementTree + +iterparse = cElementTree.iterparse + +requires_api_version = '2.6' +plugin_type = (TYPE_CORE, ) + +def exclude_hook(conduit): + rpmdb = conduit.getRpmDB() + tsinfo = conduit.getTsInfo() + + for repo in conduit.getRepos().listEnabled(): + try: + infile = repo.retrieveMD("group") + except: + continue + + for event, elem in iterparse(infile): + if elem.tag == "blacklist": + for child in elem.getchildren(): + if elem.tag != "package": + continue + + name = elem.get("name") + try: + arch = elem.get("arch") + except: + arch = None + + for po in rpmdb.searchNevra(name=name, arch=arch): + tsinfo.addErase(po) diff --git a/yum-plugins/whiteout.py b/yum-plugins/whiteout.py new file mode 100644 index 000000000..3d45f4671 --- /dev/null +++ b/yum-plugins/whiteout.py @@ -0,0 +1,57 @@ +#!/usr/bin/python +# +# Copyright (C) 2008 +# Red Hat, Inc. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author(s): Chris Lumens + +# This yum plugin handles the whiteout file. The whiteout is a repo-specific +# metadata file that is used to break loops in dependencies. +from yum.plugins import TYPE_CORE +import rpm + +try: + from xml.etree import cElementTree +except ImportError: + import cElementTree + +iterparse = cElementTree.iterparse + +requires_api_version = '2.6' +plugin_type = (TYPE_CORE, ) + +def postreposetup_hook(conduit): + whiteout = "" + lst = [] + + # Merge the whiteout from all enabled repos together. + for repo in conduit.getRepos().listEnabled(): + try: + infile = repo.retrieveMD("group") + except: + continue + + for event, elem in iterparse(infile): + if elem.tag == "whiteout": + for child in elem.getchildren(): + if child.tag != "ignoredep": + continue + + lst.append("%s>%s" % (child.get("package"), child.get("requires"))) + + whiteout = " ".join(lst) + + rpm.addMacro("_dependency_whiteout", whiteout) -- cgit