Ejemplo n.º 1
0
 def set_new_patches(self, fns):
     self.wipe_patches()
     if not fns:
         return
     apply_method = self.patches_apply_method()
     ps = ''
     pa = ''
     for i, pfn in enumerate(fns, start=1):
         ps += "Patch%04d: %s\n" % (i, pfn)
         if apply_method == 'rpm':
             pa += "%%patch%04d -p1\n" % i
     ## PatchXXX: lines after Source0 / #patches_base=
     self._txt, n = re.subn(self.RE_AFTER_PATCHES_BASE,
                            r'\g<1>%s\n' % ps,
                            self.txt,
                            count=1)
     if n != 1:
         self._txt, n = re.subn(self.RE_AFTER_SOURCES,
                                r'\g<1>%s\n' % ps,
                                self.txt,
                                count=1)
     if n != 1:
         raise exception.SpecFileParseError(
             spec_fn=self.fn, error="Failed to append PatchXXXX: lines")
     ## %patchXXX -p1 lines after "%setup" if needed
     if apply_method == 'rpm':
         self._txt, n = re.subn(r'((?:^|\n)%setup[^\n]*\n)\s*',
                                r'\g<1>\n%s\n' % pa, self.txt)
         if n == 0:
             raise exception.SpecFileParseError(
                 spec_fn=self.fn,
                 error="Failed to append %patchXXXX lines after %setup")
Ejemplo n.º 2
0
 def get_source_urls(self):
     # arcane rpm constants, now in python!
     sources = filter(lambda x: x[2] == 1, self.rpmspec.sources)
     if len(sources) == 0:
         error = "No sources found"
         raise exception.SpecFileParseError(spec_fn=self.fn, error=error)
     # OpenStack packages seem to always use only one tarball
     sources0 = filter(lambda x: x[1] == 0, sources)
     if len(sources0) == 0:
         error = "Source0 not found"
         raise exception.SpecFileParseError(spec_fn=self.fn, error=error)
     source_url = sources0[0][0]
     return [source_url]
Ejemplo n.º 3
0
 def get_tag(self, tag, expand_macros=False):
     m = re.search('^%s:\s+(\S.*)$' % tag, self.txt, re.M)
     if not m:
         raise exception.SpecFileParseError(spec_fn=self.fn,
                                            error="%s tag not found" % tag)
     tag = m.group(1).rstrip()
     if expand_macros and has_macros(tag):
         # don't parse using rpm unless required
         tag = self.expand_macro(tag)
     return tag
Ejemplo n.º 4
0
 def rpmspec(self):
     if not self._rpmspec:
         if not RPM_AVAILABLE:
             raise exception.RpmModuleNotAvailable()
         rpm.addMacro('_sourcedir',
                      os.path.dirname(os.path.realpath(self.fn)))
         try:
             self._rpmspec = rpm.spec(self.fn)
         except ValueError, e:
             raise exception.SpecFileParseError(spec_fn=self.fn,
                                                error=e.args[0])
Ejemplo n.º 5
0
    def set_new_patches(self, fns):
        self.wipe_patches()
        if not fns:
            return
        apply_method = self.patches_apply_method()
        ps = ''
        pa = ''
        for i, pfn in enumerate(fns, start=1):
            ps += "Patch%04d: %s\n" % (i, pfn)
            if apply_method == 'rpm':
                pa += "%%patch%04d -p1\n" % i
        # PatchXXX: lines after Source0 / #patches_base=
        self._txt, n = re.subn(self.RE_AFTER_PATCHES_BASE,
                               r'\g<1>%s\n' % ps,
                               self.txt,
                               count=1)

        if n != 1:
            m = None
            for m in re.finditer(self.RE_AFTER_SOURCES, self.txt):
                pass
            if not m:
                raise exception.SpecFileParseError(
                    spec_fn=self.fn, error="Failed to append PatchXXXX: lines")
            i = m.end()
            startnl, endnl = '', ''
            if self._txt[i - 2] != '\n':
                startnl += '\n'
            if self._txt[i] != '\n':
                endnl += '\n'
            self._txt = self._txt[:i] + startnl + ps + endnl + self._txt[i:]
        # %patchXXX -p1 lines after "%setup" if needed
        if apply_method == 'rpm':
            self._txt, n = re.subn(r'((?:^|\n)%setup[^\n]*\n)\s*',
                                   r'\g<1>\n%s\n' % pa, self.txt)
            if n == 0:
                raise exception.SpecFileParseError(
                    spec_fn=self.fn,
                    error="Failed to append %patchXXXX lines after %setup")
Ejemplo n.º 6
0
 def _create_new_patches_base(self, base):
     self._txt, n = re.subn(self.RE_PATCH,
                            r'\n#\n# patches_base=%s\n#\n\g<1>' % base,
                            self.txt,
                            count=1,
                            flags=re.M)
     if n != 1:
         self._txt, n = re.subn(self.RE_AFTER_SOURCES,
                                r'\g<1>#\n# patches_base=%s\n#\n\n' % base,
                                self.txt,
                                count=1,
                                flags=re.M)
     if n != 1:
         raise exception.SpecFileParseError(
             spec_fn=self.fn,
             error="Unable to create new #patches_base entry.")
Ejemplo n.º 7
0
 def set_patches_base(self, base):
     v, _ = self.get_patches_base()
     if base:
         if v is None:
             self._create_new_patches_base(base)
         else:
             self._txt, n = re.subn(r'(#\s*patches_base\s*=\s*)[\w.+]*',
                                    r'\g<1>%s' % base,
                                    self.txt,
                                    flags=re.M)
             if n != 1:
                 raise exception.SpecFileParseError(
                     spec_fn=self.fn,
                     error="Unable to set new #patches_base")
     else:
         if v is not None:
             self._txt = re.sub(
                 r'(?:\n#)+\s*patches_base\s*=[^\n]*\n(?:#\n)*',
                 '',
                 self.txt,
                 flags=re.M)