Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def gen_label(base, label):
"""if supplied label is a path, generate a unique label based upon label, and supplied base path"""
if label.find(os.path.sep) == -1:
return label
label = label.strip("\"").strip("'")
label = os.path.join(*(label.rstrip(os.path.sep).split(os.path.sep)))
tail = os.path.split(label)[1]
return "%s-%X" % (tail, abs(label.__hash__()))
if x.startswith(".") or x.endswith("~") or x.endswith(".bak"):
continue
templist.append(x)
fns = templist
del templist
space_separated = set(["CONFIG_PROTECT", "CONFIG_PROTECT_MASK"])
colon_separated = set(["ADA_INCLUDE_PATH", "ADA_OBJECTS_PATH",
"CLASSPATH", "INFODIR", "INFOPATH", "KDEDIRS", "LDPATH", "MANPATH",
"PATH", "PKG_CONFIG_PATH", "PRELINK_PATH", "PRELINK_PATH_MASK",
"PYTHONPATH", "ROOTPATH"])
config_list = []
for x in fns:
file_path = os.path.join(envd_dir, x)
try:
myconfig = getconfig(file_path, expand=False)
except ParseError as e:
writemsg("!!! '%s'\n" % str(e), noiselevel=-1)
del e
continue
if myconfig is None:
# broken symlink or file removed by a concurrent process
writemsg("!!! File Not Found: '%s'\n" % file_path, noiselevel=-1)
continue
config_list.append(myconfig)
if "SPACE_SEPARATED" in myconfig:
space_separated.update(myconfig["SPACE_SEPARATED"].split())
del myconfig["SPACE_SEPARATED"]
if "COLON_SEPARATED" in myconfig:
dodir(destdir)
dofile(fullpath, os.path.join(destdir, basename))
elif warn_on_skipped_files and ext not in unwarned_skipped_extensions and basename not in unwarned_skipped_files:
skipped_files.append(fullpath)
elif options.recurse and os.path.isdir(fullpath) and \
basename not in options.disallowed_dirs:
for i in _os.listdir(_unicode_encode(fullpath)):
try:
i = _unicode_decode(i, errors='strict')
except UnicodeDecodeError:
writemsg('dohtml: argument is not encoded as UTF-8: %s\n' %
_unicode_decode(i), noiselevel=-1)
sys.exit(1)
pfx = basename
if prefix:
pfx = os.path.join(prefix, pfx)
install(i, dirname, options, pfx)
elif not options.recurse and os.path.isdir(fullpath):
global skipped_directories
skipped_directories.append(fullpath)
return False
else:
return False
return True
inst_gid = int(mysettings["PORTAGE_INST_GID"])
_preinst_bsdflags(mysettings)
destdir = mysettings["D"]
ed_len = len(mysettings["ED"])
unicode_errors = []
desktop_file_validate = \
portage.process.find_binary("desktop-file-validate") is not None
xdg_dirs = mysettings.get('XDG_DATA_DIRS', '/usr/share').split(':')
xdg_dirs = tuple(os.path.join(i, "applications") + os.sep
for i in xdg_dirs if i)
qa_desktop_file = ""
try:
with io.open(_unicode_encode(os.path.join(
mysettings["PORTAGE_BUILDDIR"],
"build-info", "QA_DESKTOP_FILE"),
encoding=_encodings['fs'], errors='strict'),
mode='r', encoding=_encodings['repo.content'],
errors='replace') as f:
qa_desktop_file = f.read()
except IOError as e:
if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
qa_desktop_file = qa_desktop_file.split()
if qa_desktop_file:
if len(qa_desktop_file) > 1:
qa_desktop_file = "|".join("(%s)" % x for x in qa_desktop_file)
qa_desktop_file = "^(%s)$" % qa_desktop_file
else:
def scan_pkgs(self, can_force):
for xpkg in self.effective_scanlist:
xpkg_continue = False
# ebuilds and digests added to cvs respectively.
logging.info("checking package %s", xpkg)
# save memory by discarding xmatch caches from previous package(s)
self.caches['arch_xmatch'].clear()
catdir, pkgdir = xpkg.split("/")
checkdir = self.repo_settings.repodir + "/" + xpkg
checkdir_relative = ""
if self.repolevel < 3:
checkdir_relative = os.path.join(pkgdir, checkdir_relative)
if self.repolevel < 2:
checkdir_relative = os.path.join(catdir, checkdir_relative)
checkdir_relative = os.path.join(".", checkdir_relative)
# Run the status check
if self.kwargs['checks']['ebuild_notadded']:
self.vcs_settings.status.check(checkdir, checkdir_relative, xpkg)
if self.generate_manifest:
if not manifest.Manifest(**self.kwargs).update_manifest(checkdir):
self.qatracker.add_error("manifest.bad", os.path.join(xpkg, 'Manifest'))
if self.options.mode == 'manifest':
continue
checkdirlist = os.listdir(checkdir)
dynamic_data = {
'changelog_modified': False,
'checkdirlist': ExtendedFuture(checkdirlist),
'checkdir': checkdir,
def _chpathtool_exit(self, chpathtool):
if self._final_exit(chpathtool) != os.EX_OK:
self._writemsg_level("!!! Error Adjusting Prefix to %s\n" %
(self.settings["EPREFIX"],),
noiselevel=-1, level=logging.ERROR)
self._async_unlock_builddir(returncode=self.returncode)
return
# We want to install in "our" prefix, not the binary one
with io.open(_unicode_encode(os.path.join(self._infloc, "EPREFIX"),
encoding=_encodings['fs'], errors='strict'), mode='w',
encoding=_encodings['repo.content'], errors='strict') as f:
f.write(self.settings["EPREFIX"] + "\n")
# Move the files to the correct location for merge.
image_tmp_dir = os.path.join(
self.settings["PORTAGE_BUILDDIR"], "image_tmp")
build_d = os.path.join(self.settings["D"],
self._build_prefix.lstrip(os.sep))
if not os.path.isdir(build_d):
# Assume this is a virtual package or something.
shutil.rmtree(self._image_dir)
ensure_dirs(self.settings["ED"])
else:
os.rename(build_d, image_tmp_dir)
shutil.rmtree(self._image_dir)
ensure_dirs(os.path.dirname(self.settings["ED"].rstrip(os.sep)))
os.rename(image_tmp_dir, self.settings["ED"])
self.wait()
def validate(self):
"""Validate miscellaneous settings and display warnings if necessary.
(This code was previously in the global scope of portage.py)"""
groups = self.get("ACCEPT_KEYWORDS", "").split()
archlist = self.archlist()
if not archlist:
writemsg(_("--- 'profiles/arch.list' is empty or "
"not available. Empty ebuild repository?\n"), noiselevel=1)
else:
for group in groups:
if group not in archlist and \
not (group.startswith("-") and group[1:] in archlist) and \
group not in ("*", "~*", "**"):
writemsg(_("!!! INVALID ACCEPT_KEYWORDS: %s\n") % str(group),
noiselevel=-1)
profile_broken = False
# getmaskingstatus requires ARCH for ACCEPT_KEYWORDS support
arch = self.get('ARCH')
if not self.profile_path or not arch:
profile_broken = True
else:
# If any one of these files exists, then
# the profile is considered valid.
for x in ("make.defaults", "parent",
"packages", "use.force", "use.mask"):
if exists_raise_eaccess(os.path.join(self.profile_path, x)):
break
else:
# start with either 'ro' or 'rw'
# example line:
# 14 1 8:3 / / rw,noatime - ext3 /dev/root rw,errors=continue,commit=5,barrier=1,data=writeback
# _dir ^ ^ attr1 ^ attr2
# there can be a variable number of fields
# to the left of the ' - ', after the attr's, so split it there
mount = line.split(' - ', 1)
_dir, attr1 = mount[0].split()[4:6]
attr2 = mount[1].split()[2]
if attr1.startswith('ro') or attr2.startswith('ro'):
ro_filesystems.add(_dir)
# If /proc/self/mountinfo can't be read, assume that there are no RO
# filesystems and return.
except EnvironmentError:
writemsg_level(_("!!! /proc/self/mountinfo cannot be read"),
level=logging.WARNING, noiselevel=-1)
return []
ro_devs = {}
for x in ro_filesystems:
try:
ro_devs[os.stat(x).st_dev] = x
except OSError:
pass
ro_filesystems.clear()
for x in set(dir_list):
try:
dev = os.stat(x).st_dev
except OSError:
pass
try:
error_msg = str(e)
except UnicodeDecodeError as uerror:
error_msg = str(uerror.object,
encoding='utf_8', errors='replace')
writemsg("!!! %s\n\n" % error_msg)
del e
pkgindex = None
if proc is not None:
if proc.poll() is None:
proc.kill()
proc.wait()
proc = None
if tmp_filename is not None:
try:
os.unlink(tmp_filename)
except OSError:
pass
if pkgindex is rmt_idx:
pkgindex.modified = False # don't update the header
pkgindex.header["DOWNLOAD_TIMESTAMP"] = "%d" % time.time()
try:
ensure_dirs(os.path.dirname(pkgindex_file))
f = atomic_ofstream(pkgindex_file)
pkgindex.write(f)
f.close()
except (IOError, PortageException):
if os.access(os.path.dirname(pkgindex_file), os.W_OK):
raise
# The current user doesn't have permission to cache the
# file, but that's alright.
if pkgindex:
def _calc_changelog(ebuildpath,current,next): # pylint: disable=redefined-builtin
if ebuildpath == None or not os.path.exists(ebuildpath):
return []
current = '-'.join(catpkgsplit(current)[1:])
if current.endswith('-r0'):
current = current[:-3]
next = '-'.join(catpkgsplit(next)[1:])
if next.endswith('-r0'):
next = next[:-3]
changelogdir = os.path.dirname(ebuildpath)
changelogs = ['ChangeLog']
# ChangeLog-YYYY (see bug #389611)
changelogs.extend(sorted((fn for fn in os.listdir(changelogdir)
if fn.startswith('ChangeLog-')), reverse=True))
divisions = []
found_current = False
for fn in changelogs:
changelogpath = os.path.join(changelogdir, fn)
try:
with io.open(_unicode_encode(changelogpath,
encoding=_encodings['fs'], errors='strict'),
mode='r', encoding=_encodings['repo.content'],
errors='replace') as f:
changelog = f.read()
except EnvironmentError:
return []
for node in _find_changelog_tags(changelog):
if node[0] == current: