diff options
author | Chris Lumens <clumens@redhat.com> | 2008-07-16 14:08:41 -0400 |
---|---|---|
committer | Chris Lumens <clumens@redhat.com> | 2008-08-21 14:29:17 -0400 |
commit | f7f4a89b782806e71dfe7f125de82351197a0b07 (patch) | |
tree | 302cf653220e82435e72c82eee93cc801697a172 /yum-plugins | |
parent | f693502939ab4a956dc84c95c6a85d9f2fb6703b (diff) | |
download | anaconda-f7f4a89b782806e71dfe7f125de82351197a0b07.tar.gz anaconda-f7f4a89b782806e71dfe7f125de82351197a0b07.tar.xz anaconda-f7f4a89b782806e71dfe7f125de82351197a0b07.zip |
Add the new blacklist and whiteout plugins to anaconda source.
Diffstat (limited to 'yum-plugins')
-rw-r--r-- | yum-plugins/Makefile | 33 | ||||
-rw-r--r-- | yum-plugins/blacklist.py | 61 | ||||
-rw-r--r-- | yum-plugins/whiteout.py | 57 |
3 files changed, 151 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. +# + +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 <http://www.gnu.org/licenses/>. +# +# Author(s): Chris Lumens <clumens@redhat.com> + +# 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 <http://www.gnu.org/licenses/>. +# +# Author(s): Chris Lumens <clumens@redhat.com> + +# 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) |