• Mel Zuser's avatar
    Better support for running scripts. (#7851) · bbc11f1c
    Mel Zuser authored
    * Add support for script build caching to cabal run
    Enable caching of script builds by changing the location of the fake
    package directory from a tmp directory to:
    Resolves: #6354
    WIP: #7842
    * Add support for scripts to cabal build.
    Added module Distribution.Client.ScriptUtils for code to deal with
    scripts that is common between commands.
    WIP: #7842
    * Add script support to cabal clean.
    This changes the behaviour of cabal clean to accept extra args, which it
    now interprets as script files. The behaviour of cabal clean is the same
    when given extra args. When given extra args it instead removes the
    caches for those scripts and also any orphaned caches (caches for which
    the script no longer exists)
    In addition this commit changes the cache to use hashes of paths because
    this significantly simplifies the implementation of clean, and more
    importantly it prevents collisions when a script has the name of the
    subdirectory of a previously cached script.
    WIP: #7842
    * Add script support to cabal repl
    repl starts in the correct directory and points directly to rather than
    a dummy, so that reloading works properly.
    There is a downside to the current approach which is that it uses a
    different fake-project.cabal file from run and build, so it cannot share
    the same cache with them.
    WIP: #7842
    WIP: #6149
    * Added changelog for pr #7851
    * Fix `cabal run script.hs` issue with --builddir
    Fixes tests:
    * Fixes for `build script` and `repl script`
    - Fix build issue introduced in 079c5f0e, where build was being passed
    the wrong target filter
    - Fix repl issue where script didn't work in a project context.
    - Refactor code to share logic between repl and build/run
    - Ensure temp directories are only created when needed
    * Bug fixes relating to script support
    - Hash prefix for cache dirs was applied incorrectly.
    - Overwriting fake-package files causes repeated work in some cases.
    - Clean distdir for script when --builddir is passed
    - Always clean orphans because because there is no good way to specify
    they should be cleaned. This may be bad behaviour in some obscure cases
    (a cache is temporarily orphaned and an unrelated clean is run), but at
    worst results in a cache rebuild.
    * Add tests for improved script support
    - Basic script support for build/repl/clean which checks for cached
    project files
    - Add check for cached project files to basic run script test
    - No repeated work for build/build, build/run, run/run, and repl/repl
    - Clean does not remove cache for existing scripts
    - Clean does remove orphaned script caches
    * Fix clean bug uncovered by 5fad1214
    - clean was trying to read source-builds even if it didn't exist
    - add test specific to this case with other clean tests
    * Update documentation for better script support
    Ready for review: #7851
    May close: #7842, #6354, #6149
    * Attempt to fix `repl script` on Windows
    PR #7851
    * Attempt to fix remote test failures
    Test logs showed that the failures where because the tests depended on a
    module from cabal-install that some ghc versions could not find.
    Instead of depending on cabal-install, I copied the needed function into
    Test.Cabal.Prelude (It seemed like an acceptable place for it)
    PR #7851
    * Attempt to fix `repl script` on Windows
    PR #7851
    * Attempt to fix tests on old ghc versions
    Tests failing on pre-AMP ghcs due to unsanctioned use of (<$>)
    PR #7851
    * Feedback: Update docs and formatting
    PR #7851
    * Feedback: code style changes
    - remove partial selectors
    - make a constant for fake-package.cabal
    PR #7851
    * Feedback: make hidden control flow explicit
    PR #7851
    * Feedback: add expected fail script run tests
    PR #7851
    * Fix `repl script` when cwd is deeper than cachedir
    PR #7851
    * Use script in-place for build or run
    - Set the hs-source-dir to the location of the script for build and run,
      the same as with repl
    - This removes the need to copy the script
    - repl no longer needs a separate cache because all three commands
      use identical project files
    - Adds multi-module support to scripts for free (#6787)
    - Add new build/repl test and run multi-module test
    PR #7851
    * Fix file-locking issue on Windows
    PR #7851
    * Fix script recompilation based on cwd
    - Pass info about cwd to repl through --repl-options instead of hacking
      it into the project file.
    - Improve paths output by makeRelativeCanonical, makeRelativeToDir, and
    - Script multi-module support works, but with warning in repl.
    - Remove script multi-module mention support in docs.
    PR #7851
    * Make `repl script` respect --repl-no-load
    * Feedback: minor refactor
    Move argument truncation from targetStrings out of
    withScriptContextAndSelectors to runAction
    PR #7851
    * Feedback: refactor and comments for repl options
    PR #7851
    * Don't use hs-source-dirs for scripts.
    - instead pass absolute path to script in main-is
    - resolves issue with relative paths on Windows
    - simplifies code and gives prettier build output
    - update tests because build output has changed
    - removes ability to use multi-module scripts
      (which was never officially endorsed)
    - remove test for multi-module scripts
    - add checks for unsupported fields in scripts
    PR #7851
    * Update changelog for PR #7851