cabal-clean
Remove outdated cabal build artefacts from `dist-newstyle`.
https://github.com/andreasabel/cabal-clean
| LTS Haskell 24.33: | 0.2.20230609 |
| Stackage Nightly 2026-03-13: | 0.2.20230609 |
| Latest on Hackage: | 0.2.20230609 |
cabal-clean-0.2.20230609@sha256:83e50ca35182de4c7d480f7cc7a23ae1dcf061bd13cfd178b61e546057d78b43,1979Module documentation for 0.2.20230609
There are no documented modules for this package.
cabal-clean : Remove superseded artefacts of cabal v2-build
Removes compilation artefacts in dist-newstyle/build from older
versions of the package or superseded minor versions of GHC.
For the impatient
Installation
cabal install cabal-clean
Run
cd $MY_PROJECT
cabal-clean
This lists the build artifacts under dist-newstyle/build.
--- 191M dist-newstyle/build/x86_64-osx/ghc-7.10.3/$MY_PROJECT-2.9.2
--- 72M dist-newstyle/build/x86_64-osx/ghc-8.10.4/$MY_PROJECT-2.9.2
--- 162M dist-newstyle/build/x86_64-osx/ghc-9.0.1/$MY_PROJECT-2.9.2
+++ 135M dist-newstyle/build/x86_64-osx/ghc-7.10.3/$MY_PROJECT-2.9.3
--- 70M dist-newstyle/build/x86_64-osx/ghc-8.10.4/$MY_PROJECT-2.9.3
+++ 145M dist-newstyle/build/x86_64-osx/ghc-8.10.7/$MY_PROJECT-2.9.3
--- 159M dist-newstyle/build/x86_64-osx/ghc-9.0.1/$MY_PROJECT-2.9.3
The superseded ones (assuming ghc-9.0.1 is not on the PATH),
printed in red and prefixed by dashes (---),
can then be removed by:
cabal-clean --delete
Rationale
v2-cabal (the nix-based cabal) maintains a directory structure for
local builds of the form
dist-newstyle/build/$ARCH/$HC/$PACKAGE-$VERSION (plus other stuff
that does not take up much disk space). During active development
with several $HC versions and $VERSION bumps for the $PACKAGE,
lots of out-dated build artefacts accumulate over time.
A simple way to clean up is removing the whole dist-newstyle folder,
but one might want to keep the build artefacts of the most recent
package $VERSIONs of the most recent versions of the Haskell
compiler ($HC).
Philosophy
-
Go for saving the most disk space with the simplest approach, rather than a complete clean-up. E.g., don’t care about outdated contents in
dist-newstyle/package-dbas they take little space. -
Keep only the most recent
$VERSIONof the package. -
Keep only the most recent major versions of
$HC. -
Keep only versions build with a
$HCwhich is still on the PATH (since version 0.2). -
Assume a monopoly of GHC, ignoring other Haskell compilers, so only treat
$HCs of the formghc-$GHCVER. -
Work autonomously, ignoring
cabalfiles. This saves us parsing various home-growncabalfile formats. The latter could be easy using theCabalpackage, but this package is not very stable, and we shy the maintenance effort of depending onCabal. -
Dry-run is the default, giving the user opportunity to review the clean-up plan.
Functionality
-
Read the contents of
dist-newstyle/build, organizing them into a tree according to the pattern$ARCH/ghc-$GHCVER/$PACKAGE-$VERSION. -
Display the outdated versions.
Try to get the disk usage with
du -hand display it. (I could not find a Haskell library that gets the disk usage OS-agnostically.) -
With option
--deleteactually remove the respective folders.
Examples
List build artifacts of current project, marking superseded ones that can be deleted:
cabal-clean
Actually delete superseded builds:
cabal-clean --delete
Delete superseded builds without changing to directory:
cabal-clean --delete path/to/my/project/dist-newstyle
Delete superseded builds in many projects:
find . -name "dist-newstyle" -exec cabal-clean --delete {} \;
Get help:
cabal-clean --help
Related
cabal v2-clean (as of 2021-08-16)
- Removes all build artefacts.
- Does not have a
--dry-runpreview.
Changes
0.2.20230609
Build with optparse-applicative-0.18:
PR #4 by Sanchayan Maity.
0.2.20220819
Also remove builds with GHCs which are no longer on the PATH.
0.1.20220814
Windows: Fix crash when du is not available.
0.1.20210924
Added one-line report on how many directories are (or could be) removed.
0.1.20210815
Initial release.