Plutonomicon / cardano-transaction-lib

A Purescript library for building smart contract transactions on Cardano
https://plutonomicon.github.io/cardano-transaction-lib/
MIT License
91 stars 52 forks source link

Make `cleanupTmpDir` asyncronous (returning `Aff`) #1619

Open Renegatto opened 2 months ago

Renegatto commented 2 months ago

Why

This will allow a caller to work with it more accurately, catching errors if needed.

Affected issues

It should partially fix #1580, to be precise it could allow fixing incomplete Plutip cluster cleanup after tests.

Calling cleanupTmpDir from startKupo' like this

  _ <- Aff.forkAff $ logErrorWhenLeft =<< try (cleanupTmpDir process workdir)

Would prevent any event handler error from killing the app before the full plutip cluster cleanup is done.

Implementation

cleanupTmpDir :: ManagedProcess -> FilePath -> Aff Unit
cleanupTmpDir (ManagedProcess _ child _) workingDir =
  Aff.makeAff \callback -> do
    isCancelled <- Ref.new false
    let
      cancel = void $ Ref.modify (const true) isCancelled 
    ChildProcess.onExit child \_ ->
      Ref.read isCancelled >>= flip unless do
        try (_rmdirSync workingDir) >>= callback
    pure $ Aff.effectCanceler cancel