* Add link level dependency awareness to emerge --depclean and --prune actions
in order to protect against uninstallation of required libraries.
-* Add license visibility filtering (GLEP 23)
* Add support for generic package sets (also see RELEASE-NOTES)
+
+portage-2.1.7
+-------------
+
+* Add license visibility filtering (GLEP 23)
* Add --accept-properties option for emerge which allows you to use
--accept-properties=-interactive in order to temporarily exclude
interactive updates.
"that do not already exist in ${DISTDIR} will be automatically fetched."
parser.add_option("--force", help=force_help, action="store_true", dest="force")
+parser.add_option("--color", help="enable or disable color output",
+ type="choice", choices=("y", "n"))
parser.add_option("--debug", help="show debug output",
action="store_true", dest="debug")
parser.add_option("--ignore-default-opts",
import portage.debug
portage.debug.set_trace(True)
-if portage.settings["NOCOLOR"] in ("yes","true") or not sys.stdout.isatty():
+if not opts.color == 'y' and \
+ (opts.color == 'n' or \
+ portage.settings.get('NOCOLOR') in ('yes', 'true') or \
+ not sys.stdout.isatty()):
portage.output.nocolor()
+ portage.settings.unlock()
+ portage.settings['NOCOLOR'] = 'true'
+ portage.settings.lock()
ebuild = pargs.pop(0)
unset PORTAGE_QUIET
fi
- # Make sure we disallow insecure RUNPATH/RPATH's
+ # Make sure we disallow insecure RUNPATH/RPATHs
# Don't want paths that point to the tree where the package was built
# (older, broken libtools would do this). Also check for null paths
# because the loader will search $PWD when it finds null paths.
)
if [[ -n ${f}${x} ]] ; then
vecho -ne '\a\n'
- eqawarn "QA Notice: The following files contain insecure RUNPATH's"
+ eqawarn "QA Notice: The following files contain insecure RUNPATHs"
eqawarn " Please file a bug about this at http://bugs.gentoo.org/"
eqawarn " with the maintaining herd of the package."
eqawarn "${f}${f:+${x:+\n}}${x}"
fi
fi
- # TEXTREL's are baaaaaaaad
+ # TEXTRELs are baaaaaaaad
# Allow devs to mark things as ignorable ... e.g. things that are
# binary-only and upstream isn't cooperating (nvidia-glx) ... we
# allow ebuild authors to set QA_TEXTRELS_arch and QA_TEXTRELS ...
+#
+# CRITICAL WARNINGS: ****************************************************** #
+# K6 markings are deceptive. Avoid setting -march for them. See Bug #24379. #
-+# Pentium-M CPU's should not enable sse2 until at least gcc-3.4. Bug 50616. #
++# Pentium-M CPUs should not enable sse2 until at least gcc-3.4. Bug 50616. #
+# GCC 3.3 doesnt support an amd64 specific -march setting, use 3.4. #
+# ************************************************************************* #
#
+#
+# CRITICAL WARNINGS: ****************************************************** #
+# K6 markings are deceptive. Avoid setting -march for them. See Bug #24379. #
-+# Pentium-M CPU's should not enable sse2 until at least gcc-3.4. Bug 50616. #
++# Pentium-M CPUs should not enable sse2 until at least gcc-3.4. Bug 50616. #
+# GCC 3.3 doesnt support an amd64 specific -march setting, use 3.4. #
+# ************************************************************************* #
#
+#
+# CRITICAL WARNINGS: ****************************************************** #
+# K6 markings are deceptive. Avoid setting -march for them. See Bug #24379. #
-+# Pentium-M CPU's should not enable sse2 until at least gcc-3.4. Bug 50616. #
++# Pentium-M CPUs should not enable sse2 until at least gcc-3.4. Bug 50616. #
+# ************************************************************************* #
#
+# Decent examples:
+#
+# CRITICAL WARNINGS: ****************************************************** #
+# K6 markings are deceptive. Avoid setting -march for them. See Bug #24379. #
-+# Pentium-M CPU's should not enable sse2 until at least gcc-3.4. Bug 50616. #
++# Pentium-M CPUs should not enable sse2 until at least gcc-3.4. Bug 50616. #
+# ************************************************************************* #
+#
+# NOTE: the -On optimization levels are set with the letter O, not -0 (zero).
<title>Scanelf: Insecure RUNPATHs</title>
<para>
<programlisting>
- QA Notice: The following files contain insecure RUNPATH's
+ QA Notice: The following files contain insecure RUNPATHs
</programlisting>
</para>
<para>
Run bash with the \-x option, causing it to output verbose debugging
information to stdout.
.TP
+.BR "\-\-color < y | n >"
+Enable or disable color output. This option will override \fINOCOLOR\fR
+(see \fBmake.conf\fR(5)) and may also be used to force color output when stdout
+is not a tty (by default, color is disabled unless stdout is a tty).
+.TP
.BR "\-\-force"
When used together with the digest or manifest command,
this option forces regeneration of
the EAPI to which this package conforms.
.TP
\fBSRC_URI\fR = \fI"http://happy.com/little/${P}.tar.gz"\fR
-Contains a list of URI's for the required source files. It can contain
-multiple URI's for a single source file. The list is processed in order
+Contains a list of URIs for the required source files. It can contain
+multiple URIs for a single source file. The list is processed in order
if the file was not found on any of the \fIGENTOO_MIRRORS\fR.
Beginning with \fBEAPI 2\fR, the output file name of a given URI may be
customized with a "->" operator on the right hand side, followed by the
file name, should be separated by whitespace.
.TP
\fBHOMEPAGE\fR = \fI"http://happy.com/"\fR
-Should contain a list of URL's for the sources main sites and other further
+Should contain a list of URIs for the sources main sites and other further
package dependent information.
.TP
\fBKEYWORDS\fR = \fI[\-~][x86,ppc,sparc,mips,alpha,arm,hppa]\fR
files in \fBSRC_URI\fR will not be downloaded from the \fBGENTOO_MIRRORS\fR.
.TP
.I primaryuri
-fetch from URL's in \fBSRC_URI\fR before \fBGENTOO_MIRRORS\fR.
+fetch from URIs in \fBSRC_URI\fR before \fBGENTOO_MIRRORS\fR.
.TP
.I strip
final binaries/libraries will not be stripped of debug symbols.
merging the packages. This comes with the caveat that all build-time
dependencies must already be emerged on the system.
.TP
+.BR "\-\-changed\-use"
+This is an alias for \fB\-\-reinstall=changed\-use\fR.
+.TP
.BR "\-\-changelog " (\fB\-l\fR)
Use this in conjunction with the \fB\-\-pretend\fR option. This will
show the ChangeLog entries for all the packages that will be upgraded.
\fBFEATURES\fR in order to avoid warning messages that are triggered by this
incompatibility.
.TP
+split\-elog
+Store logs created by \fBPORTAGE_ELOG_SYSTEM="save"\fR in category
+subdirectories of \fBPORT_LOGDIR/elog\fR, instead of using
+\fBPORT_LOGDIR/elog\fR directly.
+.TP
+.B split\-log
+Store build logs in category subdirectories of \fBPORT_LOGDIR/build\fR,
+instead of using \fBPORT_LOGDIR\fR directly.
+.TP
.B splitdebug
Prior to stripping ELF etdyn and etexec files, the debugging info is
stored for later use by various debuggers. This feature is disabled by
written to place the fetched file at \\${DISTDIR}/\\${FILE}.
Also see \fBRESUMECOMMAND\fR.
.TP
-\fBGENTOO_MIRRORS\fR = \fI[URLs]\fR
+\fBGENTOO_MIRRORS\fR = \fI[URIs]\fR
Insert your space\-seperated list of local mirrors here. These
locations are used to download files before the ones listed in
the \fIebuild scripts\fR. Merging 'mirrorselect' can help. Entries in this
Contains variables customizing colors. See \fBcolor.map\fR(5).
.TP
.BR mirrors
-Whenever portage encounters a mirror:// style URL it will look up the actual
+Whenever portage encounters a mirror:// style URI it will look up the actual
hosts here. If the mirror set is not found here, it will check the global
mirrors file at /usr/portage/profiles/thirdpartymirrors. You may also set a
special mirror type called "local". This list of mirrors will be checked
hyphen.
.TP
.BR thirdpartymirrors
-Controls the mapping of mirror:// style URLs to actual lists of
+Controls the mapping of mirror:// style URIs to actual lists of
mirrors. Keeps us from overloading a single server.
.I Format:
if debug:
fetch_args.append("--debug")
+ if not self.background and nocolor not in ('yes', 'true'):
+ # Force consistent color output, in case we are capturing fetch
+ # output through a normal pipe due to unavailability of ptys.
+ fetch_args.append('--color=y')
+
self.args = fetch_args
self.env = fetch_env
SpawnProcess._start(self)
def adjust_config(myopts, settings):
"""Make emerge specific adjustments to the config."""
- # To enhance usability, make some vars case insensitive by forcing them to
- # lower case.
- for myvar in ("AUTOCLEAN", "NOCOLOR"):
- if myvar in settings:
- settings[myvar] = settings[myvar].lower()
- settings.backup_changes(myvar)
- del myvar
-
# Kill noauto as it will break merges otherwise.
if "noauto" in settings.features:
settings.features.remove('noauto')
return 0
if debug:
- print("Candidates:", selected_atoms)
+ print("Candidates:", [str(x) for x in selected_atoms[pkg]])
root_config = self._frozen_config.roots[dep_root]
vardb = root_config.trees["vartree"].dbapi
# <=portage-2.1.6.x did.
for virt_pkg, atoms in selected_atoms.items():
+ if debug:
+ print("Candidates: %s: %s" % \
+ (virt_pkg.cpv, [str(x) for x in atoms]))
+
# Just assume depth + 1 here for now, though it's not entirely
# accurate since multilple levels of indirect virtual deps may
# have been traversed. The _add_pkg call will reset the depth to
print(" must not exist for the desired package as they cannot be used if")
print(" they do not exist on the system.")
print()
+ print(" " + green("--changed-use"))
+ desc = "This is an alias for --reinstall=changed-use."
+ for line in wrap(desc, desc_width):
+ print(desc_indent + line)
+ print()
print(" "+green("--changelog")+" ("+green("-l")+" short option)")
print(" When pretending, also display the ChangeLog entries for packages")
print(" that will be upgraded.")
options=[
"--ask", "--alphabetical",
"--buildpkg", "--buildpkgonly",
+"--changed-use",
"--changelog", "--columns",
"--debug",
"--digest",
myoptions, myargs = parser.parse_args(args=tmpcmdline)
+ if myoptions.changed_use is not False:
+ myoptions.reinstall = "changed-use"
+ myoptions.changed_use = False
+
if myoptions.deselect == "True":
myoptions.deselect = True
('ACCEPT_PROPERTIES', '*'),
)
+ # To enhance usability, make some vars case insensitive
+ # by forcing them to lower case.
+ _case_insensitive_vars = ('AUTOCLEAN', 'NOCOLOR',)
+
def __init__(self, clone=None, mycpv=None, config_profile_path=None,
config_incrementals=None, config_root=None, target_root=None,
local_config=True, env=None):
self._init_dirs()
+ for k in self._case_insensitive_vars:
+ if k in self:
+ self[k] = self[k].lower()
+ self.backup_changes(k)
+
if mycpv:
self.setcpv(mycpv)
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')
- mysettings["PORTAGE_LOG_FILE"] = os.path.join(
- mysettings["PORT_LOGDIR"], "%s:%s:%s.log" % \
- (mysettings["CATEGORY"], mysettings["PF"], logid_time))
- del logid_path, logid_time
+
+ if "split-log" in mysettings.features:
+ mysettings["PORTAGE_LOG_FILE"] = os.path.join(
+ mysettings["PORT_LOGDIR"], "build", "%s/%s:%s.log" % \
+ (mysettings["CATEGORY"], mysettings["PF"], logid_time))
+ else:
+ mysettings["PORTAGE_LOG_FILE"] = os.path.join(
+ mysettings["PORT_LOGDIR"], "%s:%s:%s.log" % \
+ (mysettings["CATEGORY"], mysettings["PF"], logid_time))
+
+ util.ensure_dirs(os.path.dirname(mysettings["PORTAGE_LOG_FILE"]))
+
else:
# NOTE: When sesandbox is enabled, the local SELinux security policies
# may not allow output to be piped out of the sesandbox domain. The
@type dbkey: Dict or String
@param use_cache: Enables the cache
@type use_cache: Boolean
- @param fetchall: Used to wrap fetch(), fetches all URI's (even ones invalid due to USE conditionals)
+ @param fetchall: Used to wrap fetch(), fetches all URIs (even ones invalid due to USE conditionals)
@type fetchall: Boolean
@param tree: Which tree to use ('vartree','porttree','bintree', etc..), defaults to 'porttree'
@type tree: String
def getRepositories(self):
"""
This function is required for GLEP 42 compliance; it will return a list of
- repository ID's
+ repository IDs
TreeMap = {id: path}
"""
return [k for k in self.treemap if k]
elogdir = os.path.join(EPREFIX, "var", "log", "portage", "elog")
ensure_dirs(elogdir, uid=portage_uid, gid=portage_gid, mode=0o2770)
- elogfilename = os.path.join(elogdir, path + ":" + _unicode_decode(
+ cat = mysettings['CATEGORY']
+ pf = mysettings['PF']
+
+ elogfilename = pf + ":" + _unicode_decode(
time.strftime("%Y%m%d-%H%M%S", time.gmtime(time.time())),
- encoding=_encodings['content'], errors='replace') + ".log")
+ encoding=_encodings['content'], errors='replace') + ".log"
+
+ if "split-elog" in mysettings.features:
+ elogfilename = os.path.join(elogdir, cat, elogfilename)
+ else:
+ elogfilename = os.path.join(elogdir, cat + ':' + elogfilename)
+ ensure_dirs(os.path.dirname(elogfilename),
+ uid=portage_uid, gid=portage_gid, mode=0o2770)
+
elogfile = codecs.open(_unicode_encode(elogfilename,
encoding=_encodings['fs'], errors='strict'),
mode='w', encoding=_encodings['content'], errors='backslashreplace')
parts = baseurl.split("://",1)
if len(parts) != 2:
- raise ValueError(_("Provided URL does not "
+ raise ValueError(_("Provided URI does not "
"contain protocol identifier. '%s'") % baseurl)
protocol,url_parts = parts
del parts
def dir_get_list(baseurl,conn=None):
"""(baseurl[,connection]) -- Takes a base url to connect to and read from.
- URL should be in the for <proto>://<site>[:port]<path>
+ URI should be in the form <proto>://<site>[:port]<path>
Connection is used for persistent connection instances."""
if not conn:
def file_get_metadata(baseurl,conn=None, chunk_size=3000):
"""(baseurl[,connection]) -- Takes a base url to connect to and read from.
- URL should be in the for <proto>://<site>[:port]<path>
+ URI should be in the form <proto>://<site>[:port]<path>
Connection is used for persistent connection instances."""
if not conn:
def file_get(baseurl,dest,conn=None,fcmd=None):
"""(baseurl,dest,fcmd=) -- Takes a base url to connect to and read from.
- URL should be in the for <proto>://[user[:pass]@]<site>[:port]<path>"""
+ URI should be in the form <proto>://[user[:pass]@]<site>[:port]<path>"""
if not fcmd:
return file_get_lib(baseurl,dest,conn)
def file_get_lib(baseurl,dest,conn=None):
"""(baseurl[,connection]) -- Takes a base url to connect to and read from.
- URL should be in the for <proto>://<site>[:port]<path>
+ URI should be in the form <proto>://<site>[:port]<path>
Connection is used for persistent connection instances."""
if not conn: