setups that the user may wish to run.
.TP
.BR \-\-depclean
-Determines all packages installed on the system that have no
-explicit reason for being there. \fBemerge\fR generates a list
-of packages which it expects to be installed by checking the
-\fBsystem\fR package list and the \fBworld\fR file. It then
-compares that list to the list of packages which are actually
-installed; the differences are listed as unnecessary packages
-and then unmerged after a short timeout. \fBWARNING: Removing some
+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 list and the world file,
+then comparing it to installed packages. Packages installed, but
+not associated with an explicit merge are listed as candidates
+for unmerging. Inexperienced users are advised to use \fB\-\-pretend\fR
+with this option in order to see a preview of which packages
+will be uninstalled. \fBWARNING: Removing some
packages may cause packages which link to the removed package
-to stop working and complain about missing libraries.\fR
-Re\-emerge the complaining package to fix this issue. Also see
+to stop working and complain about missing libraries.\fR
+Rebuild the complaining package to fix this issue. Also see
\fB\-\-with\-bdeps\fR for behavior with respect to build time dependencies that
-are not strictly required.
+are not strictly required. Depclean serves as a dependency aware
+version of \fB\-\-unmerge\fR. When given one or more atoms, it will
+unmerge matched packages that have no reverse dependencies. Use
+\fB\-\-depclean\fR together with \fB\-\-verbose\fR to show reverse
+dependencies.
.TP
.BR "\-\-help " (\fB\-h\fR)
Displays help information for emerge. Adding one of the additional
\fBWARNING: This action can remove important packages!\fR Removes all but the
highest installed version of a package from your system. This action doesn't
verify the possible binary compatibility between versions and can thus remove
-essential dependencies from your system.
+essential dependencies from your system. Use \fB\-\-prune\fR together with
+\fB\-\-verbose\fR to show reverse dependencies or with \fB\-\-nodeps\fR to
+ignore all dependencies.
.TP
.BR \-\-regen
Causes portage to check and update the dependency cache of all ebuilds in the
\fBWARNING: This action can remove important packages!\fR Removes
all matching packages. This does no checking of dependencies, so
it may remove packages necessary for the proper operation of your
-system. Its arguments can be \fIebuilds\fR, \fIsets\fR, or
-\fIatoms\fR.
+system. Its arguments can be \fIatoms\fR or
+\fIebuilds\fR. For a dependency aware version of \fB\-\-unmerge\fR,
+use \fB\-\-depclean\fR or \fB\-\-prune\fR.
.TP
.BR "\-\-update " (\fB\-u\fR)
Updates packages to the best version available, which may not always be the
greedy_atoms.append((myarg, myslot_atom))
arg_atoms = greedy_atoms
- oneshot = "--oneshot" in self.myopts or "--onlydeps" in self.myopts
+ oneshot = "--oneshot" in self.myopts or \
+ "--onlydeps" in self.myopts or \
+ "--update" in self.myopts
""" These are used inside self.create() in order to ensure packages
that happen to match arguments are not incorrectly marked as nomerge."""
args_set = self._sets["args"]
if vardb.match(atom):
remaining_atoms.append((atom, 'system', hard))
elif action == "prune":
+ for atom in syslist:
+ if vardb.match(atom):
+ remaining_atoms.append((atom, 'system', hard))
# Pull in everything that's installed since we don't want to prune a
# package if something depends on it.
remaining_atoms.extend((atom, 'world', hard) for atom in vardb.cp_all())
def show_parents(child_node):
parent_nodes = graph.parent_nodes(child_node)
+ if not parent_nodes:
+ # With --prune, the highest version can be pulled in without any
+ # real parent since all installed packages are pulled in. In that
+ # case there's nothing to show here.
+ return
parent_nodes.sort()
msg = []
msg.append(" %s pulled in by:\n" % str(child_node))
elif action == "prune":
# Prune really uses all installed instead of world. It's not a real
# reverse dependency so don't display it as such.
- graph.remove("world")
+ if graph.contains("world"):
+ graph.remove("world")
for atom in args_set:
for pkg in vardb.match(atom):
if not fakedb.cpv_exists(pkg):
print " full dependency tree from the system list and the world file,"
print " then comparing it to installed packages. Packages installed, but"
print " not associated with an explicit merge are listed as candidates"
- print " for unmerging."+turquoise(" WARNING: This can seriously affect your system by")
- print " "+turquoise("removing packages that may have been linked against, but due to")
- print " "+turquoise("changes in USE flags may no longer be part of the dep tree. Use")
- print " "+turquoise("caution when employing this feature.")
+ print " for unmerging. Inexperienced users are advised to use --pretend"
+ print " with this option in order to see a preview of which packages will"
+ print " be uninstalled. "+turquoise(" WARNING: Removing some packages may cause")
+ print " "+turquoise("packages which link to the removed package to stop working and")
+ print " "+turquoise("complain about missing libraries. Rebuild the complaining package")
+ print " "+turquoise("to fix this issue.")+" Also see --with-bdeps for behavior with"
+ print " respect to build time dependencies that are not strictly"
+ print " required. Depclean serves as a dependency aware version of"
+ print " --unmerge. When given one or more atoms, it will unmerge matched"
+ print " packages that have no reverse dependencies. Use --depclean"
+ print " together with --verbose to show reverse dependencies."
print
print " "+green("--info")
print " Displays important portage variables that will be exported to"
print " Removes all but the highest installed version of a package"
print " from your system. This action doesn't verify the possible binary"
print " compatibility between versions and can thus remove essential"
- print " dependencies from your system."
- print " The argument format is the same as for the "+bold("--clean")+" action."
+ print " dependencies from your system. Use --prune together with"
+ print " --verbose to show reverse dependencies or with --nodeps to"
+ print " ignore all dependencies."
print
print " "+green("--regen")
print " Causes portage to check and update the dependency cache of all"
print
print " "+green("--unmerge")+" ("+green("-C")+" short option)"
print " "+turquoise("WARNING: This action can remove important packages!")
- print " Removes all matching packages "+bold("completely")+" from"
- print " your system. Specify arguments using the dependency specification"
- print " format described in the "+bold("--clean")+" action above."
+ 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"