# Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ import os,sys from portage.output import bold, turquoise, green def shorthelp(): print bold("emerge:")+" the other white meat (command-line interface to the Portage system)" print bold("Usage:") print " "+turquoise("emerge")+" [ "+green("options")+" ] [ "+green("action")+" ] [ "+turquoise("ebuild")+" | "+turquoise("tbz2")+" | "+turquoise("file")+" | "+turquoise("@set")+" | "+turquoise("atom")+" ] [ ... ]" print " "+turquoise("emerge")+" [ "+green("options")+" ] [ "+green("action")+" ] < "+turquoise("system")+" | "+turquoise("world")+" >" print " "+turquoise("emerge")+" < "+turquoise("--sync")+" | "+turquoise("--metadata")+" | "+turquoise("--info")+" >" print " "+turquoise("emerge")+" "+turquoise("--resume")+" [ "+green("--pretend")+" | "+green("--ask")+" | "+green("--skipfirst")+" ]" print " "+turquoise("emerge")+" "+turquoise("--help")+" [ "+green("system")+" | "+green("world")+" | "+green("--sync")+" ] " print bold("Options:")+" "+green("-")+"["+green("abBcCdDefgGhjkKlnNoOpqPsStuvV")+"]" print " [ " + green("--color")+" < " + turquoise("y") + " | "+ turquoise("n")+" > ] [ "+green("--columns")+" ]" print " [ "+green("--complete-graph")+" ] [ "+green("--deep")+" ]" print " [ "+green("--jobs") + " " + turquoise("JOBS")+" ] [ "+green("--keep-going")+" ] [ " + green("--load-average")+" " + turquoise("LOAD") + " ]" print " [ "+green("--newuse")+" ] [ "+green("--noconfmem")+" ] [ "+green("--nospinner")+" ] [ "+green("--oneshot")+" ]" print " [ "+green("--reinstall ")+turquoise("changed-use")+" ] [ " + green("--with-bdeps")+" < " + turquoise("y") + " | "+ turquoise("n")+" > ]" print bold("Actions:")+" [ "+green("--depclean")+" | "+green("--list-sets")+" | "+green("--search")+" | "+green("--sync")+" | "+green("--version")+" ]" def help(myaction,myopts,havecolor=1): # TODO: Implement a wrap() that accounts for console color escape codes. from textwrap import wrap desc_left_margin = 14 desc_indent = desc_left_margin * " " desc_width = 80 - desc_left_margin - 5 if not myaction and ("--verbose" not in myopts): shorthelp() print print " For more help try 'emerge --help --verbose' or consult the man page." elif not myaction: shorthelp() print print turquoise("Help (this screen):") print " "+green("--help")+" ("+green("-h")+" short option)" print " Displays this help; an additional argument (see above) will tell" print " emerge to display detailed help." print print turquoise("Actions:") print " "+green("--clean")+" ("+green("-c")+" short option)" print " Cleans the system by removing outdated packages which will not" print " remove functionalities or prevent your system from working." print " The arguments can be in several different formats :" print " * world " print " * system or" print " * 'dependency specification' (in single quotes is best.)" print " Here are a few examples of the dependency specification format:" print " "+bold("binutils")+" matches" print " binutils-2.11.90.0.7 and binutils-2.11.92.0.12.3-r1" print " "+bold("sys-devel/binutils")+" matches" print " binutils-2.11.90.0.7 and binutils-2.11.92.0.12.3-r1" print " "+bold(">sys-devel/binutils-2.11.90.0.7")+" matches" print " binutils-2.11.92.0.12.3-r1" print " "+bold(">=sys-devel/binutils-2.11.90.0.7")+" matches" print " binutils-2.11.90.0.7 and binutils-2.11.92.0.12.3-r1" print " "+bold("<=sys-devel/binutils-2.11.92.0.12.3-r1")+" matches" print " binutils-2.11.90.0.7 and binutils-2.11.92.0.12.3-r1" print print " "+green("--config") print " Runs package-specific operations that must be executed after an" print " emerge process has completed. This usually entails configuration" print " file setup or other similar setups that the user may wish to run." print print " "+green("--depclean") paragraph = "Cleans the system by removing packages that are " + \ "not associated with explicitly merged packages. Depclean works " + \ "by creating the full dependency tree from the @system and " + \ "@world sets, then comparing it to installed packages. Packages " + \ "installed, but not part of the dependency tree, will be " + \ "uninstalled by depclean. See --with-bdeps for behavior with " + \ "respect to build time dependencies that are not strictly " + \ "required. Packages that are part of the world set will " + \ "always be kept. They can be manually added to this set with " + \ "emerge --noreplace . As a safety measure, depclean " + \ "will not remove any packages unless *all* required dependencies " + \ "have been resolved. As a consequence, it is often necessary to " + \ "run emerge --update --newuse --deep @system @world " + \ "prior to depclean." for line in wrap(paragraph, desc_width): print desc_indent + line print paragraph = "WARNING: Inexperienced users are advised to use " + \ "--pretend with this option in order to see a preview of which " + \ "packages will be uninstalled. Always study the list of packages " + \ "to be cleaned for any obvious mistakes. Note that packages " + \ "listed in package.provided (see portage(5)) may be removed by " + \ "depclean, even if they are part of the world set." for line in wrap(paragraph, desc_width): print desc_indent + line print paragraph = "Depclean serves as a dependency aware version of " + \ "--unmerge. When given one or more atoms, it will unmerge " + \ "matched packages that have no reverse dependencies. Use " + \ "--depclean together with --verbose to show reverse dependencies." for line in wrap(paragraph, desc_width): print desc_indent + line print print " "+green("--info") print " Displays important portage variables that will be exported to" print " ebuild.sh when performing merges. This information is useful" print " for bug reports and verification of settings. All settings in" print " make.{conf,globals,defaults} and the environment show up if" print " run with the '--verbose' flag." print print " " + green("--list-sets") paragraph = "Displays a list of available package sets." for line in wrap(paragraph, desc_width): print desc_indent + line print print " "+green("--metadata") print " Transfers metadata cache from ${PORTDIR}/metadata/cache/ to" print " /var/cache/edb/dep/ as is normally done on the tail end of an" print " rsync update using " + bold("emerge --sync") + ". This process populates the" print " cache database that portage uses for pre-parsed lookups of" print " package data. It does not populate cache for the overlays" print " listed in PORTDIR_OVERLAY. In order to generate cache for" print " overlays, use " + bold("--regen") + "." print print " "+green("--prune")+" ("+green("-P")+" short option)" print " "+turquoise("WARNING: This action can remove important packages!") paragraph = "Removes all but the highest installed version of a " + \ "package from your system. Use --prune together with " + \ "--verbose to show reverse dependencies or with --nodeps " + \ "to ignore all dependencies. " for line in wrap(paragraph, desc_width): print desc_indent + line print print " "+green("--regen") print " Causes portage to check and update the dependency cache of all" print " ebuilds in the portage tree. This is not recommended for rsync" print " users as rsync updates the cache using server-side caches." print " Rsync users should simply 'emerge --sync' to regenerate." desc = "In order to specify parallel --regen behavior, use "+ \ "the ---jobs and --load-average options." for line in wrap(desc, desc_width): print desc_indent + line print print " "+green("--resume") print " Resumes the most recent merge list that has been aborted due to an" print " error. Please note that this operation will only return an error" print " on failure. If there is nothing for portage to do, then portage" print " will exit with a message and a success condition. A resume list" print " will persist until it has been completed in entirety or until" print " another aborted merge list replaces it. The resume history is" print " capable of storing two merge lists. After one resume list" print " completes, it is possible to invoke --resume once again in order" print " to resume an older list." print print " "+green("--search")+" ("+green("-s")+" short option)" print " Searches for matches of the supplied string in the current local" print " portage tree. By default emerge uses a case-insensitive simple " print " search, but you can enable a regular expression search by " print " prefixing the search string with %." print " Prepending the expression with a '@' will cause the category to" print " be included in the search." print " A few examples:" print " "+bold("emerge --search libc") print " list all packages that contain libc in their name" print " "+bold("emerge --search '%^kde'") print " list all packages starting with kde" print " "+bold("emerge --search '%gcc$'") print " list all packages ending with gcc" print " "+bold("emerge --search '%@^dev-java.*jdk'") print " list all available Java JDKs" print print " "+green("--searchdesc")+" ("+green("-S")+" short option)" print " Matches the search string against the description field as well" print " the package's name. Take caution as the descriptions are also" print " matched as regular expressions." print " emerge -S html" print " emerge -S applet" print " emerge -S 'perl.*module'" print print " "+green("--unmerge")+" ("+green("-C")+" short option)" print " "+turquoise("WARNING: This action can remove important packages!") print " Removes all matching packages. This does no checking of" print " dependencies, so it may remove packages necessary for the proper" print " operation of your system. Its arguments can be atoms or" print " ebuilds. For a dependency aware version of --unmerge, use" print " --depclean or --prune." print print " "+green("--update")+" ("+green("-u")+" short option)" print " Updates packages to the best version available, which may not" print " always be the highest version number due to masking for testing" print " and development. This will also update direct dependencies which" print " may not be what you want. Package atoms specified on the command" print " line are greedy, meaning that unspecific atoms may match multiple" print " installed versions of slotted packages." print print " "+green("--version")+" ("+green("-V")+" short option)" print " Displays the currently installed version of portage along with" print " other information useful for quick reference on a system. See" print " "+bold("emerge info")+" for more advanced information." print print turquoise("Options:") print " "+green("--alphabetical") print " When displaying USE and other flag output, combines the enabled" print " and disabled flags into a single list and sorts it alphabetically." print " With this option, output such as USE=\"dar -bar -foo\" will instead" print " be displayed as USE=\"-bar dar -foo\"" print print " "+green("--ask")+" ("+green("-a")+" short option)" print " before performing the merge, display what ebuilds and tbz2s will" print " be installed, in the same format as when using --pretend; then" print " ask whether to continue with the merge or abort. Using --ask is" print " more efficient than using --pretend and then executing the same" print " command without --pretend, as dependencies will only need to be" print " calculated once. WARNING: If the \"Enter\" key is pressed at the" print " prompt (with no other input), it is interpreted as acceptance of" print " the first choice. Note that the input buffer is not cleared prior" print " to the prompt, so an accidental press of the \"Enter\" key at any" print " time prior to the prompt will be interpreted as a choice!" print print " "+green("--buildpkg")+" ("+green("-b")+" short option)" desc = "Tells emerge to build binary packages for all ebuilds processed in" + \ " addition to actually merging the packages. Useful for maintainers" + \ " or if you administrate multiple Gentoo Linux systems (build once," + \ " emerge tbz2s everywhere) as well as disaster recovery. The package" + \ " will be created in the" + \ " ${PKGDIR}/All directory. An alternative for already-merged" + \ " packages is to use quickpkg(1) which creates a tbz2 from the" + \ " live filesystem." for line in wrap(desc, desc_width): print desc_indent + line print print " "+green("--buildpkgonly")+" ("+green("-B")+" short option)" print " Creates a binary package, but does not merge it to the" print " system. This has the restriction that unsatisfied dependencies" 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("--changelog")+" ("+green("-l")+" short option)" print " When pretending, also display the ChangeLog entries for packages" print " that will be upgraded." print print " "+green("--color") + " < " + turquoise("y") + " | "+ turquoise("n")+" >" print " Enable or disable color output. This option will override NOCOLOR" print " (see make.conf(5)) and may also be used to force color output when" print " stdout is not a tty (by default, color is disabled unless stdout" print " is a tty)." print print " "+green("--columns") print " Display the pretend output in a tabular form. Versions are" print " aligned vertically." print print " "+green("--complete-graph") desc = "This causes emerge to consider the deep dependencies of all" + \ " packages from the system and world sets. With this option enabled," + \ " emerge will bail out if it determines that the given operation will" + \ " break any dependencies of the packages that have been added to the" + \ " graph. Like the --deep option, the --complete-graph" + \ " option will significantly increase the time taken for dependency" + \ " calculations. Note that, unlike the --deep option, the" + \ " --complete-graph option does not cause any more packages to" + \ " be updated than would have otherwise been updated with the option disabled." for line in wrap(desc, desc_width): print desc_indent + line print print " "+green("--debug")+" ("+green("-d")+" short option)" print " Tell emerge to run the ebuild command in --debug mode. In this" print " mode, the bash build environment will run with the -x option," print " causing it to output verbose debug information print to stdout." print " --debug is great for finding bash syntax errors as providing" print " very verbose information about the dependency and build process." print print " "+green("--deep")+" ("+green("-D")+" short option)" print " This flag forces emerge to consider the entire dependency tree of" print " packages, instead of checking only the immediate dependencies of" print " the packages. As an example, this catches updates in libraries" print " that are not directly listed in the dependencies of a package." print " Also see --with-bdeps for behavior with respect to build time" print " dependencies that are not strictly required." print print " "+green("--emptytree")+" ("+green("-e")+" short option)" print " Virtually tweaks the tree of installed packages to contain" print " nothing. This is great to use together with --pretend. This makes" print " it possible for developers to get a complete overview of the" print " complete dependency tree of a certain package." print print " "+green("--fetchonly")+" ("+green("-f")+" short option)" print " Instead of doing any package building, just perform fetches for" print " all packages (main package as well as all dependencies.) When" print " used in combination with --pretend all the SRC_URIs will be" print " displayed multiple mirrors per line, one line per file." print print " "+green("--fetch-all-uri")+" ("+green("-F")+" short option)" print " Same as --fetchonly except that all package files, including those" print " not required to build the package, will be processed." print print " "+green("--getbinpkg")+" ("+green("-g")+" short option)" print " Using the server and location defined in PORTAGE_BINHOST, portage" print " will download the information from each binary file there and it" print " will use that information to help build the dependency list. This" print " option implies '-k'. (Use -gK for binary-only merging.)" print print " "+green("--getbinpkgonly")+" ("+green("-G")+" short option)" print " This option is identical to -g, as above, except it will not use" print " ANY information from the local machine. All binaries will be" print " downloaded from the remote server without consulting packages" print " existing in the packages directory." print print " " + green("--jobs") + " " + turquoise("[JOBS]") + " ("+green("-j")+" short option)" desc = "Specifies the number of packages " + \ "to build simultaneously. If this option is " + \ "given without an argument, emerge will not " + \ "limit the number of jobs that " + \ "can run simultaneously. Also see " + \ "the related --load-average option." for line in wrap(desc, desc_width): print desc_indent + line print print " "+green("--keep-going") desc = "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 " + \ "the related --skipfirst option." for line in wrap(desc, desc_width): print desc_indent + line print print " " + green("--load-average") + " " + turquoise("LOAD") desc = "Specifies that no new builds should " + \ "be started if there are other builds " + \ "running and the load average is at " + \ "least LOAD (a floating-point number). " + \ "This option is recommended for use " + \ "in combination with --jobs in " + \ "order to avoid excess load. See " + \ "make(1) for information about " + \ "analogous options that should be " + \ "configured via MAKEOPTS in " + \ "make.conf(5)." for line in wrap(desc, desc_width): print desc_indent + line print print " "+green("--newuse")+" ("+green("-N")+" short option)" print " Tells emerge to include installed packages where USE flags have " print " changed since installation." print print " "+green("--noconfmem") print " Portage keeps track of files that have been placed into" print " CONFIG_PROTECT directories, and normally it will not merge the" print " same file more than once, as that would become annoying. This" print " can lead to problems when the user wants the file in the case" print " of accidental deletion. With this option, files will always be" print " merged to the live fs instead of silently dropped." print print " "+green("--nodeps")+" ("+green("-O")+" short option)" print " Merge specified packages, but don't merge any dependencies." print " Note that the build may fail if deps aren't satisfied." print print " "+green("--noreplace")+" ("+green("-n")+" short option)" print " Skip the packages specified on the command-line that have" print " already been installed. Without this option, any packages," print " ebuilds, or deps you specify on the command-line *will* cause" print " Portage to remerge the package, even if it is already installed." print " Note that Portage won't remerge dependencies by default." print print " "+green("--nospinner") print " Disables the spinner regardless of terminal type." print print " "+green("--oneshot")+" ("+green("-1")+" short option)" print " Emerge as normal, but don't add packages to the world profile." print " This package will only be updated if it is depended upon by" print " another package." print print " "+green("--onlydeps")+" ("+green("-o")+" short option)" print " Only merge (or pretend to merge) the dependencies of the" print " specified packages, not the packages themselves." print print " "+green("--pretend")+" ("+green("-p")+" short option)" print " Instead of actually performing the merge, simply display what" print " ebuilds and tbz2s *would* have been installed if --pretend" print " weren't used. Using --pretend is strongly recommended before" print " installing an unfamiliar package. In the printout, N = new," print " U = updating, R = replacing, F = fetch restricted, B = blocked" print " by an already installed package, D = possible downgrading," print " S = slotted install. --verbose causes affecting use flags to be" print " printed out accompanied by a '+' for enabled and a '-' for" print " disabled USE flags." print print " "+green("--quiet")+" ("+green("-q")+" short option)" print " Effects vary, but the general outcome is a reduced or condensed" print " output from portage's displays." print print " "+green("--reinstall ") + turquoise("changed-use") print " Tells emerge to include installed packages where USE flags have" print " changed since installation. Unlike --newuse, this option does" print " not trigger reinstallation when flags that the user has not" print " enabled are added or removed." print print " "+green("--skipfirst") desc = "This option is only valid when " + \ "used with --resume. It removes the " + \ "first package in the resume list. " + \ "Dependencies are recalculated for " + \ "remaining packages and any that " + \ "have unsatisfied dependencies or are " + \ "masked will be automatically dropped. " + \ "Also see the related " + \ "--keep-going option." for line in wrap(desc, desc_width): print desc_indent + line print print " "+green("--tree")+" ("+green("-t")+" short option)" print " Shows the dependency tree using indentation for dependencies." print " The packages are also listed in reverse merge order so that" print " a package's dependencies follow the package. Only really useful" print " in combination with --emptytree, --update or --deep." print print " "+green("--usepkg")+" ("+green("-k")+" short option)" print " Tell emerge to use binary packages (from $PKGDIR) if they are" print " available, thus possibly avoiding some time-consuming compiles." print " This option is useful for CD installs; you can export" print " PKGDIR=/mnt/cdrom/packages and then use this option to have" print " emerge \"pull\" binary packages from the CD in order to satisfy" print " dependencies." print print " "+green("--usepkgonly")+" ("+green("-K")+" short option)" print " Like --usepkg above, except this only allows the use of binary" print " packages, and it will abort the emerge if the package is not" print " available at the time of dependency calculation." print print " "+green("--verbose")+" ("+green("-v")+" short option)" print " Effects vary, but the general outcome is an increased or expanded" print " display of content in portage's displays." print print " "+green("--with-bdeps")+" < " + turquoise("y") + " | "+ turquoise("n")+" >" print " In dependency calculations, pull in build time dependencies that" print " are not strictly required. This defaults to 'n' for installation" print " actions and 'y' for the --depclean action. This setting can be" print " added to EMERGE_DEFAULT_OPTS (see make.conf(5)) and later" print " overridden via the command line." print elif myaction == "sync": print print bold("Usage: ")+turquoise("emerge")+" "+turquoise("--sync") print print " 'emerge --sync' tells emerge to update the Portage tree as specified in" print " The SYNC variable found in /etc/make.conf. By default, SYNC instructs" print " emerge to perform an rsync-style update with rsync.gentoo.org." print print " 'emerge-webrsync' exists as a helper app to emerge --sync, providing a" print " method to receive the entire portage tree as a tarball that can be" print " extracted and used. First time syncs would benefit greatly from this." print print " "+turquoise("WARNING:") print " If using our rsync server, emerge will clean out all files that do not" print " exist on it, including ones that you may have created. The exceptions" print " to this are the distfiles, local and packages directories." print