Esempio n. 1
0
 def insert_trait(self, path, suite=None):
     #tar = TraitTarFile(path)
     #trait = tar.get_trait()
     trait = TraitXml(file(join(path, 'trait.xml')))
     if suite is not None:
         trait.suite = suite
     all = Set([x.trait for x in self._alltraits.select()])
     suite_traits = Set([x.trait for x in self._traits.select()])
     parents = Set(trait.parents)
     debug(parents)
     if not parents.issubset(suite_traits):
         raise UnbornError, 'Parent Unborn'        
     if trait.name in suite_traits:
         raise Error, 'trait exists'
     idata ={'trait' : trait.name}
     if trait.name not in all:
         self._alltraits.insert(data=idata)
     if trait.name not in suite_traits:
         self._traits.insert(data=idata)
     lasttrait = self.current_trait
     self._parents.set_trait(trait.name)
     self._packages.set_trait(trait.name)
     self._templates.set_trait(trait.name)
     self._debconf.set_trait(trait.name)
     self._scripts.set_trait(trait.name)
     self._parents.insert_parents(trait.parents)
     for package, action in trait.packages.items():
         self._packages.insert_package(package, action)
     n = 0
     for package, template, data in trait.templates:
         #print template, data
         #templatefile = tar.get_template(data['package'], template)
         templatefile = file(join(path, 'template-%d' % n))
         idata = {'template' : template}
         #print idata
         idata.update(data)
         #print idata
         self._templates.insert_template(idata, templatefile)
         n += 1
     for debconf in trait.debconf.values():
         self._debconf.insert(debconf, trait.name)
     for script in trait.scripts:
         #scriptfile = tar.get_script(script)
         scriptfile = file(join(path, 'script-%s' % script))
         self._scripts.insert_script(script, scriptfile)
     environ = TraitEnvironment(self.conn, suite, trait.name)
     environ.update(trait.environ)
     self.set_trait(lasttrait)