158 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| 
 | |
| # 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; version 2 of the License.
 | |
| #
 | |
| # 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.
 | |
| 
 | |
| 
 | |
| """
 | |
| Pungi adds several new sections to kickstarts.
 | |
| 
 | |
| 
 | |
| FULLTREE EXCLUDES
 | |
| -----------------
 | |
| Fulltree excludes allow us to define SRPM names
 | |
| we don't want to be part of fulltree processing.
 | |
| 
 | |
| Syntax:
 | |
| %fulltree-excludes
 | |
| <srpm_name>
 | |
| <srpm_name>
 | |
| ...
 | |
| %end
 | |
| 
 | |
| 
 | |
| MULTILIB BLACKLIST
 | |
| ------------------
 | |
| List of RPMs which are prevented from becoming multilib.
 | |
| 
 | |
| Syntax:
 | |
| %multilib-blacklist
 | |
| <rpm_name>
 | |
| <rpm_name>
 | |
| ...
 | |
| %end
 | |
| 
 | |
| 
 | |
| MULTILIB WHITELIST
 | |
| ------------------
 | |
| List of RPMs which will become multilib (but only if native package is pulled in).
 | |
| 
 | |
| Syntax:
 | |
| %multilib-whitelist
 | |
| <rpm_name>
 | |
| <rpm_name>
 | |
| ...
 | |
| %end
 | |
| 
 | |
| 
 | |
| PREPOPULATE
 | |
| -----------
 | |
| To make sure no package is left behind between 2 composes,
 | |
| we can explicitly add <name>.<arch> records to the %prepopulate section.
 | |
| These will be added to the input list and marked with 'prepopulate' flag.
 | |
| 
 | |
| Syntax:
 | |
| %prepopulate
 | |
| <rpm_name>.<rpm_arch>
 | |
| <rpm_name>.<rpm_arch>
 | |
| ...
 | |
| %end
 | |
| """
 | |
| 
 | |
| 
 | |
| import pykickstart.parser
 | |
| import pykickstart.sections
 | |
| 
 | |
| 
 | |
| class FulltreeExcludesSection(pykickstart.sections.Section):
 | |
|     sectionOpen = "%fulltree-excludes"
 | |
| 
 | |
|     def handleLine(self, line):
 | |
|         if not self.handler:
 | |
|             return
 | |
| 
 | |
|         (h, s, t) = line.partition('#')
 | |
|         line = h.rstrip()
 | |
| 
 | |
|         self.handler.fulltree_excludes.add(line)
 | |
| 
 | |
| 
 | |
| class MultilibBlacklistSection(pykickstart.sections.Section):
 | |
|     sectionOpen = "%multilib-blacklist"
 | |
| 
 | |
|     def handleLine(self, line):
 | |
|         if not self.handler:
 | |
|             return
 | |
| 
 | |
|         (h, s, t) = line.partition('#')
 | |
|         line = h.rstrip()
 | |
| 
 | |
|         self.handler.multilib_blacklist.add(line)
 | |
| 
 | |
| 
 | |
| class MultilibWhitelistSection(pykickstart.sections.Section):
 | |
|     sectionOpen = "%multilib-whitelist"
 | |
| 
 | |
|     def handleLine(self, line):
 | |
|         if not self.handler:
 | |
|             return
 | |
| 
 | |
|         (h, s, t) = line.partition('#')
 | |
|         line = h.rstrip()
 | |
| 
 | |
|         self.handler.multilib_whitelist.add(line)
 | |
| 
 | |
| 
 | |
| class PrepopulateSection(pykickstart.sections.Section):
 | |
|     sectionOpen = "%prepopulate"
 | |
| 
 | |
|     def handleLine(self, line):
 | |
|         if not self.handler:
 | |
|             return
 | |
| 
 | |
|         (h, s, t) = line.partition('#')
 | |
|         line = h.rstrip()
 | |
| 
 | |
|         self.handler.prepopulate.add(line)
 | |
| 
 | |
| 
 | |
| class KickstartParser(pykickstart.parser.KickstartParser):
 | |
|     def setupSections(self):
 | |
|         pykickstart.parser.KickstartParser.setupSections(self)
 | |
|         self.registerSection(FulltreeExcludesSection(self.handler))
 | |
|         self.registerSection(MultilibBlacklistSection(self.handler))
 | |
|         self.registerSection(MultilibWhitelistSection(self.handler))
 | |
|         self.registerSection(PrepopulateSection(self.handler))
 | |
| 
 | |
| 
 | |
| HandlerClass = pykickstart.version.returnClassForVersion()
 | |
| class PungiHandler(HandlerClass):
 | |
|     def __init__(self, *args, **kwargs):
 | |
|         HandlerClass.__init__(self, *args, **kwargs)
 | |
|         self.fulltree_excludes = set()
 | |
|         self.multilib_blacklist = set()
 | |
|         self.multilib_whitelist = set()
 | |
|         self.prepopulate = set()
 | |
| 
 | |
| 
 | |
| def get_ksparser(ks_path=None):
 | |
|     """
 | |
|     Return a kickstart parser instance.
 | |
|     Read kickstart if ks_path provided.
 | |
|     """
 | |
|     ksparser = KickstartParser(PungiHandler())
 | |
|     if ks_path:
 | |
|         ksparser.readKickstart(ks_path)
 | |
|     return ksparser
 |