set -${shopts}
fi
fi
+ sed -e "/^\$/d" -i "${T}"/scanelf-missing-SONAME.log
f=$(<"${T}"/scanelf-missing-SONAME.log)
if [[ -n ${f} ]] ; then
vecho -ne '\a\n'
set -${shopts}
fi
fi
+ sed -e "/^\$/d" -i "${T}"/scanelf-missing-NEEDED.log
f=$(<"${T}"/scanelf-missing-NEEDED.log)
if [[ -n ${f} ]] ; then
vecho -ne '\a\n'
given without an argument, emerge will not limit the number of jobs that can
run simultaneously. Also see the related \fB\-\-load\-average\fR option.
.TP
-.BR "\-\-keep\-going"
+.BR "\-\-keep\-going[=n]"
Continue as much as possible after an error. When an error occurs,
dependencies are recalculated for remaining packages and any with
unsatisfied dependencies are automatically dropped. Also see
\fBDEPEND\fR variable. However, behavior may change for new
\fBEAPI\fRs when related extensions are added in the future.
.TP
-.BR "\-\-selective"
+.BR "\-\-selective"[=n]
This is similar to the \fB\-\-noreplace\fR option, except that it
does not take precedence over options such as \fB\-\-newuse\fR.
+Some options, such as \fB\-\-update\fR, imply \fB\-\-selective\fR.
+Use \fB\-\-selective=n\fR if you want to forcefully disable
+\fB\-\-selective\fR, regardless of options like \fB\-\-update\fR.
.TP
.BR "\-\-skipfirst"
This option is only valid when used with \fB\-\-resume\fR. It removes the
"profiles" directory that begins with "package." or "use." can be more than
just a flat file. If it is a directory, then all the files in that directory
will be sorted in ascending alphabetical order by file name and summed together
-as if it were a single file.
+as if it were a single file. Note that this behavior is only supported since
+portage-2.1.6.7, and it is not included in PMS at this time.
.I Example:
.nf
return s
def __str__(self):
+ """
+ In python-2.x, str() can trigger a UnicodeEncodeError here,
+ so call __str__() directly.
+ """
output = []
shown_repos = self._shown_repos
unknown_repo = self._unknown_repo
# Distributed under the terms of the GNU General Public License v2
# $Id$
+import logging
+from portage.util import writemsg_level
+
def create_depgraph_params(myopts, myaction):
#configure emerge engine parameters
#
"--newuse" in myopts or \
"--reinstall" in myopts or \
"--noreplace" in myopts or \
- "--selective" in myopts:
+ myopts.get("--selective", "n") != "n":
myparams["selective"] = True
if "--emptytree" in myopts:
myparams["empty"] = True
myparams["deep"] = myopts["--deep"]
if "--complete-graph" in myopts:
myparams["complete"] = True
+ if myopts.get("--selective") == "n":
+ # --selective=n can be used to remove selective
+ # behavior that may have been implied by some
+ # other option like --update.
+ myparams.pop("selective", None)
+
+ if '--debug' in myopts:
+ writemsg_level('\n\nmyparams %s\n\n' % myparams,
+ noiselevel=-1, level=logging.DEBUG)
+
return myparams
# $Id$
import gc
+import logging
import re
import sys
import textwrap
from portage.sets import SETPREFIX
from portage.sets.base import InternalPackageSet
from portage.util import cmp_sort_key, writemsg, writemsg_stdout
+from portage.util import writemsg_level
from _emerge.AtomArg import AtomArg
from _emerge.Blocker import Blocker
from _emerge.BlockerDepPriority import BlockerDepPriority
from _emerge.changelog import calc_changelog
from _emerge.countdown import countdown
-from _emerge.create_depgraph_params import create_depgraph_params
from _emerge.create_world_atom import create_world_atom
from _emerge.Dependency import Dependency
from _emerge.DependencyArg import DependencyArg
dep.parent, {})["missing dependency"] = \
set([(dep.parent, dep.root, dep.atom)])
self._dynamic_config._need_restart = True
+ if "--debug" in self._frozen_config.myopts:
+ msg = []
+ msg.append("")
+ msg.append("")
+ msg.append("backtracking due to unsatisfied dep:")
+ msg.append(" parent: %s" % dep.parent)
+ msg.append(" priority: %s" % dep.priority)
+ msg.append(" root: %s" % dep.root)
+ msg.append(" atom: %s" % dep.atom)
+ msg.append("")
+ writemsg_level("".join("%s\n" % l for l in msg),
+ noiselevel=-1, level=logging.DEBUG)
return 0
# In some cases, dep_check will return deps that shouldn't
self._dynamic_config._runtime_pkg_mask.setdefault(
existing_node, {})["slot conflict"] = parent_atoms
self._dynamic_config._need_restart = True
+ if "--debug" in self._frozen_config.myopts:
+ msg = []
+ msg.append("")
+ msg.append("")
+ msg.append("backtracking due to slot conflict:")
+ msg.append(" package: %s" % existing_node)
+ msg.append(" slot: %s" % existing_node.slot_atom)
+ msg.append(" parents: %s" % \
+ [(str(parent), atom) \
+ for parent, atom in parent_atoms])
+ msg.append("")
+ writemsg_level("".join("%s\n" % l for l in msg),
+ noiselevel=-1, level=logging.DEBUG)
return 0
# A slot collision has occurred. Sometimes this coincides
depth >= mylist[i+1][1]:
del mylist[i]
- from portage import flatten
- from portage.dep import use_reduce, paren_reduce
# files to fetch list - avoids counting a same file twice
# in size display (verbose mode)
myfetchlist=[]
print
print counters
if show_repos:
- writemsg_stdout(str(repo_display), noiselevel=-1)
+ # In python-2.x, str() can trigger a UnicodeEncodeError here,
+ # so call __str__() directly.
+ writemsg_stdout(repo_display.__str__(), noiselevel=-1)
if "--changelog" in self._frozen_config.myopts:
writemsg_stdout('\n', noiselevel=-1)
runtime_pkg_mask = mydepgraph.get_runtime_pkg_mask()
backtracked += 1
elif backtracked and allow_backtracking:
+ if "--debug" in myopts:
+ writemsg_level(
+ "\n\nbacktracking aborted after %s tries\n\n" % \
+ backtracked, noiselevel=-1, level=logging.DEBUG)
# Backtracking failed, so disable it and do
# a plain dep calculation + error message.
allow_backtracking = False
for line in wrap(desc, desc_width):
print desc_indent + line
print
- print " "+green("--keep-going")
+ print " " + green("--keep-going") + "[=%s]" % turquoise("n")
desc = "Continue as much as possible after " + \
"an error. When an error occurs, " + \
"dependencies are recalculated for " + \
for line in wrap(desc, desc_width):
print desc_indent + line
print
- print " " + green("--selective")
+ print " " + green("--selective") + "[=%s]" % turquoise("n")
desc = "This is similar to the --noreplace option, except that it " + \
- "does not take precedence over options such as --newuse."
+ "does not take precedence over options such as --newuse. " + \
+ "Some options, such as --update, imply --selective. " + \
+ "Use --selective=n if you want to forcefully disable " + \
+ "--selective, regardless of options like --update."
for line in wrap(desc, desc_width):
print desc_indent + line
print
"--emptytree",
"--fetchonly", "--fetch-all-uri",
"--ignore-default-opts",
-"--keep-going",
"--noconfmem",
"--newuse",
"--nodeps", "--noreplace",
"--nospinner", "--oneshot",
"--onlydeps", "--pretend",
"--quiet", "--resume",
-"--searchdesc", "--selective",
+"--searchdesc",
"--skipfirst",
"--tree",
"--update",
'--getbinpkg' : ('n',),
'--getbinpkgonly' : ('n',),
'--jobs' : valid_integers,
+ '--keep-going' : ('n',),
'--root-deps' : ('rdeps',),
+ '--selective' : ('n',),
'--usepkg' : ('n',),
'--usepkgonly' : ('n',),
}
"action" : "store"
},
+ "--keep-going": {
+ "help" : "continue as much as possible after an error",
+ "type" : "choice",
+ "choices" : ("True", "n")
+ },
+
"--load-average": {
"help" :"Specifies that no new builds should be started " + \
"choices" :("True", "rdeps")
},
+ "--selective": {
+ "help" : "similar to the --noreplace but does not take " + \
+ "precedence over options such as --newuse",
+ "type" : "choice",
+ "choices" : ("True", "n")
+ },
+
"--usepkg": {
"shortopt" : "-k",
"help" : "use binary packages",
else:
myoptions.getbinpkgonly = None
+ if myoptions.keep_going in ("True",):
+ myoptions.keep_going = True
+ else:
+ myoptions.keep_going = None
+
if myoptions.root_deps == "True":
myoptions.root_deps = True
+ if myoptions.selective == "True":
+ myoptions.selective = True
+
if myoptions.deep is not None:
deep = None
if myoptions.deep == "True":
else:
self.punmaskdict[mycatpkg]=[x]
- pkgprovidedlines = [grabfile(os.path.join(x, "package.provided")) for x in self.profiles]
+ pkgprovidedlines = [grabfile(os.path.join(x, "package.provided"), recursive=1) for x in self.profiles]
pkgprovidedlines = stack_lists(pkgprovidedlines, incremental=1)
has_invalid_data = False
for x in range(len(pkgprovidedlines)-1, -1, -1):
mydata, st, emtime = self._pull_valid_cache(mycpv, myebuild, mylocation)
doregen = mydata is None
- writemsg(_("auxdb is valid: ")+str(not doregen)+" "+str(pkg)+"\n", 2)
-
if doregen:
if myebuild in self._broken_ebuilds:
raise KeyError(mycpv)
if not self._have_root_eclass_dir:
raise KeyError(mycpv)
- writemsg("doregen: %s %s\n" % (doregen, mycpv), 2)
- writemsg(_("Generating cache entry(0) for: ")+str(myebuild)+"\n", 1)
self.doebuild_settings.setcpv(mycpv)
mydata = {}
os.path.join(self.mysettings["DISTDIR"], x), mysums[x])
except FileNotFound, e:
ok = False
- reason = _("File Not Found: '%s'") % str(e)
+ reason = _("File Not Found: '%s'") % (e,)
if not ok:
failures[x] = reason
if failures:
except PortageException, e:
writemsg("!!! Error: aux_get('%s', %s)\n" % (mycpv, aux_keys),
noiselevel=-1)
- writemsg("!!! %s\n" % str(e), noiselevel=-1)
+ writemsg("!!! %s\n" % (e,), noiselevel=-1)
del e
continue
eapi = metadata["EAPI"]
0 == i % self._file_merge_yield_interval:
scheduler.scheduleYield()
+ if os is _os_merge:
+ try:
+ _unicode_encode(path,
+ encoding=_encodings['merge'], errors='strict')
+ except UnicodeEncodeError:
+ # The package appears to have been merged with a
+ # different value of sys.getfilesystemencoding(),
+ # so fall back to utf_8 if appropriate.
+ try:
+ _unicode_encode(path,
+ encoding=_encodings['fs'], errors='strict')
+ except UnicodeEncodeError:
+ pass
+ else:
+ os = portage.os
+
try:
s = os.lstat(path)
except OSError, e:
mystr = mystr[:_max_xtermTitle_len]
if not raw:
mystr = '\x1b]0;%s\x07' % mystr
+ if sys.hexversion < 0x3000000 and isinstance(mystr, unicode):
+ # avoid potential UnicodeEncodeError
+ mystr = mystr.encode(_encodings['stdio'], 'backslashreplace')
sys.stderr.write(mystr)
sys.stderr.flush()