summaryrefslogtreecommitdiffstats
path: root/yum-plugin/chitinplugin.py
diff options
context:
space:
mode:
Diffstat (limited to 'yum-plugin/chitinplugin.py')
-rw-r--r--yum-plugin/chitinplugin.py175
1 files changed, 175 insertions, 0 deletions
diff --git a/yum-plugin/chitinplugin.py b/yum-plugin/chitinplugin.py
new file mode 100644
index 0000000..61037c5
--- /dev/null
+++ b/yum-plugin/chitinplugin.py
@@ -0,0 +1,175 @@
+#!/usr/bin/python
+
+# 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 Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# Copyright Red Hat Inc. 2007, 2008
+#
+# Author: Izhar Firdaus <izhar@fedoraproject.com>
+# Examples:
+#
+# yum chitin-install oneclickinstall-XML-metadata-file
+# yum chitin-query details oneclickinstall-XML-metadata-file
+# yum chitin-query repositories oneclickinstall-XML-metadata-file
+# yum chitin-query packages oneclickinstall-XML-metadata-file
+#
+
+import re
+from chitin.parser import Metapackage
+from chitin.utils import get_child_value,get_element_tag
+from yum.plugins import PluginYumExit,TYPE_CORE,TYPE_INTERACTIVE
+from yum import logginglevels
+import yum.i18n, tempfile
+_ = yum.i18n._
+
+requires_api_version = '2.5'
+plugin_type = (TYPE_INTERACTIVE,)
+
+## Use this for now
+distro='openSUSE'
+release='Factory'
+
+
+def add_tmp_repo(base,name,repourls):
+ """
+ Function to add temporary repository
+
+ @param base The YumBase object for the operation
+ @param name The repository name
+ @param repourls A list of urls for the repository
+
+ @return None
+ """
+ tfo = tempfile.NamedTemporaryFile()
+ repoid = name
+ repoconfig = """
+[%s]
+name=%s
+failovermethod=priority
+baseurl=%s
+enabled=1
+""" % (name,name,'\n'.join(repourls))
+ tfo.file.write(repoconfig)
+ tfo.file.close()
+ base.getReposFromConfigFile(tfo.name)
+
+class Query:
+ def __init__(self,distro,release):
+ self.distro = distro
+ self.release = release
+
+ def getNames(self):
+ return ['chitin-query']
+
+ def getUsage(self):
+ return "[details|repositories|packages] [ file]"
+
+ def getSummary(self):
+ return "Query data from OneClickInstall metadata"
+
+ def doCheck(self, base, basecmd, extcmds):
+ pass
+
+ def getRepos(self): # so we can act as a "conduit"
+ return self.repos
+
+ def show_pkg(self, msg, pkg, md, disp=None):
+ print msg, pkg, md
+
+ def show_pkg_exit(self):
+ pass
+
+ def doCommand(self, base, basecmd, extcmds):
+ action = extcmds[0]
+ param = extcmds[1:]
+ metapackages = []
+ for mp in param:
+ metapackages.append(Metapackage(mp,'%s %s' % (self.distro,self.release)))
+
+ if action == 'details':
+ for chitin in metapackages:
+ print '======================='
+ print 'Metadata'
+ print '======================='
+ for c in chitin.getGroup().getchildren():
+ tagname = get_element_tag(c)
+ if tagname in ['name','summary','description']:
+ print tagname,':',c.text
+ if action == 'repositories':
+ for chitin in metapackages:
+ print '========================'
+ print 'Repositories'
+ print '========================'
+ for r in chitin.getRepositories():
+ print get_child_value(r,'name')
+ print chitin.getRepoURL(get_child_value(r,'name'))
+ if action == 'packages':
+ for chitin in metapackages:
+ print '========================'
+ print 'Packages'
+ print '========================'
+ for p in chitin.getProducts():
+ print p.getchildren()[0].text
+ print ''
+ return 0, ['']
+
+class Install:
+ def __init__(self,distro,release):
+ self.distro = distro
+ self.release = release
+
+ def getNames(self):
+ return ['chitin-install']
+
+ def getUsage(self):
+ return "[ file]"
+
+ def getSummary(self):
+ return "Install packages from OneClickInstall metadata"
+
+ def doCheck(self, base, basecmd, extcmds):
+ pass
+
+ def getRepos(self): # so we can act as a "conduit"
+ return self.repos
+
+ def show_pkg(self, msg, pkg, md, disp=None):
+ print msg, pkg, md
+
+ def show_pkg_exit(self):
+ pass
+
+ def doCommand(self, base, basecmd, extcmds):
+ packages = []
+ repositories = []
+ for mp in extcmds:
+ chitin = Metapackage(mp,'%s %s' % (self.distro,self.release))
+ for p in chitin.getProducts():
+ packages.append(get_child_value(p,'name'))
+ for r in chitin.getRepositories():
+ repositories.append((get_child_value(r,'name'),chitin.getRepoURL(get_child_value(r,'name'))))
+ print packages
+ print repositories
+
+ base.verbose_logger.log(logginglevels.INFO_2,
+ _("Setting up Install Process"))
+ try:
+ return base.installPkgs(packages)
+ except yum.Errors.YumBaseError, e:
+ return 1, [str(e)]
+
+def config_hook(conduit):
+ conduit.registerCommand(Query(distro,release))
+ conduit.registerCommand(Install(distro,release))
+