From: Fabian Groffen Date: Sat, 27 Feb 2010 20:02:45 +0000 (-0000) Subject: Merged from trunk -r15465:15470 X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=b81f78461d96d226fff1f36c7850d841e3e305fa;p=portage.git Merged from trunk -r15465:15470 | 15466 | Splid deprecated functions into a _deprecated module. | | zmedico | | | 15467 | Fix broken dep_expand import from previous commit. | | zmedico | | | 15468 | Move merge and unmerge functions to the vartree module. | | zmedico | | | 15469 | Move getvirtuals to _deprecated module. | | zmedico | | | 15470 | Eliminate the PhaseCheck constructor and make | | zmedico | PhaseCheck.phases_re a class attribute. Thanks to Sebastian | | | Pipping for the initial patch. | svn path=/main/branches/prefix/; revision=15484 --- diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index ad372fd79..d894fbdc6 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -86,7 +86,7 @@ try: 'portage.dbapi.dep_expand:dep_expand', 'portage.dbapi.porttree:close_portdbapi_caches,FetchlistDict,' + \ 'portagetree,portdbapi', - 'portage.dbapi.vartree:vardbapi,vartree,dblink', + 'portage.dbapi.vartree:dblink,merge,unmerge,vardbapi,vartree', 'portage.dbapi.virtual:fakedbapi', 'portage.dep', 'portage.dep:best_match_to_list,dep_getcpv,dep_getkey,' + \ @@ -136,6 +136,7 @@ try: 'cpv_getkey@getCPFromCPV,endversion_keys,' + \ 'suffix_value@endversion,pkgcmp,pkgsplit,vercmp,ververify', 'portage.xpak', + 'portage._deprecated:dep_virtual,digestParseFile,getvirtuals,pkgmerge', ) import portage.const @@ -543,30 +544,6 @@ def abssymlink(symlink): mylink=mydir+"/"+mylink return os.path.normpath(mylink) -def digestParseFile(myfilename, mysettings=None): - """(filename) -- Parses a given file for entries matching: - - Ignores lines that don't start with a valid checksum identifier - and returns a dict with the filenames as keys and {checksumkey:checksum} - as the values. - DEPRECATED: this function is now only a compability wrapper for - portage.manifest.Manifest().""" - - warnings.warn("portage.digestParseFile() is deprecated", - DeprecationWarning, stacklevel=2) - - mysplit = myfilename.split(os.sep) - if mysplit[-2] == "files" and mysplit[-1].startswith("digest-"): - pkgdir = os.sep + os.sep.join(mysplit[:-2]).strip(os.sep) - elif mysplit[-1] == "Manifest": - pkgdir = os.sep + os.sep.join(mysplit[:-1]).strip(os.sep) - - if mysettings is None: - global settings - mysettings = config(clone=settings) - - return Manifest(pkgdir, mysettings["DISTDIR"]).getDigests() - _testing_eapis = frozenset() _deprecated_eapis = frozenset(["3_pre2", "3_pre1", "2_pre3", "2_pre2", "2_pre1"]) @@ -638,66 +615,6 @@ def _movefile(src, dest, **kwargs): raise portage.exception.PortageException( "mv '%s' '%s'" % (src, dest)) -def merge(mycat, mypkg, pkgloc, infloc, myroot, mysettings, myebuild=None, - mytree=None, mydbapi=None, vartree=None, prev_mtimes=None, blockers=None, - scheduler=None): - if not os.access(myroot + EPREFIX_LSTRIP, os.W_OK): - writemsg(_("Permission denied: access('%s', W_OK)\n") % - (myroot + EPREFIX_LSTRIP), noiselevel=-1) - return errno.EACCES - mylink = dblink(mycat, mypkg, myroot, mysettings, treetype=mytree, - vartree=vartree, blockers=blockers, scheduler=scheduler) - return mylink.merge(pkgloc, infloc, myroot, myebuild, - mydbapi=mydbapi, prev_mtimes=prev_mtimes) - -def unmerge(cat, pkg, myroot, mysettings, mytrimworld=1, vartree=None, - ldpath_mtimes=None, scheduler=None): - mylink = dblink(cat, pkg, myroot, mysettings, treetype="vartree", - vartree=vartree, scheduler=scheduler) - vartree = mylink.vartree - try: - mylink.lockdb() - if mylink.exists(): - vartree.dbapi.plib_registry.load() - vartree.dbapi.plib_registry.pruneNonExisting() - retval = mylink.unmerge(trimworld=mytrimworld, cleanup=1, - ldpath_mtimes=ldpath_mtimes) - if retval == os.EX_OK: - mylink.delete() - return retval - return os.EX_OK - finally: - vartree.dbapi.linkmap._clear_cache() - mylink.unlockdb() - -def dep_virtual(mysplit, mysettings): - "Does virtual dependency conversion" - warnings.warn("portage.dep_virtual() is deprecated", - DeprecationWarning, stacklevel=2) - newsplit=[] - myvirtuals = mysettings.getvirtuals() - for x in mysplit: - if isinstance(x, list): - newsplit.append(dep_virtual(x, mysettings)) - else: - mykey=dep_getkey(x) - mychoices = myvirtuals.get(mykey, None) - if mychoices: - if len(mychoices) == 1: - a = x.replace(mykey, dep_getkey(mychoices[0]), 1) - else: - if x[0]=="!": - # blocker needs "and" not "or(||)". - a=[] - else: - a=['||'] - for y in mychoices: - a.append(x.replace(mykey, dep_getkey(y), 1)) - newsplit.append(a) - else: - newsplit.append(x) - return newsplit - auxdbkeys = ( 'DEPEND', 'RDEPEND', 'SLOT', 'SRC_URI', 'RESTRICT', 'HOMEPAGE', 'LICENSE', 'DESCRIPTION', @@ -708,162 +625,6 @@ auxdbkeys = ( ) auxdbkeylen=len(auxdbkeys) -def pkgmerge(mytbz2, myroot, mysettings, mydbapi=None, - vartree=None, prev_mtimes=None, blockers=None): - """will merge a .tbz2 file, returning a list of runtime dependencies - that must be satisfied, or None if there was a merge error. This - code assumes the package exists.""" - - warnings.warn("portage.pkgmerge() is deprecated", - DeprecationWarning, stacklevel=2) - - global db - if mydbapi is None: - mydbapi = db[myroot]["bintree"].dbapi - if vartree is None: - vartree = db[myroot]["vartree"] - if mytbz2[-5:]!=".tbz2": - print(_("!!! Not a .tbz2 file")) - return 1 - - tbz2_lock = None - mycat = None - mypkg = None - did_merge_phase = False - success = False - try: - """ Don't lock the tbz2 file because the filesytem could be readonly or - shared by a cluster.""" - #tbz2_lock = portage.locks.lockfile(mytbz2, wantnewlockfile=1) - - mypkg = os.path.basename(mytbz2)[:-5] - xptbz2 = portage.xpak.tbz2(mytbz2) - mycat = xptbz2.getfile(_unicode_encode("CATEGORY", - encoding=_encodings['repo.content'])) - if not mycat: - writemsg(_("!!! CATEGORY info missing from info chunk, aborting...\n"), - noiselevel=-1) - return 1 - mycat = _unicode_decode(mycat, - encoding=_encodings['repo.content'], errors='replace') - mycat = mycat.strip() - - buildprefix = xptbz2.getfile("EPREFIX") - if not buildprefix: - writemsg("!!! EPREFIX info missing from info chunk, aborting...\n", - noiselevel=-1) - return 1 - buildprefix = buildprefix.strip() - - # These are the same directories that would be used at build time. - builddir = os.path.join( - mysettings["PORTAGE_TMPDIR"], "portage", mycat, mypkg) - catdir = os.path.dirname(builddir) - # if the prefix differs, we copy it to the image after extraction - if (buildprefix != EPREFIX): - pkgloc = os.path.join(builddir, "work") - else: - pkgloc = os.path.join(builddir, "image") - infloc = os.path.join(builddir, "build-info") - myebuild = os.path.join( - infloc, os.path.basename(mytbz2)[:-4] + "ebuild") - portage.util.ensure_dirs(os.path.dirname(catdir), - uid=portage_uid, gid=portage_gid, mode=0o70, mask=0) - catdir_lock = portage.locks.lockdir(catdir) - portage.util.ensure_dirs(catdir, - uid=portage_uid, gid=portage_gid, mode=0o70, mask=0) - try: - shutil.rmtree(builddir) - except (IOError, OSError) as e: - if e.errno != errno.ENOENT: - raise - del e - for mydir in (builddir, pkgloc, infloc): - portage.util.ensure_dirs(mydir, uid=portage_uid, - gid=portage_gid, mode=0o755) - writemsg_stdout(_(">>> Extracting info\n")) - xptbz2.unpackinfo(infloc) - mysettings.setcpv(mycat + "/" + mypkg, mydb=mydbapi) - # Store the md5sum in the vdb. - fp = open(_unicode_encode(os.path.join(infloc, 'BINPKGMD5')), 'w') - fp.write(str(portage.checksum.perform_md5(mytbz2))+"\n") - fp.close() - - # This gives bashrc users an opportunity to do various things - # such as remove binary packages after they're installed. - mysettings["PORTAGE_BINPKG_FILE"] = mytbz2 - mysettings.backup_changes("PORTAGE_BINPKG_FILE") - debug = mysettings.get("PORTAGE_DEBUG", "") == "1" - - # We want to install in "our" prefix, not the binary one - mysettings["EPREFIX"] = EPREFIX - # Store "our" prefix in the vdb. - fp = open(os.path.join(infloc, "EPREFIX"), "w") - fp.write(EPREFIX+"\n") - fp.close() - - # Eventually we'd like to pass in the saved ebuild env here. - retval = doebuild(myebuild, "setup", myroot, mysettings, debug=debug, - tree="bintree", mydbapi=mydbapi, vartree=vartree) - if retval != os.EX_OK: - writemsg(_("!!! Setup failed: %s\n") % retval, noiselevel=-1) - return retval - - writemsg_stdout(_(">>> Extracting %s\n") % mypkg) - retval = portage.process.spawn_bash( - "bzip2 -dqc -- '%s' | tar -xp -C '%s' -f -" % (mytbz2, pkgloc), - env=mysettings.environ()) - if retval != os.EX_OK: - writemsg(_("!!! Error Extracting '%s'\n") % mytbz2, noiselevel=-1) - return retval - #portage.locks.unlockfile(tbz2_lock) - #tbz2_lock = None - - # the extracted package put everything in buildprefix, so we - # just have to move it to the right EPREFIX - if buildprefix != EPREFIX: - writemsg_stdout(">>> Adjusting Prefix to %s\n" % EPREFIX) - b = os.path.join(pkgloc, buildprefix.lstrip(os.path.sep)) - i = os.path.join(builddir, "image", EPREFIX_LSTRIP) - # make sure the directory structure for EPREFIX is set up in - # the image, but avoid the last directory being there, - # otherwise chpathtool will complain - portage.util.ensure_dirs(i) - os.rmdir(i) - retval = portage.process.spawn_bash( - "chpathtool -q '%s' '%s' '%s' '%s'" % (b, i, buildprefix, EPREFIX), - env=mysettings.environ()) - if retval != os.EX_OK: - writemsg("!!! Adjusing to Prefix failed!\n", noiselevel=-1) - return retval - pkgloc = os.path.join(builddir, "image") - - mylink = dblink(mycat, mypkg, myroot, mysettings, vartree=vartree, - treetype="bintree", blockers=blockers) - retval = mylink.merge(pkgloc, infloc, myroot, myebuild, cleanup=0, - mydbapi=mydbapi, prev_mtimes=prev_mtimes) - did_merge_phase = True - success = retval == os.EX_OK - return retval - finally: - mysettings.pop("PORTAGE_BINPKG_FILE", None) - if tbz2_lock: - portage.locks.unlockfile(tbz2_lock) - if True: - if not did_merge_phase: - # The merge phase handles this already. Callers don't know how - # far this function got, so we have to call elog_process() here - # so that it's only called once. - from portage.elog import elog_process - elog_process(mycat + "/" + mypkg, mysettings) - try: - if success: - shutil.rmtree(builddir) - except (IOError, OSError) as e: - if e.errno != errno.ENOENT: - raise - del e - def deprecated_profile_check(settings=None): config_root = "/" if settings is not None: @@ -894,17 +655,6 @@ def deprecated_profile_check(settings=None): writemsg("\n\n", noiselevel=-1) return True -# gets virtual package settings -def getvirtuals(myroot): - """ - Calls portage.settings.getvirtuals(). - @deprecated: Use portage.settings.getvirtuals(). - """ - global settings - warnings.warn("portage.getvirtuals() is deprecated", - DeprecationWarning, stacklevel=2) - return settings.getvirtuals() - def commit_mtimedb(mydict=None, filename=None): if mydict is None: global mtimedb diff --git a/pym/portage/_deprecated.py b/pym/portage/_deprecated.py new file mode 100644 index 000000000..a2b5331d5 --- /dev/null +++ b/pym/portage/_deprecated.py @@ -0,0 +1,228 @@ +# Copyright 2010 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +from __future__ import print_function + +import errno +import shutil +import warnings + +import portage +from portage import os, _encodings, _unicode_decode, _unicode_encode +from portage.data import portage_gid, portage_uid +from portage.dep import dep_getkey +from portage.localization import _ +from portage.manifest import Manifest +from portage.util import writemsg, writemsg_stdout + +def digestParseFile(myfilename, mysettings=None): + """(filename) -- Parses a given file for entries matching: + + Ignores lines that don't start with a valid checksum identifier + and returns a dict with the filenames as keys and {checksumkey:checksum} + as the values. + DEPRECATED: this function is now only a compability wrapper for + portage.manifest.Manifest().""" + + warnings.warn("portage.digestParseFile() is deprecated", + DeprecationWarning, stacklevel=2) + + mysplit = myfilename.split(os.sep) + if mysplit[-2] == "files" and mysplit[-1].startswith("digest-"): + pkgdir = os.sep + os.sep.join(mysplit[:-2]).strip(os.sep) + elif mysplit[-1] == "Manifest": + pkgdir = os.sep + os.sep.join(mysplit[:-1]).strip(os.sep) + + return Manifest(pkgdir, None).getDigests() + +def dep_virtual(mysplit, mysettings): + "Does virtual dependency conversion" + warnings.warn("portage.dep_virtual() is deprecated", + DeprecationWarning, stacklevel=2) + newsplit=[] + myvirtuals = mysettings.getvirtuals() + for x in mysplit: + if isinstance(x, list): + newsplit.append(dep_virtual(x, mysettings)) + else: + mykey=dep_getkey(x) + mychoices = myvirtuals.get(mykey, None) + if mychoices: + if len(mychoices) == 1: + a = x.replace(mykey, dep_getkey(mychoices[0]), 1) + else: + if x[0]=="!": + # blocker needs "and" not "or(||)". + a=[] + else: + a=['||'] + for y in mychoices: + a.append(x.replace(mykey, dep_getkey(y), 1)) + newsplit.append(a) + else: + newsplit.append(x) + return newsplit + +def getvirtuals(myroot): + """ + Calls portage.settings.getvirtuals(). + @deprecated: Use portage.settings.getvirtuals(). + """ + warnings.warn("portage.getvirtuals() is deprecated", + DeprecationWarning, stacklevel=2) + return portage.settings.getvirtuals() + +def pkgmerge(mytbz2, myroot, mysettings, mydbapi=None, + vartree=None, prev_mtimes=None, blockers=None): + """will merge a .tbz2 file, returning a list of runtime dependencies + that must be satisfied, or None if there was a merge error. This + code assumes the package exists.""" + + warnings.warn("portage.pkgmerge() is deprecated", + DeprecationWarning, stacklevel=2) + + if mydbapi is None: + mydbapi = portage.db[myroot]["bintree"].dbapi + if vartree is None: + vartree = portage.db[myroot]["vartree"] + if mytbz2[-5:]!=".tbz2": + print(_("!!! Not a .tbz2 file")) + return 1 + + tbz2_lock = None + mycat = None + mypkg = None + did_merge_phase = False + success = False + try: + """ Don't lock the tbz2 file because the filesytem could be readonly or + shared by a cluster.""" + #tbz2_lock = portage.locks.lockfile(mytbz2, wantnewlockfile=1) + + mypkg = os.path.basename(mytbz2)[:-5] + xptbz2 = portage.xpak.tbz2(mytbz2) + mycat = xptbz2.getfile(_unicode_encode("CATEGORY", + encoding=_encodings['repo.content'])) + if not mycat: + writemsg(_("!!! CATEGORY info missing from info chunk, aborting...\n"), + noiselevel=-1) + return 1 + mycat = _unicode_decode(mycat, + encoding=_encodings['repo.content'], errors='replace') + mycat = mycat.strip() + + buildprefix = xptbz2.getfile("EPREFIX") + if not buildprefix: + writemsg("!!! EPREFIX info missing from info chunk, aborting...\n", + noiselevel=-1) + return 1 + buildprefix = buildprefix.strip() + + # These are the same directories that would be used at build time. + builddir = os.path.join( + mysettings["PORTAGE_TMPDIR"], "portage", mycat, mypkg) + catdir = os.path.dirname(builddir) + # if the prefix differs, we copy it to the image after extraction + if (buildprefix != EPREFIX): + pkgloc = os.path.join(builddir, "work") + else: + pkgloc = os.path.join(builddir, "image") + infloc = os.path.join(builddir, "build-info") + myebuild = os.path.join( + infloc, os.path.basename(mytbz2)[:-4] + "ebuild") + portage.util.ensure_dirs(os.path.dirname(catdir), + uid=portage_uid, gid=portage_gid, mode=0o70, mask=0) + portage.util.ensure_dirs(catdir, + uid=portage_uid, gid=portage_gid, mode=0o70, mask=0) + try: + shutil.rmtree(builddir) + except (IOError, OSError) as e: + if e.errno != errno.ENOENT: + raise + del e + for mydir in (builddir, pkgloc, infloc): + portage.util.ensure_dirs(mydir, uid=portage_uid, + gid=portage_gid, mode=0o755) + writemsg_stdout(_(">>> Extracting info\n")) + xptbz2.unpackinfo(infloc) + mysettings.setcpv(mycat + "/" + mypkg, mydb=mydbapi) + # Store the md5sum in the vdb. + fp = open(_unicode_encode(os.path.join(infloc, 'BINPKGMD5')), 'w') + fp.write(str(portage.checksum.perform_md5(mytbz2))+"\n") + fp.close() + + # This gives bashrc users an opportunity to do various things + # such as remove binary packages after they're installed. + mysettings["PORTAGE_BINPKG_FILE"] = mytbz2 + mysettings.backup_changes("PORTAGE_BINPKG_FILE") + debug = mysettings.get("PORTAGE_DEBUG", "") == "1" + + # We want to install in "our" prefix, not the binary one + mysettings["EPREFIX"] = EPREFIX + # Store "our" prefix in the vdb. + fp = open(os.path.join(infloc, "EPREFIX"), "w") + fp.write(EPREFIX+"\n") + fp.close() + + # Eventually we'd like to pass in the saved ebuild env here. + retval = portage.doebuild(myebuild, "setup", myroot, mysettings, debug=debug, + tree="bintree", mydbapi=mydbapi, vartree=vartree) + if retval != os.EX_OK: + writemsg(_("!!! Setup failed: %s\n") % retval, noiselevel=-1) + return retval + + writemsg_stdout(_(">>> Extracting %s\n") % mypkg) + retval = portage.process.spawn_bash( + "bzip2 -dqc -- '%s' | tar -xp -C '%s' -f -" % (mytbz2, pkgloc), + env=mysettings.environ()) + if retval != os.EX_OK: + writemsg(_("!!! Error Extracting '%s'\n") % mytbz2, noiselevel=-1) + return retval + #portage.locks.unlockfile(tbz2_lock) + #tbz2_lock = None + + # the extracted package put everything in buildprefix, so we + # just have to move it to the right EPREFIX + if buildprefix != EPREFIX: + writemsg_stdout(">>> Adjusting Prefix to %s\n" % EPREFIX) + b = os.path.join(pkgloc, buildprefix.lstrip(os.path.sep)) + i = os.path.join(builddir, "image", EPREFIX_LSTRIP) + # make sure the directory structure for EPREFIX is set up in + # the image, but avoid the last directory being there, + # otherwise chpathtool will complain + portage.util.ensure_dirs(i) + os.rmdir(i) + retval = portage.process.spawn_bash( + "chpathtool -q '%s' '%s' '%s' '%s'" % (b, i, buildprefix, EPREFIX), + env=mysettings.environ()) + if retval != os.EX_OK: + writemsg("!!! Adjusing to Prefix failed!\n", noiselevel=-1) + return retval + pkgloc = os.path.join(builddir, "image") + + mylink = dblink(mycat, mypkg, myroot, mysettings, vartree=vartree, + treetype="bintree", blockers=blockers) + retval = mylink.merge(pkgloc, infloc, myroot, myebuild, cleanup=0, + mydbapi=mydbapi, prev_mtimes=prev_mtimes) + did_merge_phase = True + success = retval == os.EX_OK + return retval + finally: + mysettings.pop("PORTAGE_BINPKG_FILE", None) + if tbz2_lock: + portage.locks.unlockfile(tbz2_lock) + if True: + if not did_merge_phase: + # The merge phase handles this already. Callers don't know how + # far this function got, so we have to call elog_process() here + # so that it's only called once. + from portage.elog import elog_process + elog_process(mycat + "/" + mypkg, mysettings) + try: + if success: + shutil.rmtree(builddir) + except (IOError, OSError) as e: + if e.errno != errno.ENOENT: + raise + del e diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py index 54d3877b2..e3e53a432 100644 --- a/pym/portage/dbapi/__init__.py +++ b/pym/portage/dbapi/__init__.py @@ -8,7 +8,7 @@ import re import portage portage.proxy.lazyimport.lazyimport(globals(), - 'portage.dbapi.dep_expand:_dep_expand', + 'portage.dbapi.dep_expand:dep_expand@_dep_expand', 'portage.dep:match_from_list', 'portage.locks:unlockfile', 'portage.output:colorize', diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 0cbcd88b1..c04caf940 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -5475,6 +5475,38 @@ class dblink(object): "Is this a regular package (does it have a CATEGORY file? A dblink can be virtual *and* regular)" return os.path.exists(os.path.join(self.dbdir, "CATEGORY")) +def merge(mycat, mypkg, pkgloc, infloc, myroot, mysettings, myebuild=None, + mytree=None, mydbapi=None, vartree=None, prev_mtimes=None, blockers=None, + scheduler=None): + if not os.access(myroot + EPREFIX_LSTRIP, os.W_OK): + writemsg(_("Permission denied: access('%s', W_OK)\n") % myroot + EPREFIX_LSTRIP, + noiselevel=-1) + return errno.EACCES + mylink = dblink(mycat, mypkg, myroot, mysettings, treetype=mytree, + vartree=vartree, blockers=blockers, scheduler=scheduler) + return mylink.merge(pkgloc, infloc, myroot, myebuild, + mydbapi=mydbapi, prev_mtimes=prev_mtimes) + +def unmerge(cat, pkg, myroot, mysettings, mytrimworld=1, vartree=None, + ldpath_mtimes=None, scheduler=None): + mylink = dblink(cat, pkg, myroot, mysettings, treetype="vartree", + vartree=vartree, scheduler=scheduler) + vartree = mylink.vartree + try: + mylink.lockdb() + if mylink.exists(): + vartree.dbapi.plib_registry.load() + vartree.dbapi.plib_registry.pruneNonExisting() + retval = mylink.unmerge(trimworld=mytrimworld, cleanup=1, + ldpath_mtimes=ldpath_mtimes) + if retval == os.EX_OK: + mylink.delete() + return retval + return os.EX_OK + finally: + vartree.dbapi.linkmap._clear_cache() + mylink.unlockdb() + def write_contents(contents, root, f): """ Write contents to any file like object. The file will be left open. diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py index 941cb4188..79ba892e6 100644 --- a/pym/repoman/checks.py +++ b/pym/repoman/checks.py @@ -35,17 +35,13 @@ class PhaseCheck(LineCheck): ignore_line = re.compile(r'(^\s*#)') func_end_re = re.compile(r'^\}$') + phases_re = re.compile('(%s)' % '|'.join(( + 'pkg_pretend', 'pkg_setup', 'src_unpack', 'src_prepare', + 'src_configure', 'src_compile', 'src_test', 'src_install', + 'pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm', + 'pkg_config'))) in_phase = '' - def __init__(self): - self.phases = ('pkg_pretend', 'pkg_setup', 'src_unpack', 'src_prepare', 'src_configure', 'src_compile', - 'src_test', 'src_install', 'pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm', 'pkg_config') - phase_re = '(' - for phase in self.phases: - phase_re += phase + '|' - phase_re = phase_re[:-1] + ')' - self.phases_re = re.compile(phase_re) - def check(self, num, line): m = self.phases_re.match(line) if m is not None: