Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
@returns: boolean
'''
try:
myf = repoman_popen(
"bzr ls -v --kind=file " +
portage._shell_quote(checkdir))
myl = myf.readlines()
myf.close()
except IOError:
raise
for l in myl:
if l[1:2] == "?":
continue
l = l.split()[-1]
if l[-7:] == ".ebuild":
self.eadded.append(os.path.basename(l[:-7]))
return True
EAPI metadata.
The myroot and use_cache parameters are unused.
"""
if settings is None:
raise TypeError("settings argument is required")
if db is None:
raise TypeError("db argument is required")
mysettings = settings
mydbapi = db
ebuild_path = os.path.abspath(myebuild)
pkg_dir = os.path.dirname(ebuild_path)
mytree = os.path.dirname(os.path.dirname(pkg_dir))
mypv = os.path.basename(ebuild_path)[:-7]
mysplit = _pkgsplit(mypv, eapi=mysettings.configdict["pkg"].get("EAPI"))
if mysplit is None:
raise IncorrectParameter(
_("Invalid ebuild path: '%s'") % myebuild)
if mysettings.mycpv is not None and \
mysettings.configdict["pkg"].get("PF") == mypv and \
"CATEGORY" in mysettings.configdict["pkg"]:
# Assume that PF is enough to assume that we've got
# the correct CATEGORY, though this is not really
# a solid assumption since it's possible (though
# unlikely) that two packages in different
# categories have the same PF. Callers should call
# setcpv or create a clean clone of a locked config
# instance in order to ensure that this assumption
# does not fail like in bug #408817.
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()
# 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)
pkgloc = os.path.join(builddir, "image")
eapi = read_corresponding_eapi_file(file_name,
default=eapi_default)
extended_syntax = eapi is None and user_config
if extended_syntax:
ret = ExtendedAtomDict(dict)
else:
ret = {}
file_dict = grabdict_package(file_name, recursive=recursive,
allow_wildcard=extended_syntax, allow_repo=extended_syntax,
verify_eapi=(not extended_syntax), eapi=eapi,
eapi_default=eapi_default, allow_build_id=allow_build_id,
allow_use=False)
if eapi is not None and eapi_filter is not None and not eapi_filter(eapi):
if file_dict:
writemsg(_("--- EAPI '%s' does not support '%s': '%s'\n") %
(eapi, os.path.basename(file_name), file_name),
noiselevel=-1)
return ret
useflag_re = _get_useflag_re(eapi)
for k, v in file_dict.items():
useflags = []
use_expand_prefix = ''
for prefixed_useflag in v:
if extended_syntax and prefixed_useflag == "\n":
use_expand_prefix = ""
continue
if extended_syntax and prefixed_useflag[-1] == ":":
use_expand_prefix = prefixed_useflag[:-1].lower() + "_"
continue
if prefixed_useflag[:1] == "-":
useflag = use_expand_prefix + prefixed_useflag[1:]
@type eapi: str
@param eapi_default: the default EAPI which applies if the
current profile node does not define a local EAPI
@type eapi_default: str
@rtype: tuple
@return: collection of USE flags
"""
ret = []
lines = grabfile(file_name, recursive=recursive)
if eapi is None:
eapi = read_corresponding_eapi_file(
file_name, default=eapi_default)
if eapi_filter is not None and not eapi_filter(eapi):
if lines:
writemsg(_("--- EAPI '%s' does not support '%s': '%s'\n") %
(eapi, os.path.basename(file_name), file_name),
noiselevel=-1)
return ()
useflag_re = _get_useflag_re(eapi)
for prefixed_useflag in lines:
if prefixed_useflag[:1] == "-":
useflag = prefixed_useflag[1:]
else:
useflag = prefixed_useflag
if useflag_re.match(useflag) is None:
writemsg(_("--- Invalid USE flag in '%s': '%s'\n") %
(file_name, prefixed_useflag), noiselevel=-1)
else:
ret.append(prefixed_useflag)
return tuple(ret)
return (False, None)
if size is not None and size != st.st_size:
return (False, st)
if not digests:
if size is not None:
eout.ebegin(_("%s size ;-)") % os.path.basename(filename))
eout.eend(0)
elif st.st_size == 0:
# Zero-byte distfiles are always invalid.
return (False, st)
else:
digests = _filter_unaccelarated_hashes(digests)
if hash_filter is not None:
digests = _apply_hash_filter(digests, hash_filter)
if _check_digests(filename, digests, show_errors=show_errors):
eout.ebegin("%s %s ;-)" % (os.path.basename(filename),
" ".join(sorted(digests))))
eout.eend(0)
else:
return (False, st)
return (True, st)
def check(self, checkdir, checkdir_relative, xpkg):
'''Perform the git status check
@param checkdir: string of the directory being checked
@param checkdir_relative: string of the relative directory being checked
@param xpkg: string of the package being checked
@returns: boolean
'''
with repoman_popen(
"git ls-files --others %s" %
(portage._shell_quote(checkdir_relative),)) as myf:
for l in myf:
if l[:-1][-7:] == ".ebuild":
self.qatracker.add_error(
"ebuild.notadded",
os.path.join(xpkg, os.path.basename(l[:-1])))
return True
pkgindex = self._load_pkgindex()
if not self._pkgindex_version_supported(pkgindex):
pkgindex = self._new_pkgindex()
metadata = {}
basename_index = {}
for d in pkgindex.packages:
cpv = _pkg_str(d["CPV"], metadata=d,
settings=self.settings, db=self.dbapi)
d["CPV"] = cpv
metadata[_instance_key(cpv)] = d
path = d.get("PATH")
if not path:
path = cpv + ".tbz2"
if reindex:
basename = os.path.basename(path)
basename_index.setdefault(basename, []).append(d)
else:
instance_key = _instance_key(cpv)
pkg_paths[instance_key] = path
self.dbapi.cpv_inject(cpv)
update_pkgindex = False
for mydir, file_names in dir_files.items():
try:
mydir = _unicode_decode(mydir,
encoding=_encodings["fs"], errors="strict")
except UnicodeDecodeError:
continue
for myfile in file_names:
try:
myfile = _unicode_decode(myfile,
def _display_success(self):
stdout_orig = sys.stdout
stderr_orig = sys.stderr
global_havecolor = portage.output.havecolor
out = io.StringIO()
try:
sys.stdout = out
sys.stderr = out
if portage.output.havecolor:
portage.output.havecolor = not self.background
path = self._pkg_path
if path.endswith(".partial"):
path = path[:-len(".partial")]
eout = EOutput()
eout.ebegin("%s %s ;-)" % (os.path.basename(path),
" ".join(sorted(self._digests))))
eout.eend(0)
finally:
sys.stdout = stdout_orig
sys.stderr = stderr_orig
portage.output.havecolor = global_havecolor
self.scheduler.output(out.getvalue(), log_path=self.logfile,
background=self.background)
nosandbox = True
sesandbox = settings.selinux_enabled() and \
"sesandbox" in features
droppriv = "userpriv" in features and \
"userpriv" not in restrict and \
secpass >= 2
fakeroot = "fakeroot" in features
portage_bin_path = settings["PORTAGE_BIN_PATH"]
ebuild_sh_binary = os.path.join(portage_bin_path,
os.path.basename(EBUILD_SH_BINARY))
misc_sh_binary = os.path.join(portage_bin_path,
os.path.basename(MISC_SH_BINARY))
ebuild_sh = _shell_quote(ebuild_sh_binary) + " %s"
misc_sh = _shell_quote(misc_sh_binary) + " __dyn_%s"
# args are for the to spawn function
actionmap = {
"pretend": {"cmd":ebuild_sh, "args":{"droppriv":0, "free":1, "sesandbox":0, "fakeroot":0}},
"setup": {"cmd":ebuild_sh, "args":{"droppriv":0, "free":1, "sesandbox":0, "fakeroot":0}},
"unpack": {"cmd":ebuild_sh, "args":{"droppriv":droppriv, "free":0, "sesandbox":sesandbox, "fakeroot":0}},
"prepare": {"cmd":ebuild_sh, "args":{"droppriv":droppriv, "free":0, "sesandbox":sesandbox, "fakeroot":0}},
"configure":{"cmd":ebuild_sh, "args":{"droppriv":droppriv, "free":nosandbox, "sesandbox":sesandbox, "fakeroot":0}},
"compile": {"cmd":ebuild_sh, "args":{"droppriv":droppriv, "free":nosandbox, "sesandbox":sesandbox, "fakeroot":0}},
"test": {"cmd":ebuild_sh, "args":{"droppriv":droppriv, "free":nosandbox, "sesandbox":sesandbox, "fakeroot":0}},
"install": {"cmd":ebuild_sh, "args":{"droppriv":0, "free":0, "sesandbox":sesandbox, "fakeroot":fakeroot}},
"instprep": {"cmd":misc_sh, "args":{"droppriv":0, "free":0, "sesandbox":sesandbox, "fakeroot":fakeroot}},
"rpm": {"cmd":misc_sh, "args":{"droppriv":0, "free":0, "sesandbox":0, "fakeroot":fakeroot}},
"package": {"cmd":misc_sh, "args":{"droppriv":0, "free":0, "sesandbox":0, "fakeroot":fakeroot}},