Skip to content

Commit

Permalink
emerge --info: show /bin/sh provider (527996)
Browse files Browse the repository at this point in the history
Searching contents for the /bin/sh provider is somewhat slow.
Therefore, use the basename of the symlink target to locate the
package. If this fails, then only the basename of the symlink target
will be displayed. So, typical output is something like
"sh bash 4.2_p53". Since realpath is used to resolve symlinks
recursively, this approach is also able to handle multiple levels of
symlinks such as /bin/sh -> bb -> busybox. Note that we do not parse
the output of "/bin/sh --version" because many shells do not have
a --version option.

The relevant section of the emerge --info output will now look
something like this:

Timestamp of tree: Fri, 28 Nov 2014 00:45:01 +0000
sh bash 4.2_p53
ld GNU ld (Gentoo 2.23.2 p1.0) 2.23.2

X-Gentoo-Bug: 527996
X-Gentoo-Url: https://bugs.gentoo.org/show_bug.cgi?id=527996
Acked-by: Brian Dolbec <dolsen@gentoo.org>
  • Loading branch information
zmedico committed Nov 29, 2014
1 parent 743b333 commit 226b398
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions pym/_emerge/actions.py
Expand Up @@ -1556,6 +1556,47 @@ def action_info(settings, trees, myopts, myfiles):
lastSync = "Unknown"
append("Timestamp of tree: %s" % (lastSync,))

# Searching contents for the /bin/sh provider is somewhat
# slow. Therefore, use the basename of the symlink target
# to locate the package. If this fails, then only the
# basename of the symlink target will be displayed. So,
# typical output is something like "sh bash 4.2_p53". Since
# realpath is used to resolve symlinks recursively, this
# approach is also able to handle multiple levels of symlinks
# such as /bin/sh -> bb -> busybox. Note that we do not parse
# the output of "/bin/sh --version" because many shells
# do not have a --version option.
basename = os.path.basename(os.path.realpath(os.path.join(
os.sep, portage.const.EPREFIX, "bin", "sh")))
try:
Atom("null/%s" % basename)
except InvalidAtom:
matches = None
else:
try:
# Try a match against the basename, which should work for
# busybox and most shells.
matches = (trees[trees._running_eroot]["vartree"].dbapi.
match(basename))
except portage.exception.AmbiguousPackageName:
# If the name is ambiguous, then restrict our match
# to the app-shells category.
matches = (trees[trees._running_eroot]["vartree"].dbapi.
match("app-shells/%s" % basename))

if matches:
pkg = matches[-1]
name = pkg.cp
version = pkg.version
# Omit app-shells category from the output.
if name.startswith("app-shells/"):
name = name[len("app-shells/"):]
sh_str = "%s %s" % (name, version)
else:
sh_str = basename

append("sh %s" % sh_str)

ld_names = []
if chost:
ld_names.append(chost + "-ld")
Expand Down

0 comments on commit 226b398

Please sign in to comment.