本文整理汇总了Python中portage.os.symlink函数的典型用法代码示例。如果您正苦于以下问题:Python symlink函数的具体用法?Python symlink怎么用?Python symlink使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了symlink函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _prepare_fake_distdir
def _prepare_fake_distdir(settings, alist):
orig_distdir = settings["DISTDIR"]
edpath = os.path.join(settings["PORTAGE_BUILDDIR"], "distdir")
portage.util.ensure_dirs(edpath, gid=portage_gid, mode=0o755)
# Remove any unexpected files or directories.
for x in os.listdir(edpath):
symlink_path = os.path.join(edpath, x)
st = os.lstat(symlink_path)
if x in alist and stat.S_ISLNK(st.st_mode):
continue
if stat.S_ISDIR(st.st_mode):
shutil.rmtree(symlink_path)
else:
os.unlink(symlink_path)
# Check for existing symlinks and recreate if necessary.
for x in alist:
symlink_path = os.path.join(edpath, x)
target = os.path.join(orig_distdir, x)
try:
link_target = os.readlink(symlink_path)
except OSError:
os.symlink(target, symlink_path)
else:
if link_target != target:
os.unlink(symlink_path)
os.symlink(target, symlink_path)
示例2: _archive_copy
def _archive_copy(src_st, src_path, dest_path):
"""
Copy file from src_path to dest_path. Regular files and symlinks
are supported. If an EnvironmentError occurs, then it is logged
to stderr.
@param src_st: source file lstat result
@type src_st: posix.stat_result
@param src_path: source file path
@type src_path: str
@param dest_path: destination file path
@type dest_path: str
"""
# Remove destination file in order to ensure that the following
# symlink or copy2 call won't fail (see bug #535850).
try:
os.unlink(dest_path)
except OSError:
pass
try:
if stat.S_ISLNK(src_st.st_mode):
os.symlink(os.readlink(src_path), dest_path)
else:
shutil.copy2(src_path, dest_path)
except EnvironmentError as e:
portage.util.writemsg(
_('dispatch-conf: Error copying %(src_path)s to '
'%(dest_path)s: %(reason)s\n') % {
"src_path": src_path,
"dest_path": dest_path,
"reason": e
}, noiselevel=-1)
示例3: _prepare_fake_filesdir
def _prepare_fake_filesdir(settings):
real_filesdir = settings["O"]+"/files"
symlink_path = settings["FILESDIR"]
try:
link_target = os.readlink(symlink_path)
except OSError:
os.symlink(real_filesdir, symlink_path)
else:
if link_target != real_filesdir:
os.unlink(symlink_path)
os.symlink(real_filesdir, symlink_path)
示例4: modify_files
def modify_files(dir_path):
for name in os.listdir(dir_path):
path = os.path.join(dir_path, name)
st = os.lstat(path)
if stat.S_ISREG(st.st_mode):
with io.open(path, mode='a',
encoding=_encodings["stdio"]) as f:
f.write("modified at %d\n" % time.time())
elif stat.S_ISLNK(st.st_mode):
old_dest = os.readlink(path)
os.unlink(path)
os.symlink(old_dest +
" modified at %d" % time.time(), path)
示例5: _create_symlink
def _create_symlink(self, cpv):
"""Create a ${PKGDIR}/${CATEGORY}/${PF}.tbz2 symlink (and
${PKGDIR}/${CATEGORY} directory, if necessary). Any file that may
exist in the location of the symlink will first be removed."""
mycat, mypkg = catsplit(cpv)
full_path = os.path.join(self.pkgdir, mycat, mypkg + ".tbz2")
self._ensure_dir(os.path.dirname(full_path))
try:
os.unlink(full_path)
except OSError as e:
if e.errno != errno.ENOENT:
raise
del e
os.symlink(os.path.join("..", "All", mypkg + ".tbz2"), full_path)
示例6: commit_update
def commit_update(self):
update_location = self.current_update
self._update_location = None
try:
snapshots = [int(name) for name in os.listdir(self._snapshots_dir)]
except OSError:
snapshots = []
portage.util.ensure_dirs(self._snapshots_dir)
portage.util.apply_stat_permissions(self._snapshots_dir,
os.stat(self._storage_location))
if snapshots:
new_id = max(snapshots) + 1
else:
new_id = 1
os.rename(update_location, os.path.join(self._snapshots_dir, str(new_id)))
new_symlink = self._latest_symlink + '.new'
try:
os.unlink(new_symlink)
except OSError:
pass
os.symlink('snapshots/{}'.format(new_id), new_symlink)
os.rename(new_symlink, self._latest_symlink)
try:
user_location_correct = os.path.samefile(self._user_location, self._latest_symlink)
except OSError:
user_location_correct = False
if not user_location_correct:
new_symlink = self._user_location + '.new'
try:
os.unlink(new_symlink)
except OSError:
pass
os.symlink(self._latest_symlink, new_symlink)
os.rename(new_symlink, self._user_location)
coroutine_return()
yield None
示例7: _prepare_workdir
#.........这里部分代码省略.........
except ValueError as e:
if len(str(e)) > 0:
writemsg("%s\n" % e)
writemsg(_("!!! Unable to parse PORTAGE_WORKDIR_MODE='%s', using %s.\n") % \
(mysettings["PORTAGE_WORKDIR_MODE"], oct(workdir_mode)))
mysettings["PORTAGE_WORKDIR_MODE"] = oct(workdir_mode).replace('o', '')
try:
apply_secpass_permissions(mysettings["WORKDIR"],
uid=portage_uid, gid=portage_gid, mode=workdir_mode)
except FileNotFound:
pass # ebuild.sh will create it
if mysettings.get("PORTAGE_LOGDIR", "") == "":
while "PORTAGE_LOGDIR" in mysettings:
del mysettings["PORTAGE_LOGDIR"]
if "PORTAGE_LOGDIR" in mysettings:
try:
modified = ensure_dirs(mysettings["PORTAGE_LOGDIR"])
if modified:
# Only initialize group/mode if the directory doesn't
# exist, so that we don't override permissions if they
# were previously set by the administrator.
# NOTE: These permissions should be compatible with our
# default logrotate config as discussed in bug 374287.
apply_secpass_permissions(mysettings["PORTAGE_LOGDIR"],
uid=portage_uid, gid=portage_gid, mode=0o2770)
except PortageException as e:
writemsg("!!! %s\n" % str(e), noiselevel=-1)
writemsg(_("!!! Permission issues with PORTAGE_LOGDIR='%s'\n") % \
mysettings["PORTAGE_LOGDIR"], noiselevel=-1)
writemsg(_("!!! Disabling logging.\n"), noiselevel=-1)
while "PORTAGE_LOGDIR" in mysettings:
del mysettings["PORTAGE_LOGDIR"]
compress_log_ext = ''
if 'compress-build-logs' in mysettings.features:
compress_log_ext = '.gz'
logdir_subdir_ok = False
if "PORTAGE_LOGDIR" in mysettings and \
os.access(mysettings["PORTAGE_LOGDIR"], os.W_OK):
logdir = normalize_path(mysettings["PORTAGE_LOGDIR"])
logid_path = os.path.join(mysettings["PORTAGE_BUILDDIR"], ".logid")
if not os.path.exists(logid_path):
open(_unicode_encode(logid_path), 'w').close()
logid_time = _unicode_decode(time.strftime("%Y%m%d-%H%M%S",
time.gmtime(os.stat(logid_path).st_mtime)),
encoding=_encodings['content'], errors='replace')
if "split-log" in mysettings.features:
log_subdir = os.path.join(logdir, "build", mysettings["CATEGORY"])
mysettings["PORTAGE_LOG_FILE"] = os.path.join(
log_subdir, "%s:%s.log%s" %
(mysettings["PF"], logid_time, compress_log_ext))
else:
log_subdir = logdir
mysettings["PORTAGE_LOG_FILE"] = os.path.join(
logdir, "%s:%s:%s.log%s" % \
(mysettings["CATEGORY"], mysettings["PF"], logid_time,
compress_log_ext))
if log_subdir is logdir:
logdir_subdir_ok = True
else:
try:
_ensure_log_subdirs(logdir, log_subdir)
except PortageException as e:
writemsg("!!! %s\n" % (e,), noiselevel=-1)
if os.access(log_subdir, os.W_OK):
logdir_subdir_ok = True
else:
writemsg("!!! %s: %s\n" %
(_("Permission Denied"), log_subdir), noiselevel=-1)
tmpdir_log_path = os.path.join(
mysettings["T"], "build.log%s" % compress_log_ext)
if not logdir_subdir_ok:
# NOTE: When sesandbox is enabled, the local SELinux security policies
# may not allow output to be piped out of the sesandbox domain. The
# current policy will allow it to work when a pty is available, but
# not through a normal pipe. See bug #162404.
mysettings["PORTAGE_LOG_FILE"] = tmpdir_log_path
else:
# Create a symlink from tmpdir_log_path to PORTAGE_LOG_FILE, as
# requested in bug #412865.
make_new_symlink = False
try:
target = os.readlink(tmpdir_log_path)
except OSError:
make_new_symlink = True
else:
if target != mysettings["PORTAGE_LOG_FILE"]:
make_new_symlink = True
if make_new_symlink:
try:
os.unlink(tmpdir_log_path)
except OSError:
pass
os.symlink(mysettings["PORTAGE_LOG_FILE"], tmpdir_log_path)
示例8: fetch
#.........这里部分代码省略.........
writemsg(_(">>> Renaming distfile with size "
"%d (smaller than " "PORTAGE_FETCH_RESU"
"ME_MIN_SIZE)\n") % mystat.st_size)
temp_filename = \
_checksum_failure_temp_file(
mysettings["DISTDIR"], myfile)
writemsg_stdout(_("Refetching... "
"File renamed to '%s'\n\n") % \
temp_filename, noiselevel=-1)
elif mystat.st_size >= size:
temp_filename = \
_checksum_failure_temp_file(
mysettings["DISTDIR"], myfile)
writemsg_stdout(_("Refetching... "
"File renamed to '%s'\n\n") % \
temp_filename, noiselevel=-1)
if distdir_writable and ro_distdirs:
readonly_file = None
for x in ro_distdirs:
filename = os.path.join(x, myfile)
match, mystat = _check_distfile(
filename, pruned_digests, eout, hash_filter=hash_filter)
if match:
readonly_file = filename
break
if readonly_file is not None:
try:
os.unlink(myfile_path)
except OSError as e:
if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
del e
os.symlink(readonly_file, myfile_path)
continue
# this message is shown only after we know that
# the file is not already fetched
if not has_space:
writemsg(_("!!! Insufficient space to store %s in %s\n") % \
(myfile, mysettings["DISTDIR"]), noiselevel=-1)
if has_space_superuser:
writemsg(_("!!! Insufficient privileges to use "
"remaining space.\n"), noiselevel=-1)
if userfetch:
writemsg(_("!!! You may set FEATURES=\"-userfetch\""
" in /etc/make.conf in order to fetch with\n"
"!!! superuser privileges.\n"), noiselevel=-1)
if fsmirrors and not os.path.exists(myfile_path) and has_space:
for mydir in fsmirrors:
mirror_file = os.path.join(mydir, myfile)
try:
shutil.copyfile(mirror_file, myfile_path)
writemsg(_("Local mirror has file: %s\n") % myfile)
break
except (IOError, OSError) as e:
if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
del e
try:
mystat = os.stat(myfile_path)
except OSError as e:
if e.errno not in (errno.ENOENT, errno.ESTALE):
示例9: _create_profile
def _create_profile(self, ebuilds, installed, profile, repo_configs, user_config, sets):
user_config_dir = os.path.join(self.eroot, USER_CONFIG_PATH)
try:
os.makedirs(user_config_dir)
except os.error:
pass
for repo in self.repo_dirs:
repo_dir = self._get_repo_dir(repo)
profile_dir = os.path.join(self._get_repo_dir(repo), "profiles")
metadata_dir = os.path.join(repo_dir, "metadata")
os.makedirs(metadata_dir)
#Create $REPO/profiles/categories
categories = set()
for cpv in ebuilds:
ebuilds_repo = Atom("="+cpv, allow_repo=True).repo
if ebuilds_repo is None:
ebuilds_repo = "test_repo"
if ebuilds_repo == repo:
categories.add(catsplit(cpv)[0])
categories_file = os.path.join(profile_dir, "categories")
f = open(categories_file, "w")
for cat in categories:
f.write(cat + "\n")
f.close()
#Create $REPO/profiles/license_groups
license_file = os.path.join(profile_dir, "license_groups")
f = open(license_file, "w")
f.write("EULA TEST\n")
f.close()
repo_config = repo_configs.get(repo)
if repo_config:
for config_file, lines in repo_config.items():
if config_file not in self.config_files:
raise ValueError("Unknown config file: '%s'" % config_file)
if config_file in ("layout.conf",):
file_name = os.path.join(repo_dir, "metadata", config_file)
else:
file_name = os.path.join(profile_dir, config_file)
f = open(file_name, "w")
for line in lines:
f.write("%s\n" % line)
f.close()
#Create $profile_dir/eclass (we fail to digest the ebuilds if it's not there)
os.makedirs(os.path.join(repo_dir, "eclass"))
if repo == "test_repo":
#Create a minimal profile in /usr/portage
sub_profile_dir = os.path.join(profile_dir, "default", "linux", "x86", "test_profile")
os.makedirs(sub_profile_dir)
eapi_file = os.path.join(sub_profile_dir, "eapi")
f = open(eapi_file, "w")
f.write("0\n")
f.close()
make_defaults_file = os.path.join(sub_profile_dir, "make.defaults")
f = open(make_defaults_file, "w")
f.write("ARCH=\"x86\"\n")
f.write("ACCEPT_KEYWORDS=\"x86\"\n")
f.close()
use_force_file = os.path.join(sub_profile_dir, "use.force")
f = open(use_force_file, "w")
f.write("x86\n")
f.close()
parent_file = os.path.join(sub_profile_dir, "parent")
f = open(parent_file, "w")
f.write("..\n")
f.close()
if profile:
for config_file, lines in profile.items():
if config_file not in self.config_files:
raise ValueError("Unknown config file: '%s'" % config_file)
file_name = os.path.join(sub_profile_dir, config_file)
f = open(file_name, "w")
for line in lines:
f.write("%s\n" % line)
f.close()
#Create profile symlink
os.symlink(sub_profile_dir, os.path.join(user_config_dir, "make.profile"))
#Create minimal herds.xml
herds_xml = """<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE herds SYSTEM "http://www.gentoo.org/dtd/herds.dtd">
<?xml-stylesheet href="/xsl/herds.xsl" type="text/xsl" ?>
<?xml-stylesheet href="/xsl/guide.xsl" type="text/xsl" ?>
<herds>
#.........这里部分代码省略.........
示例10: testBlockerFileCollision
def testBlockerFileCollision(self):
debug = False
install_something = """
S="${WORKDIR}"
src_install() {
einfo "installing something..."
insinto /usr/lib
echo "${PN}" > "${T}/file-collision"
doins "${T}/file-collision"
}
"""
ebuilds = {
"dev-libs/A-1" : {
"EAPI": "6",
"MISC_CONTENT": install_something,
"RDEPEND": "!dev-libs/B",
},
"dev-libs/B-1" : {
"EAPI": "6",
"MISC_CONTENT": install_something,
"RDEPEND": "!dev-libs/A",
},
}
playground = ResolverPlayground(ebuilds=ebuilds, debug=debug)
settings = playground.settings
eprefix = settings["EPREFIX"]
eroot = settings["EROOT"]
var_cache_edb = os.path.join(eprefix, "var", "cache", "edb")
user_config_dir = os.path.join(eprefix, USER_CONFIG_PATH)
portage_python = portage._python_interpreter
emerge_cmd = (portage_python, "-b", "-Wd",
os.path.join(self.bindir, "emerge"))
file_collision = os.path.join(eroot, 'usr/lib/file-collision')
test_commands = (
emerge_cmd + ("--oneshot", "dev-libs/A",),
(lambda: portage.util.grablines(file_collision) == ["A\n"],),
emerge_cmd + ("--oneshot", "dev-libs/B",),
(lambda: portage.util.grablines(file_collision) == ["B\n"],),
emerge_cmd + ("--oneshot", "dev-libs/A",),
(lambda: portage.util.grablines(file_collision) == ["A\n"],),
({"FEATURES":"parallel-install"},) + emerge_cmd + ("--oneshot", "dev-libs/B",),
(lambda: portage.util.grablines(file_collision) == ["B\n"],),
({"FEATURES":"parallel-install"},) + emerge_cmd + ("-Cq", "dev-libs/B",),
(lambda: not os.path.exists(file_collision),),
)
fake_bin = os.path.join(eprefix, "bin")
portage_tmpdir = os.path.join(eprefix, "var", "tmp", "portage")
profile_path = settings.profile_path
path = os.environ.get("PATH")
if path is not None and not path.strip():
path = None
if path is None:
path = ""
else:
path = ":" + path
path = fake_bin + path
pythonpath = os.environ.get("PYTHONPATH")
if pythonpath is not None and not pythonpath.strip():
pythonpath = None
if pythonpath is not None and \
pythonpath.split(":")[0] == PORTAGE_PYM_PATH:
pass
else:
if pythonpath is None:
pythonpath = ""
else:
pythonpath = ":" + pythonpath
pythonpath = PORTAGE_PYM_PATH + pythonpath
env = {
"PORTAGE_OVERRIDE_EPREFIX" : eprefix,
"PATH" : path,
"PORTAGE_PYTHON" : portage_python,
"PORTAGE_REPOSITORIES" : settings.repositories.config_string(),
"PYTHONDONTWRITEBYTECODE" : os.environ.get("PYTHONDONTWRITEBYTECODE", ""),
"PYTHONPATH" : pythonpath,
}
if "__PORTAGE_TEST_HARDLINK_LOCKS" in os.environ:
env["__PORTAGE_TEST_HARDLINK_LOCKS"] = \
os.environ["__PORTAGE_TEST_HARDLINK_LOCKS"]
dirs = [playground.distdir, fake_bin, portage_tmpdir,
user_config_dir, var_cache_edb]
true_symlinks = ["chown", "chgrp"]
true_binary = find_binary("true")
self.assertEqual(true_binary is None, False,
"true command not found")
try:
#.........这里部分代码省略.........
示例11: testSimple
def testSimple(self):
debug = False
install_something = """
S="${WORKDIR}"
pkg_pretend() {
einfo "called pkg_pretend for $CATEGORY/$PF"
}
src_install() {
einfo "installing something..."
insinto /usr/lib/${P}
echo "blah blah blah" > "${T}"/regular-file
doins "${T}"/regular-file
dosym regular-file /usr/lib/${P}/symlink || die
# Test code for bug #381629, using a copyright symbol encoded with latin-1.
# We use $(printf "\\xa9") rather than $'\\xa9', since printf apparently
# works in any case, while $'\\xa9' transforms to \\xef\\xbf\\xbd under
# some conditions. TODO: Find out why it transforms to \\xef\\xbf\\xbd when
# running tests for Python 3.2 (even though it's bash that is ultimately
# responsible for performing the transformation).
local latin_1_dir=/usr/lib/${P}/latin-1-$(printf "\\xa9")-directory
insinto "${latin_1_dir}"
echo "blah blah blah" > "${T}"/latin-1-$(printf "\\xa9")-regular-file || die
doins "${T}"/latin-1-$(printf "\\xa9")-regular-file
dosym latin-1-$(printf "\\xa9")-regular-file ${latin_1_dir}/latin-1-$(printf "\\xa9")-symlink || die
}
pkg_config() {
einfo "called pkg_config for $CATEGORY/$PF"
}
pkg_info() {
einfo "called pkg_info for $CATEGORY/$PF"
}
pkg_preinst() {
einfo "called pkg_preinst for $CATEGORY/$PF"
# Test that has_version and best_version work correctly with
# prefix (involves internal ROOT -> EROOT calculation in order
# to support ROOT override via the environment with EAPIs 3
# and later which support prefix).
if has_version $CATEGORY/$PN:$SLOT ; then
einfo "has_version detects an installed instance of $CATEGORY/$PN:$SLOT"
einfo "best_version reports that the installed instance is $(best_version $CATEGORY/$PN:$SLOT)"
else
einfo "has_version does not detect an installed instance of $CATEGORY/$PN:$SLOT"
fi
}
"""
ebuilds = {
"dev-libs/A-1": {
"EAPI" : "4",
"IUSE" : "+flag",
"KEYWORDS": "x86",
"LICENSE": "GPL-2",
"MISC_CONTENT": install_something,
"RDEPEND": "flag? ( dev-libs/B[flag] )",
},
"dev-libs/B-1": {
"EAPI" : "4",
"IUSE" : "+flag",
"KEYWORDS": "x86",
"LICENSE": "GPL-2",
"MISC_CONTENT": install_something,
},
"virtual/foo-0": {
"EAPI" : "4",
"KEYWORDS": "x86",
"LICENSE": "GPL-2",
},
}
installed = {
"dev-libs/A-1": {
"EAPI" : "4",
"IUSE" : "+flag",
"KEYWORDS": "x86",
"LICENSE": "GPL-2",
"RDEPEND": "flag? ( dev-libs/B[flag] )",
"USE": "flag",
},
"dev-libs/B-1": {
"EAPI" : "4",
"IUSE" : "+flag",
"KEYWORDS": "x86",
"LICENSE": "GPL-2",
"USE": "flag",
},
"dev-libs/depclean-me-1": {
"EAPI" : "4",
"IUSE" : "",
"KEYWORDS": "x86",
"LICENSE": "GPL-2",
#.........这里部分代码省略.........
示例12: testSimple
def testSimple(self):
debug = False
install_something = """
S="${WORKDIR}"
pkg_pretend() {
einfo "called pkg_pretend for $CATEGORY/$PF"
}
src_install() {
einfo "installing something..."
insinto /usr/lib/${P}
echo "blah blah blah" > "${T}"/regular-file
doins "${T}"/regular-file
dosym regular-file /usr/lib/${P}/symlink || die
# Test CONFIG_PROTECT
insinto /etc
newins "${T}"/regular-file ${PN}-${SLOT%/*}
# Test code for bug #381629, using a copyright symbol encoded with latin-1.
# We use $(printf "\\xa9") rather than $'\\xa9', since printf apparently
# works in any case, while $'\\xa9' transforms to \\xef\\xbf\\xbd under
# some conditions. TODO: Find out why it transforms to \\xef\\xbf\\xbd when
# running tests for Python 3.2 (even though it's bash that is ultimately
# responsible for performing the transformation).
local latin_1_dir=/usr/lib/${P}/latin-1-$(printf "\\xa9")-directory
insinto "${latin_1_dir}"
echo "blah blah blah" > "${T}"/latin-1-$(printf "\\xa9")-regular-file || die
doins "${T}"/latin-1-$(printf "\\xa9")-regular-file
dosym latin-1-$(printf "\\xa9")-regular-file ${latin_1_dir}/latin-1-$(printf "\\xa9")-symlink || die
}
pkg_config() {
einfo "called pkg_config for $CATEGORY/$PF"
}
pkg_info() {
einfo "called pkg_info for $CATEGORY/$PF"
}
pkg_preinst() {
einfo "called pkg_preinst for $CATEGORY/$PF"
# Test that has_version and best_version work correctly with
# prefix (involves internal ROOT -> EROOT calculation in order
# to support ROOT override via the environment with EAPIs 3
# and later which support prefix).
if has_version $CATEGORY/$PN:$SLOT ; then
einfo "has_version detects an installed instance of $CATEGORY/$PN:$SLOT"
einfo "best_version reports that the installed instance is $(best_version $CATEGORY/$PN:$SLOT)"
else
einfo "has_version does not detect an installed instance of $CATEGORY/$PN:$SLOT"
fi
if [[ ${EPREFIX} != ${PORTAGE_OVERRIDE_EPREFIX} ]] ; then
if has_version --host-root $CATEGORY/$PN:$SLOT ; then
einfo "has_version --host-root detects an installed instance of $CATEGORY/$PN:$SLOT"
einfo "best_version --host-root reports that the installed instance is $(best_version $CATEGORY/$PN:$SLOT)"
else
einfo "has_version --host-root does not detect an installed instance of $CATEGORY/$PN:$SLOT"
fi
fi
}
"""
ebuilds = {
"dev-libs/A-1": {
"EAPI" : "5",
"IUSE" : "+flag",
"KEYWORDS": "x86",
"LICENSE": "GPL-2",
"MISC_CONTENT": install_something,
"RDEPEND": "flag? ( dev-libs/B[flag] )",
},
"dev-libs/B-1": {
"EAPI" : "5",
"IUSE" : "+flag",
"KEYWORDS": "x86",
"LICENSE": "GPL-2",
"MISC_CONTENT": install_something,
},
"dev-libs/C-1": {
"EAPI" : "6",
"KEYWORDS": "~x86",
"RDEPEND": "dev-libs/D[flag]",
},
"dev-libs/D-1": {
"EAPI" : "6",
"KEYWORDS": "~x86",
"IUSE" : "flag",
},
"virtual/foo-0": {
"EAPI" : "5",
"KEYWORDS": "x86",
"LICENSE": "GPL-2",
},
}
#.........这里部分代码省略.........
示例13: _create_profile
#.........这里部分代码省略.........
#Create a minimal profile in /usr/portage
sub_profile_dir = os.path.join(profile_dir, "default", "linux", "x86", "test_profile")
os.makedirs(sub_profile_dir)
if not (profile and "eapi" in profile):
eapi_file = os.path.join(sub_profile_dir, "eapi")
with open(eapi_file, "w") as f:
f.write("0\n")
make_defaults_file = os.path.join(sub_profile_dir, "make.defaults")
with open(make_defaults_file, "w") as f:
f.write("ARCH=\"x86\"\n")
f.write("ACCEPT_KEYWORDS=\"x86\"\n")
use_force_file = os.path.join(sub_profile_dir, "use.force")
with open(use_force_file, "w") as f:
f.write("x86\n")
parent_file = os.path.join(sub_profile_dir, "parent")
with open(parent_file, "w") as f:
f.write("..\n")
if profile:
for config_file, lines in profile.items():
if config_file not in self.config_files:
raise ValueError("Unknown config file: '%s'" % config_file)
file_name = os.path.join(sub_profile_dir, config_file)
with open(file_name, "w") as f:
for line in lines:
f.write("%s\n" % line)
#Create profile symlink
os.symlink(sub_profile_dir, os.path.join(user_config_dir, "make.profile"))
make_conf = {
"ACCEPT_KEYWORDS": "x86",
"CLEAN_DELAY": "0",
"DISTDIR" : self.distdir,
"EMERGE_WARNING_DELAY": "0",
"PKGDIR": self.pkgdir,
"PORTAGE_INST_GID": str(portage.data.portage_gid),
"PORTAGE_INST_UID": str(portage.data.portage_uid),
"PORTAGE_TMPDIR": os.path.join(self.eroot, 'var/tmp'),
}
if os.environ.get("NOCOLOR"):
make_conf["NOCOLOR"] = os.environ["NOCOLOR"]
# Pass along PORTAGE_USERNAME and PORTAGE_GRPNAME since they
# need to be inherited by ebuild subprocesses.
if 'PORTAGE_USERNAME' in os.environ:
make_conf['PORTAGE_USERNAME'] = os.environ['PORTAGE_USERNAME']
if 'PORTAGE_GRPNAME' in os.environ:
make_conf['PORTAGE_GRPNAME'] = os.environ['PORTAGE_GRPNAME']
make_conf_lines = []
for k_v in make_conf.items():
make_conf_lines.append('%s="%s"' % k_v)
if "make.conf" in user_config:
make_conf_lines.extend(user_config["make.conf"])
if not portage.process.sandbox_capable or \
os.environ.get("SANDBOX_ON") == "1":
# avoid problems from nested sandbox instances
示例14: __init__
def __init__(self, ebuilds={}, binpkgs={}, installed={}, profile={}, repo_configs={}, \
user_config={}, sets={}, world=[], world_sets=[], distfiles={},
eprefix=None, targetroot=False, debug=False):
"""
ebuilds: cpv -> metadata mapping simulating available ebuilds.
installed: cpv -> metadata mapping simulating installed packages.
If a metadata key is missing, it gets a default value.
profile: settings defined by the profile.
"""
self.debug = debug
if eprefix is None:
self.eprefix = normalize_path(tempfile.mkdtemp())
# EPREFIX/bin is used by fake true_binaries. Real binaries goes into EPREFIX/usr/bin
eubin = os.path.join(self.eprefix, "usr", "bin")
ensure_dirs(eubin)
essential_binaries = (
"awk",
"basename",
"bzip2",
"cat",
"chgrp",
"chmod",
"chown",
"cp",
"egrep",
"env",
"find",
"grep",
"head",
"install",
"ln",
"mkdir",
"mktemp",
"mv",
"readlink",
"rm",
"sed",
"sort",
"tar",
"tr",
"uname",
"uniq",
"xargs",
)
# Exclude internal wrappers from PATH lookup.
orig_path = os.environ['PATH']
included_paths = []
for path in orig_path.split(':'):
if path and not fnmatch.fnmatch(path, '*/portage/*/ebuild-helpers*'):
included_paths.append(path)
try:
os.environ['PATH'] = ':'.join(included_paths)
for x in essential_binaries:
path = find_binary(x)
if path is None:
raise portage.exception.CommandNotFound(x)
os.symlink(path, os.path.join(eubin, x))
finally:
os.environ['PATH'] = orig_path
else:
self.eprefix = normalize_path(eprefix)
# Tests may override portage.const.EPREFIX in order to
# simulate a prefix installation. It's reasonable to do
# this because tests should be self-contained such that
# the "real" value of portage.const.EPREFIX is entirely
# irrelevant (see bug #492932).
portage.const.EPREFIX = self.eprefix.rstrip(os.sep)
self.eroot = self.eprefix + os.sep
if targetroot:
self.target_root = os.path.join(self.eroot, 'target_root')
else:
self.target_root = os.sep
self.distdir = os.path.join(self.eroot, "var", "portage", "distfiles")
self.pkgdir = os.path.join(self.eprefix, "pkgdir")
self.vdbdir = os.path.join(self.eroot, "var/db/pkg")
os.makedirs(self.vdbdir)
if not debug:
portage.util.noiselimit = -2
self._repositories = {}
#Make sure the main repo is always created
self._get_repo_dir("test_repo")
self._create_distfiles(distfiles)
self._create_ebuilds(ebuilds)
self._create_binpkgs(binpkgs)
self._create_installed(installed)
self._create_profile(ebuilds, installed, profile, repo_configs, user_config, sets)
self._create_world(world, world_sets)
self.settings, self.trees = self._load_config()
self._create_ebuild_manifests(ebuilds)
portage.util.noiselimit = 0
示例15: _create_profile
def _create_profile(self, ebuilds, installed, profile, repo_configs, user_config, sets):
user_config_dir = os.path.join(self.eroot, USER_CONFIG_PATH)
try:
os.makedirs(user_config_dir)
except os.error:
pass
for repo in self._repositories:
if repo == "DEFAULT":
continue
repo_dir = self._get_repo_dir(repo)
profile_dir = os.path.join(repo_dir, "profiles")
metadata_dir = os.path.join(repo_dir, "metadata")
os.makedirs(metadata_dir)
#Create $REPO/profiles/categories
categories = set()
for cpv in ebuilds:
ebuilds_repo = Atom("="+cpv, allow_repo=True).repo
if ebuilds_repo is None:
ebuilds_repo = "test_repo"
if ebuilds_repo == repo:
categories.add(catsplit(cpv)[0])
categories_file = os.path.join(profile_dir, "categories")
f = open(categories_file, "w")
for cat in categories:
f.write(cat + "\n")
f.close()
#Create $REPO/profiles/license_groups
license_file = os.path.join(profile_dir, "license_groups")
f = open(license_file, "w")
f.write("EULA TEST\n")
f.close()
repo_config = repo_configs.get(repo)
if repo_config:
for config_file, lines in repo_config.items():
if config_file not in self.config_files and not any(fnmatch.fnmatch(config_file, os.path.join(x, "*")) for x in self.config_files):
raise ValueError("Unknown config file: '%s'" % config_file)
if config_file in ("layout.conf",):
file_name = os.path.join(repo_dir, "metadata", config_file)
else:
file_name = os.path.join(profile_dir, config_file)
if "/" in config_file and not os.path.isdir(os.path.dirname(file_name)):
os.makedirs(os.path.dirname(file_name))
f = open(file_name, "w")
for line in lines:
f.write("%s\n" % line)
f.close()
#Create $profile_dir/eclass (we fail to digest the ebuilds if it's not there)
os.makedirs(os.path.join(repo_dir, "eclass"))
if repo == "test_repo":
#Create a minimal profile in /usr/portage
sub_profile_dir = os.path.join(profile_dir, "default", "linux", "x86", "test_profile")
os.makedirs(sub_profile_dir)
if not (profile and "eapi" in profile):
eapi_file = os.path.join(sub_profile_dir, "eapi")
f = open(eapi_file, "w")
f.write("0\n")
f.close()
make_defaults_file = os.path.join(sub_profile_dir, "make.defaults")
f = open(make_defaults_file, "w")
f.write("ARCH=\"x86\"\n")
f.write("ACCEPT_KEYWORDS=\"x86\"\n")
f.close()
use_force_file = os.path.join(sub_profile_dir, "use.force")
f = open(use_force_file, "w")
f.write("x86\n")
f.close()
parent_file = os.path.join(sub_profile_dir, "parent")
f = open(parent_file, "w")
f.write("..\n")
f.close()
if profile:
for config_file, lines in profile.items():
if config_file not in self.config_files:
raise ValueError("Unknown config file: '%s'" % config_file)
file_name = os.path.join(sub_profile_dir, config_file)
f = open(file_name, "w")
for line in lines:
f.write("%s\n" % line)
f.close()
#Create profile symlink
os.symlink(sub_profile_dir, os.path.join(user_config_dir, "make.profile"))
#.........这里部分代码省略.........