packages feed

hix-0.7.2: lib/Hix/Managed/StageState.hs

module Hix.Managed.StageState where

import qualified Data.Map.Strict as Map
import qualified Data.Set as Set

import qualified Hix.Managed.Data.MutableId
import qualified Hix.Managed.Data.Mutation
import Hix.Managed.Data.Mutation (DepMutation, MutationResult (..))
import Hix.Managed.Data.StageState (BuildSuccess (CandidateBuilt, Unmodified), StageState (..))

updateStageState ::
  StageState a s ->
  DepMutation a ->
  MutationResult s ->
  StageState a s
updateStageState old mutation = \case
  MutationSuccess {..} ->
    old {
      success = Map.insert candidate.name buildSuccess old.success,
      state,
      revisions = Set.union revisions old.revisions,
      ext
    }
    where
      buildSuccess | changed = CandidateBuilt candidate
                   | otherwise = Unmodified mutation.package
  MutationKeep ->
    old {success = Map.insert mutation.package (Unmodified mutation.package) old.success}
  MutationFailed ->
    old {failed = mutation : old.failed}