Spack can automatically remove unused specs (#13534)
* Spack can uninstall unused specs fixes #4382 Added an option to spack uninstall that removes all unused specs i.e. build dependencies or transitive dependencies that are left in the store after the specs that pulled them in have been removed. * Moved the functionality to its own command The command has been named 'spack autoremove' to follow the naming used for the same functionality by other widely known package managers i.e. yum and apt. * Speed-up autoremoving specs by not locking and re-reading the scratch DB * Make autoremove work directly on Spack's store * Added unit tests for the new command * Display a terser output to the user * Renamed the "autoremove" command "gc" Following discussion there's more consensus around the latter name. * Preserve root specs in env contexts * Instead of preserving specs, restrict gc to the active environment * Added docs * Added a unit test for gc within an environment * Updated copyright to 2020 * Updated documentation according to review Rephrased a couple of sentences, added references to `spack find` and dependency types. * Updated function naming and docstrings * Simplified computation of unused specs Since the new approach uses private attributes of the DB it has been coded as a method of that class rather than a freestanding function.
This commit is contained in:

committed by
Todd Gamblin

parent
eddb42ed43
commit
08d0267c9a
@@ -232,6 +232,50 @@ remove dependent packages *before* removing their dependencies or use the
|
||||
|
||||
.. _nondownloadable:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
Garbage collection
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
When Spack builds software from sources, if often installs tools that are needed
|
||||
just to build or test other software. These are not necessary at runtime.
|
||||
To support cases where removing these tools can be a benefit Spack provides
|
||||
the ``spack gc`` ("garbage collector") command, which will uninstall all unneeded packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack find
|
||||
==> 24 installed packages
|
||||
-- linux-ubuntu18.04-broadwell / gcc@9.0.1 ----------------------
|
||||
autoconf@2.69 findutils@4.6.0 libiconv@1.16 libszip@2.1.1 m4@1.4.18 openjpeg@2.3.1 pkgconf@1.6.3 util-macros@1.19.1
|
||||
automake@1.16.1 gdbm@1.18.1 libpciaccess@0.13.5 libtool@2.4.6 mpich@3.3.2 openssl@1.1.1d readline@8.0 xz@5.2.4
|
||||
cmake@3.16.1 hdf5@1.10.5 libsigsegv@2.12 libxml2@2.9.9 ncurses@6.1 perl@5.30.0 texinfo@6.5 zlib@1.2.11
|
||||
|
||||
$ spack gc
|
||||
==> The following packages will be uninstalled:
|
||||
|
||||
-- linux-ubuntu18.04-broadwell / gcc@9.0.1 ----------------------
|
||||
vn47edz autoconf@2.69 6m3f2qn findutils@4.6.0 ubl6bgk libtool@2.4.6 pksawhz openssl@1.1.1d urdw22a readline@8.0
|
||||
ki6nfw5 automake@1.16.1 fklde6b gdbm@1.18.1 b6pswuo m4@1.4.18 k3s2csy perl@5.30.0 lp5ya3t texinfo@6.5
|
||||
ylvgsov cmake@3.16.1 5omotir libsigsegv@2.12 leuzbbh ncurses@6.1 5vmfbrq pkgconf@1.6.3 5bmv4tg util-macros@1.19.1
|
||||
|
||||
==> Do you want to proceed? [y/N] y
|
||||
|
||||
[ ... ]
|
||||
|
||||
$ spack find
|
||||
==> 9 installed packages
|
||||
-- linux-ubuntu18.04-broadwell / gcc@9.0.1 ----------------------
|
||||
hdf5@1.10.5 libiconv@1.16 libpciaccess@0.13.5 libszip@2.1.1 libxml2@2.9.9 mpich@3.3.2 openjpeg@2.3.1 xz@5.2.4 zlib@1.2.11
|
||||
|
||||
In the example above Spack went through all the packages in the DB
|
||||
and removed everything that is not either:
|
||||
|
||||
1. A package installed upon explicit request of the user
|
||||
2. A ``link`` or ``run`` dependency, even transitive, of one of the packages at point 1.
|
||||
|
||||
You can check :ref:`cmd-spack-find-metadata` to see how to query for explicitly installed packages
|
||||
or :ref:`dependency-types` for a more thorough treatment of dependency types.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Non-Downloadable Tarballs
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -414,6 +458,8 @@ Packages are divided into groups according to their architecture and
|
||||
compiler. Within each group, Spack tries to keep the view simple, and
|
||||
only shows the version of installed packages.
|
||||
|
||||
.. _cmd-spack-find-metadata:
|
||||
|
||||
""""""""""""""""""""""""""""""""
|
||||
Viewing more metadata
|
||||
""""""""""""""""""""""""""""""""
|
||||
|
@@ -1950,6 +1950,8 @@ issues with 1.64.0, 1.65.0, and 1.66.0, you can say:
|
||||
depends_on('boost@1.59.0:1.63,1.65.1,1.67.0:')
|
||||
|
||||
|
||||
.. _dependency-types:
|
||||
|
||||
^^^^^^^^^^^^^^^^
|
||||
Dependency types
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
Reference in New Issue
Block a user