packages feed

hix 0.9.0 → 0.9.1

raw patch · 36 files changed

+280/−141 lines, 36 filesdep ~hix

Dependency ranges changed: hix

Files

hix.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           hix-version:        0.9.0+version:        0.9.1 synopsis:       Haskell/Nix development build tools description:    See https://hackage.haskell.org/package/hix/docs/Hix.html category:       Build@@ -99,6 +99,7 @@       Hix.Managed.Cabal.Data.InstalledOverrides       Hix.Managed.Cabal.Data.Packages       Hix.Managed.Cabal.Data.Revision+      Hix.Managed.Cabal.Data.SolvedId       Hix.Managed.Cabal.Data.SolveResources       Hix.Managed.Cabal.Data.SolverState       Hix.Managed.Cabal.Data.SolveTarget@@ -394,7 +395,7 @@     , generic-lens ==2.2.*     , generics-sop ==0.5.*     , hedgehog >=1.1 && <1.5-    , hix:hix ==0.9.0+    , hix:hix ==0.9.1     , http-client ==0.7.*     , http-client-tls ==0.3.*     , http-types ==0.12.*@@ -556,7 +557,7 @@     , extra ==1.7.*     , hedgehog >=1.1 && <1.5     , hix-    , hix:testing ==0.9.0+    , hix:testing ==0.9.1     , incipit-base >=0.5 && <0.7     , path ==0.9.*     , path-io >=1.7 && <1.9
lib/Hix.hs view
@@ -20,7 +20,7 @@ import Hix.Preproc (preprocess)  hixVersion :: Text-hixVersion = "0.9.0"+hixVersion = "0.9.1"  runCommand :: Command -> M () runCommand = \case
lib/Hix/Class/Map.hs view
@@ -792,3 +792,10 @@   Bool nMember k =   Map.member k . nGet++nNull ::+  NMap map k v sort =>+  map ->+  Bool+nNull =+  null . nGet
lib/Hix/Console.hs view
@@ -49,6 +49,9 @@ color n =   sgis [show (30 + n)] +bold :: Text -> Text+bold = sgis ["1"]+ data ColorOffsets =   ColorOffsets {     black :: Int,
lib/Hix/Managed/Build.hs view
@@ -22,11 +22,13 @@ import Hix.Managed.Build.Solve (solveMutation) import qualified Hix.Managed.Cabal.Changes import Hix.Managed.Cabal.Config (isNonReinstallableDep, isReinstallableId)+import Hix.Managed.Cabal.Data.SolvedId (SolvedId (..)) import Hix.Managed.Cabal.Data.SolverState (SolverState) import qualified Hix.Managed.Data.BuildConfig import Hix.Managed.Data.BuildConfig (BuildConfig) import qualified Hix.Managed.Data.EnvContext import Hix.Managed.Data.EnvContext (EnvContext)+import Hix.Managed.Data.Initial (Initial (..)) import Hix.Managed.Data.Mutable (MutableDep, addBuildVersions) import qualified Hix.Managed.Data.Mutation import Hix.Managed.Data.Mutation (BuildMutation (BuildMutation), DepMutation, MutationResult (..))@@ -61,7 +63,7 @@ logBuildInputs ::   EnvName ->   Text ->-  [PackageId] ->+  [SolvedId] ->   M () logBuildInputs env description overrides = do   Log.info [exon|Building targets in #{Color.env env} with #{Color.package description}...|]@@ -107,7 +109,7 @@   Text ->   Bool ->   Versions ->-  [PackageId] ->+  [SolvedId] ->   M (Overrides, BuildStatus) buildVersions builder context description allowRevisions versions overrideVersions = do   logBuildInputs context.env description reinstallable@@ -115,7 +117,7 @@   logBuildResult description result   pure (overrides, buildStatus result)   where-    reinstallable = filter isReinstallableId overrideVersions+    reinstallable = filter (isReinstallableId . (.package)) overrideVersions  buildConstraints ::   EnvBuilder ->@@ -152,7 +154,7 @@  logMutationResult ::   MutableDep ->-  MutationResult s ->+  MutationResult ->   M () logMutationResult package = \case   MutationSuccess {candidate, changed = True} ->@@ -167,10 +169,10 @@ validateMutation ::   EnvBuilder ->   EnvContext ->-  MutationHandlers a s ->-  StageState a s ->+  MutationHandlers a ->+  StageState a SolverState ->   DepMutation a ->-  M (StageState a s)+  M (StageState a SolverState) validateMutation envBuilder context handlers stageState mutation = do   result <- processReinstallable   logMutationResult mutation.package result@@ -179,19 +181,19 @@     processReinstallable =       if isNonReinstallableDep mutation.package       then pure MutationKeep-      else handlers.process stageState.ext mutation build+      else handlers.process (Initial stageState.ext) mutation build      build = buildMutation envBuilder context stageState.state  convergeMutations ::   Pretty a =>-  MutationHandlers a s ->+  MutationHandlers a ->   BuildConfig ->   EnvBuilder ->   EnvContext ->-  StageState a s ->+  StageState a SolverState ->   [DepMutation a] ->-  M (StageState a s)+  M (StageState a SolverState) convergeMutations handlers conf builder context state0 =   spin state0 {iterations = 0}   where@@ -235,16 +237,16 @@ processQuery ::   Pretty a =>   (QueryDep -> M (Maybe (DepMutation a))) ->-  MutationHandlers a s ->+  MutationHandlers a ->   BuildConfig ->   StageContext ->-  s ->-  M (StageState a s)-processQuery candidates handlers conf StageContext {env, builder, state, query = query} ext = do+  Initial SolverState ->+  M (StageState a SolverState)+processQuery candidates handlers conf StageContext {env, builder, state, query = query} solverState = do   mutations <- postprocess =<< reinstallableCandidates candidates query   convergeMutations handlers conf builder env stageState mutations   where     postprocess | conf.toposortMutations = sortMutations                 | otherwise = pure-    stageState = initStageState state ext+    stageState = initStageState state solverState     CabalHandlers {sortMutations} = builder.cabal
lib/Hix/Managed/Build/Single.hs view
@@ -8,6 +8,7 @@ import Hix.Managed.Constraints (fromVersions) import qualified Hix.Managed.Data.EnvContext import Hix.Managed.Data.EnvContext (EnvContext)+import Hix.Managed.Data.Initial (initial) import Hix.Managed.Data.Mutable (MutableVersions) import Hix.Managed.Data.StageState (BuildStatus (Failure)) import Hix.Managed.Handlers.Build (EnvBuilder)@@ -22,7 +23,7 @@   Maybe Overrides ->   M BuildStatus buildVersions builder context description versions prevOverrides =-  buildConstraints builder context description False (fold prevOverrides) solver <&> \case+  buildConstraints builder context description False (fold prevOverrides) (initial solver) <&> \case     Just (_, _, status) -> status     Nothing -> Failure   where
lib/Hix/Managed/Build/Solve.hs view
@@ -1,6 +1,5 @@ module Hix.Managed.Build.Solve where -import Data.List (partition) import qualified Data.Set as Set import Distribution.PackageDescription (customFieldsPD) import Distribution.Pretty (pretty)@@ -8,12 +7,14 @@ import Text.PrettyPrint (hang, ($$), (<+>))  import Hix.Class.Map (nRestrictKeys)+import Hix.Console (bold) import Hix.Data.Monad (M) import Hix.Data.PackageId (PackageId) import Hix.Data.Version (packageIdVersions) import qualified Hix.Log as Log import qualified Hix.Managed.Cabal.Changes import Hix.Managed.Cabal.Changes (SolverChanges (SolverChanges), SolverPlan (SolverPlan))+import Hix.Managed.Cabal.Data.SolvedId (SolvedId (..), revisedId, unrevisedId) import qualified Hix.Managed.Cabal.Data.SolverState import Hix.Managed.Cabal.Data.SolverState (SolverState) import qualified Hix.Managed.Data.EnvContext@@ -26,7 +27,7 @@  logNonReinstallable :: NonEmpty PackageId -> M () logNonReinstallable ids =-  Log.verbose [exon|NOTE: Cabal solver suggested new versions for non-reinstallable packages: #{showPL ids}|]+  Log.verbose [exon|#{bold "Note"}: Cabal solver suggested new versions for non-reinstallable packages: #{showPL ids}|]  -- | Forcing revisions means that any package that has a revision in the Hackage snapshot will be treated as an -- override, i.e. it will be built from Hackage despite having the same version as the one installed in nixpkgs.@@ -43,16 +44,21 @@ checkRevision ::   Bool ->   CabalHandlers ->+  Set PackageId ->   PackageId ->-  Either PackageId PackageId-checkRevision forceRevisions cabal package+  Either SolvedId SolvedId+checkRevision forceRevisions cabal prevRevisions package+  | Set.member package prevRevisions+  = Right revision   | forceRevisions   , Just packageDesc <- cabal.sourcePackage package   , any isRevision packageDesc.customFieldsPD-  = Right package+  = Right revision   | otherwise-  = Left package+  = Left (unrevisedId package)   where+    revision = revisedId package+     isRevision = \case       ("x-revision", rev) | rev /= "0" -> True       _ -> False@@ -67,20 +73,22 @@ processSolverPlan forceRevisions cabal deps prevRevisions SolverPlan {..} = do   Log.debugP $     hang "New project deps from solver:" 2 (pretty projectDeps) $$-    "Forced revisions:" <+> prettyL forcedRevisions $$-    "Reused revisions:" <+> prettyL reusedRevisions+    "Revisions:" <+> prettyL revisions   traverse_ logNonReinstallable nonReinstallable   pure SolverChanges {versions, overrides}   where     projectDeps = nRestrictKeys mutablePIds versions-    versions = packageIdVersions (overrides ++ installed)-    overrides = changes ++ forcedRevisions ++ reusedRevisions++    versions = packageIdVersions ((.package) <$> (overrides ++ installed))++    overrides = (unrevisedId <$> changes) ++ revisions+     -- If a package has been selected for revision during a prior build, add it to the overrides despite its matching     -- version.     -- This simply ensures that the revision procedure can be skipped in this build, since the same version will likely     -- cause the same dependency bounds error that triggered the revision.-    (reusedRevisions, installed) = partition (flip Set.member prevRevisions) noForcedRevisions-    (noForcedRevisions, forcedRevisions) = partitionEithers (checkRevision forceRevisions cabal <$> matching)+    (installed, revisions) = partitionEithers (checkRevision forceRevisions cabal prevRevisions <$> matching)+     mutablePIds = Set.fromList (depName <$> Set.toList deps.mutable)  -- TODO probably best to store the revisions in the SolverState
lib/Hix/Managed/Build/SolverPackages.hs view
@@ -15,6 +15,7 @@ import Hix.Managed.Data.StageState (BuildResult (..)) import Hix.Monad (appContext, eitherFatal) import Hix.Pretty (showP)+import Hix.Class.Map (nNull)  badOutput :: Text -> Text badOutput output = [exon|The output of building the solver package set is not a single valid store path: #{output}|]@@ -49,9 +50,12 @@     leftA cleanBuild =<< previousBuild   where     cleanBuild err = do-      Log.verbose "Build with previous solver overrides failed"+      Log.info+        if nNull storedOverrides+        then "Vanilla package set doesn't build. Computing overrides..."+        else "Build with previous solver overrides failed. Recomputing overrides..."       Log.debug err-      appContext "computing the overrides for the solver package set" do+      appContext "computing new overrides for the solver package set" do         solverResult =<< runStateT (build (suggestJailbreakAndLatestVersion resources)) (mempty, mempty)      previousBuild = do
lib/Hix/Managed/Build/Target.hs view
@@ -19,6 +19,7 @@   ) import Hix.Managed.Build.NixOutput.Analysis (FailureReason (..)) import Hix.Managed.Build.NixProcess (nixBuild)+import Hix.Managed.Cabal.Data.SolvedId (SolvedId) import Hix.Managed.Data.BuildConfig (BuildConfig) import Hix.Managed.Data.StageState (BuildResult (..), buildUnsuccessful) import Hix.Managed.Data.Targets (Targets, firstMTargets)@@ -132,7 +133,7 @@   EnvBuilderResources ->   Bool ->   Versions ->-  [PackageId] ->+  [SolvedId] ->   M (BuildResult, Overrides) buildTargets builder allowRevisions _ overrideVersions = do   overrides <- packageOverrides builder.global.hackage builder.localUnavailable overrideVersions
lib/Hix/Managed/Cabal/Changes.hs view
@@ -10,6 +10,7 @@ import Distribution.Solver.Types.SourcePackage (SourcePackage (..)) import Text.PrettyPrint (hang, ($+$)) +import Hix.Managed.Cabal.Data.SolvedId (SolvedId) import qualified Hix.Data.PackageId as PackageId import Hix.Data.PackageId (PackageId) import Hix.Data.Version (Versions)@@ -56,14 +57,10 @@ data SolverChanges =   SolverChanges {     versions :: Versions,-    overrides :: [PackageId]-    --   ,-    -- projectDeps :: Versions+    overrides :: [SolvedId]   }   deriving stock (Eq, Show, Generic)  instance Pretty SolverChanges where   pretty SolverChanges {..} =     hang "overrides:" 2 (prettyL overrides)-    -- $+$-    -- hang "projectDeps:" 2 (pretty projectDeps)
+ lib/Hix/Managed/Cabal/Data/SolvedId.hs view
@@ -0,0 +1,28 @@+module Hix.Managed.Cabal.Data.SolvedId where++import Distribution.Pretty (Pretty (..))+import Text.PrettyPrint (brackets, (<+>))++import Hix.Data.Overrides (IsRevision (..))+import Hix.Data.PackageId (PackageId)++data SolvedId =+  SolvedId {+    package :: PackageId,+    revision :: Maybe IsRevision+  }+  deriving stock (Eq, Show)++instance Pretty SolvedId where+  pretty SolvedId {..} =+    pretty package <+> foldMap renderRevision revision+    where+      renderRevision = \case+        IsRevision -> brackets "rev"+        IsNotRevision -> ""++revisedId :: PackageId -> SolvedId+revisedId package = SolvedId {package, revision = Just IsRevision}++unrevisedId :: PackageId -> SolvedId+unrevisedId package = SolvedId {package, revision = Nothing}
lib/Hix/Managed/Cabal/Data/SolverState.hs view
@@ -17,6 +17,7 @@ import Hix.Managed.Data.Constraints (EnvConstraints) import qualified Hix.Managed.Data.EnvContext import Hix.Managed.Data.EnvContext (EnvDeps)+import Hix.Managed.Data.Initial (Initial (..)) import Hix.Managed.Data.Mutable (MutableDep, depName)  data SolverFlags =@@ -64,9 +65,9 @@   EnvDeps ->   EnvConstraints ->   SolverFlags ->-  SolverState+  Initial SolverState solverState user deps modeConstraints flags =-  UnsafeSolverState constraints flags+  Initial (UnsafeSolverState constraints flags)   where     constraints =       modeConstraints <>
lib/Hix/Managed/Data/Initial.hs view
@@ -12,3 +12,6 @@  instance Pretty a => Pretty (Initial a) where   pretty (Initial a) = pretty a++initial :: Initial a -> a+initial = coerce
lib/Hix/Managed/Data/Mutation.hs view
@@ -35,12 +35,12 @@   }   deriving stock (Generic) -data MutationResult s =+data MutationResult =   MutationSuccess {     candidate :: MutableId,     changed :: Bool,     state :: MutationState,-    ext :: s+    solverState :: SolverState   }   |   MutationKeep
lib/Hix/Managed/Data/StageState.hs view
@@ -5,7 +5,7 @@  import Hix.Data.Error (Error) import Hix.Data.PackageId (PackageId)-import Hix.Managed.Data.Initial (Initial (Initial))+import Hix.Managed.Data.Initial (Initial (..)) import Hix.Managed.Data.Mutable (MutableDep) import qualified Hix.Managed.Data.MutableId import Hix.Managed.Data.MutableId (MutableId (MutableId))@@ -99,6 +99,6 @@   }   deriving stock (Eq, Show) -initStageState :: Initial MutationState -> s -> StageState a s-initStageState (Initial state) ext =-  StageState {success = [], failed = [], iterations = 0, ..}+initStageState :: Initial MutationState -> Initial s -> StageState a s+initStageState (Initial state) (Initial ext) =+  StageState {success = [], failed = [], iterations = 0, state, ..}
lib/Hix/Managed/Handlers/Build.hs view
@@ -4,16 +4,16 @@  import Hix.Data.Monad (M) import Hix.Data.Overrides (Overrides)-import Hix.Data.PackageId (PackageId) import Hix.Data.PackageName (LocalPackage) import Hix.Data.Version (Versions) import Hix.Managed.Cabal.Changes (SolverPlan) import Hix.Managed.Cabal.Data.Config (GhcDb (..)) import Hix.Managed.Cabal.Data.InstalledOverrides (InstalledOverrides)+import Hix.Managed.Cabal.Data.SolvedId (SolvedId) import Hix.Managed.Data.Constraints (EnvConstraints) import Hix.Managed.Data.EnvContext (EnvContext (..)) import Hix.Managed.Data.EnvState (EnvState)-import Hix.Managed.Data.Initial (Initial (..))+import Hix.Managed.Data.Initial (Initial, initial) import Hix.Managed.Data.ManagedPackage (ProjectPackages) import Hix.Managed.Data.StageState (BuildFailure (UnknownFailure), BuildResult (BuildFailure)) import qualified Hix.Managed.Handlers.AvailableVersions as AvailableVersions@@ -41,7 +41,7 @@   EnvBuilder {     state :: EnvState,     cabal :: CabalHandlers,-    buildTargets :: Bool -> Versions -> [PackageId] -> M (BuildResult, Overrides)+    buildTargets :: Bool -> Versions -> [SolvedId] -> M (BuildResult, Overrides)   }  data Builder =@@ -61,23 +61,23 @@   }  testBuilder ::-  (Bool -> Versions -> [PackageId] -> M (BuildResult, Overrides)) ->+  (Bool -> Versions -> [SolvedId] -> M (BuildResult, Overrides)) ->   (Builder -> M a) ->   M a testBuilder buildTargets use =   use Builder {-    withEnvBuilder = \ EnvBuilderContext {initCabal, env = EnvContext {ghc}, initialState = Initial state} useE -> do+    withEnvBuilder = \ EnvBuilderContext {initCabal, env = EnvContext {ghc}, initialState} useE -> do       ghcDb <- noteClient "Test builder needs an explicit GHC DB" ghc       (cabal, _) <- initCabal.run mempty ghcDb-      useE EnvBuilder {..} (Initial state)+      useE EnvBuilder {state = initial initialState, ..} initialState   } -versionsBuilder :: SourceHashHandlers -> (Versions -> M BuildResult) -> (Builder -> M a) -> M a+versionsBuilder :: SourceHashHandlers -> (Versions -> M (BuildResult, Overrides)) -> (Builder -> M a) -> M a versionsBuilder hackage build =   testBuilder \ _ versions overrideVersions -> do     overrides <- packageOverrides hackage mempty overrideVersions-    status <- build versions-    pure (status, overrides)+    (status, revisions) <- build versions+    pure (status, revisions <> overrides)  handlersNull :: BuildHandlers handlersNull =
lib/Hix/Managed/Handlers/Build/Prod.hs view
@@ -16,11 +16,12 @@ import Hix.Managed.Build.SolverPackages (solverGhc) import Hix.Managed.Build.Target (BuilderResources (..), EnvBuilderResources (..), buildTargets) import qualified Hix.Managed.Cabal.Data.Config as CabalConfig-import Hix.Managed.Cabal.Data.Config (CabalConfig (..), HackagePurpose (ForVersions), allHackages)+import Hix.Managed.Cabal.Data.Config (CabalConfig (..), GhcDb, HackagePurpose (ForVersions), allHackages) import Hix.Managed.Cabal.Data.InstalledOverrides (InstalledOverrides (..)) import Hix.Managed.Data.BuildConfig (BuildConfig) import Hix.Managed.Data.EnvContext (EnvContext (..)) import Hix.Managed.Data.EnvState (EnvState (..))+import qualified Hix.Managed.Data.Initial as Initial import Hix.Managed.Data.Initial (Initial (..)) import Hix.Managed.Data.ManagedPackage (ProjectPackages) import Hix.Managed.Handlers.AvailableVersions (AvailableVersionsHandlers)@@ -53,8 +54,8 @@         use tmpRoot     \ (err :: IOError) -> throwM (Fatal (show err)) -storeSolverOverrides :: Overrides -> Initial EnvState -> EnvState-storeSolverOverrides new (Initial EnvState {..}) =+storeSolverOverrides :: Overrides -> EnvState -> EnvState+storeSolverOverrides new EnvState {..} =   EnvState {solver = new, ..}  -- | Determine the set of package IDs that should not be treated as installed in the solver package set when Cabal@@ -84,18 +85,28 @@     Jailbreak -> Nothing     Local -> Nothing +withSolverOverrides ::+  GhcDb ->+  EnvState ->+  BuilderResources ->+  EnvBuilderContext ->+  (EnvBuilder -> Initial EnvState -> M a) ->+  M a+withSolverOverrides ghc state global EnvBuilderContext {initCabal, env = EnvContext {env, targets}} use = do+  (cabal, localUnavailable) <- initCabal.run (installedOverrides state) ghc+  use EnvBuilder {buildTargets = buildTargets EnvBuilderResources {..}, ..} (Initial state)+ withEnvBuilder ::   ∀ a .   BuilderResources ->   EnvBuilderContext ->   (EnvBuilder -> Initial EnvState -> M a) ->   M a-withEnvBuilder global EnvBuilderContext {initCabal, env = EnvContext {env, targets, ghc}, initialState} use = do-  (resolvedGhc, solverOverrides) <- solverGhc global env ((.solver) <$> initialState) ghc-  let state = maybe (.value) storeSolverOverrides solverOverrides initialState-  (cabal, localUnavailable) <- initCabal.run (installedOverrides state) resolvedGhc+withEnvBuilder global context@EnvBuilderContext {env = EnvContext {env, ghc}, initialState} use = do   writeInitialEnvState global.stateFile global.root env initialState-  use EnvBuilder {buildTargets = buildTargets EnvBuilderResources {..}, ..} (Initial state)+  (resolvedGhc, solverOverrides) <- solverGhc global env ((.solver) <$> initialState) ghc+  let state = maybe id storeSolverOverrides solverOverrides (Initial.initial initialState)+  withSolverOverrides resolvedGhc state global context use  withBuilder ::   SourceHashHandlers ->
lib/Hix/Managed/Handlers/Build/Test.hs view
@@ -5,6 +5,7 @@  import Hix.Data.Monad (M) import Hix.Data.NixExpr (Expr)+import Hix.Data.Overrides (Overrides) import qualified Hix.Data.PackageId import Hix.Data.PackageId (PackageId) import Hix.Data.PackageName (PackageName)@@ -28,7 +29,7 @@ handlersUnitTest ::   MonadIO m =>   GhcPackages ->-  (Versions -> M BuildResult) ->+  (Versions -> M (BuildResult, Overrides)) ->   m (BuildHandlers, IORef [Expr], IORef [FailedMutation]) handlersUnitTest ghcPackages builder = do   (stateFile, stateFileRef) <- StateFile.handlersUnitTest
lib/Hix/Managed/Handlers/Mutation.hs view
@@ -1,14 +1,16 @@ module Hix.Managed.Handlers.Mutation where  import Hix.Data.Monad (M)+import Hix.Managed.Cabal.Data.SolverState (SolverState)+import Hix.Managed.Data.Initial (Initial) import Hix.Managed.Data.Mutation (BuildMutation, DepMutation, MutationResult) import Hix.Managed.Data.MutationState (MutationState) -data MutationHandlers a s =+data MutationHandlers a =   MutationHandlers {     process ::-      s ->+      Initial SolverState ->       DepMutation a ->       (BuildMutation -> M (Maybe MutationState)) ->-      M (MutationResult s)+      M MutationResult   }
lib/Hix/Managed/Handlers/Mutation/Bump.hs view
@@ -12,6 +12,7 @@ import Hix.Managed.Data.Bump (Bump (Bump)) import qualified Hix.Managed.Data.Constraints import Hix.Managed.Data.Constraints (MutationConstraints (MutationConstraints))+import Hix.Managed.Data.Initial (Initial, initial) import Hix.Managed.Data.MutableId (MutableId) import qualified Hix.Managed.Data.Mutation import Hix.Managed.Data.Mutation (@@ -33,18 +34,18 @@  -- TODO Avoid building unchanged candidates after the first build of the same set of deps. processMutationBump ::-  SolverState ->+  Initial SolverState ->   DepMutation Bump ->   (BuildMutation -> M (Maybe MutationState)) ->-  M (MutationResult SolverState)-processMutationBump solver DepMutation {package, mutation = Bump {version, changed}} build =+  M MutationResult+processMutationBump solverState DepMutation {package, mutation = Bump {version, changed}} build =   builder version <&> \case-    Just (candidate, ext, state) ->-      MutationSuccess {candidate, changed, state, ext}+    Just (candidate, solverResult, state) ->+      MutationSuccess {candidate, changed, state, solverState = solverResult}     Nothing ->       MutationFailed   where-    builder = buildCandidate build updateBound updateConstraintsBump solver package+    builder = buildCandidate build updateBound updateConstraintsBump (initial solverState) package -handlersBump :: MutationHandlers Bump SolverState+handlersBump :: MutationHandlers Bump handlersBump = MutationHandlers {process = processMutationBump}
lib/Hix/Managed/Handlers/Mutation/Lower.hs view
@@ -16,6 +16,7 @@ import qualified Hix.Managed.Data.BuildConfig import Hix.Managed.Data.BuildConfig (BuildConfig) import Hix.Managed.Data.Constraints (MutationConstraints)+import Hix.Managed.Data.Initial (Initial, initial) import qualified Hix.Managed.Data.Lower import Hix.Managed.Data.Lower (Lower (Lower)) import Hix.Managed.Data.MutableId (MutableId)@@ -36,14 +37,14 @@   BuildConfig ->   LowerMode ->   (Bool -> MutableId -> PackageId -> MutationConstraints -> MutationConstraints) ->-  SolverState ->+  Initial SolverState ->   DepMutation Lower ->   (BuildMutation -> M (Maybe MutationState)) ->-  M (MutationResult SolverState)-processMutationLower conf mode update solver DepMutation {package, retract, mutation = Lower {majors}} build = do+  M MutationResult+processMutationLower conf mode update solverInit DepMutation {package, retract, mutation = Lower {majors}} build = do   foldM buildMajor (Right 0, Nothing) majors <&> \case-    (_, Just (candidate, ext, state)) ->-      MutationSuccess {candidate, changed = True, state, ext}+    (_, Just (candidate, solverResult, state)) ->+      MutationSuccess {candidate, changed = True, state, solverState = solverResult}     (_, Nothing) ->       mode.noSuccess   where@@ -72,12 +73,12 @@           Just result -> (Left 0, Just result)           Nothing -> (bimap (+ 1) (+ 1) failed, prev) -    builder = buildCandidate build withLower (update retract) solver package+    builder = buildCandidate build withLower (update retract) (initial solverInit) package  handlersLower ::   BuildConfig ->   LowerMode ->   (Bool -> MutableId -> PackageId -> MutationConstraints -> MutationConstraints) ->-  MutationHandlers Lower SolverState+  MutationHandlers Lower handlersLower conf mode updatePackageParams =   MutationHandlers {process = processMutationLower conf mode updatePackageParams}
lib/Hix/Managed/Lower/Data/LowerMode.hs view
@@ -1,12 +1,11 @@ module Hix.Managed.Lower.Data.LowerMode where -import Hix.Managed.Cabal.Data.SolverState (SolverState) import Hix.Managed.Data.Mutation (MutationResult (MutationFailed, MutationKeep))  data LowerMode =   LowerMode {     firstSuccess :: Bool,-    noSuccess :: MutationResult SolverState+    noSuccess :: MutationResult   }   deriving stock (Eq, Show, Generic) 
lib/Hix/Managed/Lower/Stabilize.hs view
@@ -16,7 +16,7 @@ import qualified Hix.Managed.Data.Constraints import Hix.Managed.Data.Constraints (MutationConstraints (MutationConstraints)) import qualified Hix.Managed.Data.EnvContext-import Hix.Managed.Data.Initial (Initial (Initial))+import Hix.Managed.Data.Initial (Initial (..)) import Hix.Managed.Data.Mutable (MutableDep, depName) import qualified Hix.Managed.Data.MutableId import Hix.Managed.Data.MutableId (MutableId)@@ -98,7 +98,7 @@   BuildConfig ->   Flow () stabilizeStage handlers conf =-  runStage_ "stabilize"  (lowerStabilize handlers conf)+  runStage_ "stabilize" (lowerStabilize handlers conf)  stabilizeIfPossible ::   BuildHandlers ->@@ -111,8 +111,8 @@  validateCurrent :: Flow BuildStatus validateCurrent =-  execStatelessStage "stabilize-current" \-    StageContext {env, state = Initial MutationState {versions, overrides}, builder} ->+  execStatelessStage "stabilize-current"+    \ StageContext {env, state = Initial MutationState {versions, overrides}, builder} ->       buildVersions builder env "current lower bounds" versions (Just overrides) <&> \case         Success -> StageNoAction (Just "Env builds successfully with the current bounds.")         Failure -> StageFailure (FailedPrecondition ["Env does not build successfully with the current bounds."])
lib/Hix/Managed/Overrides.hs view
@@ -9,6 +9,7 @@ import qualified Hix.Managed.Handlers.SourceHash import Hix.Managed.Handlers.SourceHash (SourceHashHandlers) import Hix.Monad (fatalError)+import Hix.Managed.Cabal.Data.SolvedId (SolvedId (..))  -- | Fetch an override's hash from the given sources, which is the set of configured Hackages in production. -- If the package wasn't found anywhere, and it is part of the local build, assume that it hasn't been published yet and@@ -44,9 +45,9 @@ packageOverrides ::   SourceHashHandlers ->   Set LocalPackage ->-  [PackageId] ->+  [SolvedId] ->   M Overrides packageOverrides handlers localUnavailable versions =-  nForAssoc versions \ package -> do-    o <- packageOverrideRegular handlers localUnavailable package+  nForAssoc versions \ SolvedId {..} -> do+    o <- packageOverride revision handlers localUnavailable package     pure (package.name, o)
lib/Hix/Managed/StageContext.hs view
@@ -4,7 +4,7 @@ import Hix.Managed.Data.EnvRequest (EnvRequest (..)) import qualified Hix.Managed.Data.EnvState import Hix.Managed.Data.EnvState (EnvState (EnvState))-import Hix.Managed.Data.Initial (Initial (Initial))+import Hix.Managed.Data.Initial (Initial (..)) import qualified Hix.Managed.Data.MutationState import Hix.Managed.Data.MutationState (MutationState (MutationState)) import Hix.Managed.Data.Query (Query (Query))
lib/Hix/Managed/StageState.hs view
@@ -2,22 +2,23 @@  import qualified Data.Map.Strict as Map +import Hix.Managed.Cabal.Data.SolverState (SolverState) 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 ->+  StageState a SolverState ->   DepMutation a ->-  MutationResult s ->-  StageState a s+  MutationResult ->+  StageState a SolverState updateStageState old mutation = \case   MutationSuccess {..} ->     old {       success = Map.insert candidate.name buildSuccess old.success,       state,-      ext+      ext = solverState     }     where       buildSuccess | changed = CandidateBuilt candidate
lib/Hix/Monad.hs view
@@ -295,7 +295,7 @@   t M a ->   t M a appContextT =-  appContextAtT LogVerbose LogInfo+  appContextAtT LogVerbose LogError  appContextAt :: LogLevel -> LogLevel -> Text -> M a -> M a appContextAt logLevel level description ma =@@ -303,7 +303,7 @@     appContextAtT logLevel level description (IdentityT ma)  appContext :: Text -> M a -> M a-appContext = appContextAt LogVerbose LogInfo+appContext = appContextAt LogVerbose LogError  appContextVerbose :: Text -> M a -> M a appContextVerbose desc ma = do
test/Hix/Test/Managed/Bump/MutationTest.hs view
@@ -1,18 +1,18 @@ module Hix.Test.Managed.Bump.MutationTest where  import qualified Data.Text as Text-import Distribution.Types.PackageDescription (customFieldsPD, emptyPackageDescription) import Exon (exon) import Test.Tasty (TestTree, testGroup)  import Hix.Class.Map ((!!)) import Hix.Data.Error (ErrorMessage (Fatal)) import Hix.Data.Options (ProjectOptions (..))-import Hix.Data.Version (Versions)+import Hix.Data.Overrides (IsRevision (..), Override (..), Overrides)+import Hix.Data.Version (SourceHash (..), Versions) import Hix.Managed.Bump.Optimize (bumpOptimizeMain) import qualified Hix.Managed.Cabal.Data.Packages import Hix.Managed.Cabal.Data.Packages (GhcPackages (GhcPackages), InstalledPackages)-import Hix.Managed.Cabal.Data.SourcePackage (SourcePackageId (description), SourcePackages)+import Hix.Managed.Cabal.Data.SourcePackage (SourcePackages) import Hix.Managed.Data.ManagedPackage (ProjectPackages, managedPackages) import qualified Hix.Managed.Data.ProjectStateProto import Hix.Managed.Data.ProjectStateProto (ProjectStateProto (ProjectStateProto))@@ -22,7 +22,7 @@ import Hix.Pretty (showP) import Hix.Test.Hedgehog (eqLines, listEqTail) import qualified Hix.Test.Managed.Run-import Hix.Test.Managed.Run (Result (Result), TestParams (..), bumpTest, nosortOptions, testParams)+import Hix.Test.Managed.Run (Result (Result), TestParams (..), bumpTest, nosortOptions, testParams, withoutRevisions) import Hix.Test.Utils (UnitTest, unitTest)  packages :: ProjectPackages@@ -37,6 +37,7 @@       "direct5",       "direct6",       "direct7",+      "direct8",       "local1",       "local2 <0.9",       "local3 <0.9",@@ -60,6 +61,7 @@     ("direct5-1.0.1", []),     ("direct6-1.0.1", []),     ("direct7-1.0.1", ["transitive1-1.0.1"]),+    ("direct8-1.0.1", []),     ("transitive1-1.0.1", ["direct6-1.0.1"])   ] @@ -103,10 +105,11 @@     ("direct7", [       ([1, 0, 1], ["transitive1 <1.1"])     ]),+    ("direct8", [+      ([1, 0, 1], [])+    ]),     ("transitive1", [-      ([1, 0, 1], ["direct6 <1.2"] {-        description = Just (emptyPackageDescription {customFieldsPD = [("x-revision", "2")]})-      })+      ([1, 0, 1], ["direct6 <1.2"])     ]),     ("local2", [       ([0, 8, 0], []),@@ -126,14 +129,14 @@ ghcPackages :: GhcPackages ghcPackages = GhcPackages {installed, available} -build :: Versions -> M BuildStatus+build :: Versions -> M (BuildStatus, Overrides) build = \case   versions     | Just [0, 9, 0] <- versions !! "local2"-    -> pure Failure+    -> failure   versions     | Just [0, 9, 0] <- versions !! "local3"-    -> pure Failure+    -> failure   [     ("base", [4, 12, 0, 0]),     ("direct1", [1, 2, 1]),@@ -143,12 +146,20 @@     ("direct5", [1, 1, 1]),     ("direct6", [1, 0, 1]),     ("direct7", [1, 0, 1]),+    ("direct8", [1, 0, 1]),     ("local2", [0, 8, 0]),     ("local3", [0, 8, 0]),     ("local4", [0, 8, 0]),     ("local5", [1, 0]),     ("transitive1", [1, 0, 1])-    ] -> pure Success+    ] -> pure (Success, [+      ("direct8", Override {+        version = [1, 0, 1],+        hash = SourceHash "direct8-1.0.1",+        repo = Nothing,+        revision = Just IsRevision+      })+    ])    [     ("base", [4, 12, 0, 0]),@@ -159,12 +170,13 @@     ("direct5", [1, 1, 1]),     ("direct6", [1, 0, 1]),     ("direct7", [1, 0, 1]),+    ("direct8", [1, 0, 1]),     ("local2", [0, 8, 0]),     ("local3", [0, 8, 0]),     ("local4", [0, 8, 0]),     ("local5", [1, 0]),     ("transitive1", [1, 0, 1])-    ] -> pure Failure+    ] -> failure    [     ("base", [4, 12, 0, 0]),@@ -175,12 +187,13 @@     ("direct5", [1, 1, 1]),     ("direct6", [1, 0, 1]),     ("direct7", [1, 0, 1]),+    ("direct8", [1, 0, 1]),     ("local2", [0, 8, 0]),     ("local3", [0, 8, 0]),     ("local4", [0, 8, 0]),     ("local5", [1, 0]),     ("transitive1", [1, 0, 1])-    ] -> pure Success+    ] -> success    [     ("base", [4, 12, 0, 0]),@@ -191,12 +204,13 @@     ("direct5", [1, 2, 1]),     ("direct6", [1, 0, 1]),     ("direct7", [1, 0, 1]),+    ("direct8", [1, 0, 1]),     ("local2", [0, 8, 0]),     ("local3", [0, 8, 0]),     ("local4", [0, 8, 0]),     ("local5", [1, 0]),     ("transitive1", [1, 0, 1])-    ] -> pure Success+    ] -> success    [     ("base", [4, 12, 0, 0]),@@ -207,12 +221,13 @@     ("direct5", [1, 2, 1]),     ("direct6", [1, 1, 1]),     ("direct7", [1, 0, 1]),+    ("direct8", [1, 0, 1]),     ("local2", [0, 8, 0]),     ("local3", [0, 8, 0]),     ("local4", [0, 8, 0]),     ("local5", [1, 0]),     ("transitive1", [1, 0, 1])-    ] -> pure Success+    ] -> success    [     ("base", [4, 12, 0, 0]),@@ -223,12 +238,13 @@     ("direct5", [1, 2, 1]),     ("direct6", [1, 1, 1]),     ("direct7", [1, 0, 1]),+    ("direct8", [1, 0, 1]),     ("local2", [0, 8, 0]),     ("local3", [0, 8, 0]),     ("local4", [0, 8, 0]),     ("local5", [1, 0]),     ("transitive1", [1, 0, 1])-    ] -> pure Success+    ] -> success    [     ("base", [4, 12, 0, 0]),@@ -239,12 +255,13 @@     ("direct5", [1, 2, 1]),     ("direct6", [1, 1, 1]),     ("direct7", [1, 0, 1]),+    ("direct8", [1, 0, 1]),     ("local2", [0, 8, 0]),     ("local3", [0, 8, 0]),     ("local4", [0, 10, 0]),     ("local5", [1, 0]),     ("transitive1", [1, 0, 1])-    ] -> pure Success+    ] -> success  --   -- second iteration   [@@ -256,15 +273,20 @@     ("direct5", [1, 2, 1]),     ("direct6", [1, 1, 1]),     ("direct7", [1, 0, 1]),+    ("direct8", [1, 0, 1]),     ("local2", [0, 8, 0]),     ("local3", [0, 8, 0]),     ("local4", [0, 10, 0]),     ("local5", [1, 0]),     ("transitive1", [1, 0, 1])-    ] -> pure Failure+    ] -> failure    versions -> throwM (Fatal [exon|Unexpected build plan: #{showP versions}|])+  where+    success = pure (Success, mempty) +    failure = pure (Failure, mempty)+ state :: ProjectStateProto state =   ProjectStateProto {@@ -322,6 +344,10 @@         lower = null;         upper = "1.1";       };+      direct8 = {+        lower = null;+        upper = "1.1";+      };       local1 = {         lower = null;         upper = null;@@ -358,6 +384,7 @@       direct5 = "1.2.1";       direct6 = "1.1.1";       direct7 = "1.0.1";+      direct8 = "1.0.1";       local2 = "0.8.0";       local3 = "0.8.0";       local4 = "0.10.0";@@ -395,6 +422,11 @@         version = "1.0.1";         hash = "direct7-1.0.1";       };+      direct8 = {+        version = "1.0.1";+        hash = "direct8-1.0.1";+        revision = true;+      };       local2 = {         version = "0.8.0";         hash = "local2-0.8.0";@@ -440,6 +472,7 @@     📦 [34mdirect5[0m   1.2.1      ↕ [no bounds] -> <[32m1.3[0m     📦 [34mdirect6[0m   1.1.1      ↕ <[31m1.1[0m -> <[32m1.2[0m     📦 [34mdirect7[0m   1.0.1      ↕ [no bounds] -> <[32m1.1[0m+    📦 [34mdirect8[0m   1.0.1      ↕ [no bounds] -> <[32m1.1[0m     📦 [34mlocal2[0m    0.8.0      ↕ <0.9     📦 [34mlocal3[0m    0.8.0      ↕ <0.9     📦 [34mlocal4[0m    0.10.0     ↕ <[31m0.9[0m -> <[32m0.11[0m@@ -480,6 +513,21 @@ --   It has a dependency on @direct4@ with an upper bound of <1.2, which would prevent it from being selected by the --   solver if we didn't use @AllowNewer@. --+-- - @direct6@ is a direct dependency of the project, and a direct dependency of @transitive1@.+--   @transitive1@ is a direct dependency of @direct7@, and therefore @direct6@ is a transitive dependency of both+--   @direct7@ and the project.+--   While @direct7@ and @transitive1@ both have their latest versions installed, the installed version of @transitive1@+--   has a dependency on @direct6-1.0.1@ (since installed versions don't have range deps, and need the precise package+--   ID of dependencies with which they were installed).+--   When @direct6@ is then bumped regularly to the latest version, both @transitive1@ and @direct7@ are overridden as+--   well by the solver.+--+-- - The installed version of @direct8@ is simulated to have incompatible bounds, which is indicated by the fact that+--   'build' returns a revision override for it in the first build.+--   In later builds, the solver configures an override for @direct8@ initially, since revisions are persisted across+--   mutations in @SolverState@.+--   In the final state file, the override for @direct8@ includes the flag @revision = true@.+-- -- - @local2@ is in a different env, so it will be treated as a mutable dependency despite being a local package. --   It also has no installed version, since it wasn't available on Hackage (yet) at the time of the nixpkgs snapshot --   and therefore isn't present in nix;@@ -598,7 +646,7 @@     params = (testParams False packages_upToDate) {       ghcPackages = ghcPackages_upToDate,       state = state_upToDate,-      build = build_upToDate+      build = withoutRevisions build_upToDate     }  test_bumpMutation :: TestTree
test/Hix/Test/Managed/LowerAuto/MutationOptimizeTest.hs view
@@ -5,6 +5,7 @@  import Hix.Class.Map (nGen, (!!)) import Hix.Data.Error (ErrorMessage (Fatal))+import Hix.Data.Overrides (Overrides) import Hix.Data.Version (Versions) import qualified Hix.Managed.Cabal.Data.Packages import Hix.Managed.Cabal.Data.Packages (GhcPackages (GhcPackages), InstalledPackages)@@ -19,7 +20,7 @@ import Hix.NixExpr (renderRootExpr) import Hix.Pretty (showP) import Hix.Test.Hedgehog (eqLines)-import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, testParams)+import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, testParams, withoutRevisions) import Hix.Test.Utils (UnitTest, unitTest)  packages :: ProjectPackages@@ -94,8 +95,8 @@ ghcPackages :: GhcPackages ghcPackages = GhcPackages {installed, available} -buildVersionsBasic :: Versions -> M BuildStatus-buildVersionsBasic = \case+buildVersionsBasic :: Versions -> M (BuildStatus, Overrides)+buildVersionsBasic = withoutRevisions \case   versions     | Just v <- versions !! "direct2"     , v <= [1, 0]@@ -337,7 +338,7 @@       (testParams False packages) {         ghcPackages,         state = initialState,-        build = buildVersionsReset+        build = withoutRevisions buildVersionsReset       }  test_lowerAutoMutationOptimize :: TestTree
test/Hix/Test/Managed/LowerAuto/MutationStabilizeTest.hs view
@@ -4,6 +4,7 @@  import Hix.Class.Map (nGen, (!!)) import Hix.Data.Error (ErrorMessage (Fatal))+import Hix.Data.Overrides (Overrides) import Hix.Data.Version (Versions) import qualified Hix.Managed.Cabal.Data.Packages import Hix.Managed.Cabal.Data.Packages (GhcPackages (GhcPackages), InstalledPackages)@@ -18,7 +19,7 @@ import Hix.NixExpr (renderRootExpr) import Hix.Pretty (showP) import Hix.Test.Hedgehog (eqLines)-import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, testParams)+import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, testParams, withoutRevisions) import Hix.Test.Utils (UnitTest)  packages :: ProjectPackages@@ -96,8 +97,8 @@         fromString [exon|direct#{show num}-1.0|]       ) -build :: Versions -> M BuildStatus-build = \case+build :: Versions -> M (BuildStatus, Overrides)+build = withoutRevisions \case   versions     | Just v <- versions !! "direct2"     , v <= [1, 0]
test/Hix/Test/Managed/LowerInit/MutationTest.hs view
@@ -6,6 +6,7 @@ import Hix.Class.Map ((!!)) import Hix.Data.Error (ErrorMessage (Fatal)) import Hix.Data.Options (ProjectOptions (..))+import Hix.Data.Overrides (Overrides) import Hix.Data.Version (Versions) import qualified Hix.Managed.Cabal.Changes import Hix.Managed.Cabal.Changes (SolverPlan (SolverPlan))@@ -23,7 +24,7 @@ import Hix.NixExpr (renderRootExpr) import Hix.Pretty (showP) import Hix.Test.Hedgehog (eqLines, listEqTail, listEqZip)-import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, nosortOptions, testParams)+import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, nosortOptions, testParams, withoutRevisions) import Hix.Test.Utils (UnitTest)  packages :: ProjectPackages@@ -119,8 +120,8 @@     resolving = False   } -build :: Versions -> M BuildStatus-build = \case+build :: Versions -> M (BuildStatus, Overrides)+build = withoutRevisions \case   versions     | Just [1, 0, n] <- versions !! "direct1"     , n /= 5
test/Hix/Test/Managed/LowerOptimize/CandidatesTest.hs view
@@ -10,6 +10,7 @@ import qualified Hix.Managed.Cabal.Data.SolverState import Hix.Managed.Cabal.Data.SolverState (SolverState (SolverState), solverState, updateSolverState) import Hix.Managed.Data.Constraints (MutationConstraints (MutationConstraints, mutation))+import Hix.Managed.Data.Initial (initial) import Hix.Managed.Data.Mutable (MutableDep) import qualified Hix.Managed.Data.MutableId import Hix.Managed.Data.MutableId (MutableId (MutableId))@@ -79,10 +80,12 @@     for majors \ mut ->       processMutationLower def lowerOptimizeMode lowerOptimizeUpdate initialState mut (build buildRef)   mutationResults <- evalEither result-  Just (MutationSuccess candidate True mstate (updateSolverState (const newConstraints) initialState)) === mutationResults+  Just target === mutationResults   triedVersions <- liftIO (readIORef buildRef)   (Just <$> targets) === triedVersions   where+    target = MutationSuccess candidate True mstate (updateSolverState (const newConstraints) (initial initialState))+     dep = simpleQueryDep mutable [[2, 4]]      mstate =
test/Hix/Test/Managed/LowerOptimize/MutationTest.hs view
@@ -3,6 +3,7 @@ import Exon (exon)  import Hix.Data.Error (ErrorMessage (Fatal))+import Hix.Data.Overrides (Overrides) import Hix.Data.Version (Versions) import qualified Hix.Managed.Cabal.Data.Packages import Hix.Managed.Cabal.Data.Packages (GhcPackages (GhcPackages))@@ -17,7 +18,7 @@ import Hix.NixExpr (renderRootExpr) import Hix.Pretty (showP) import Hix.Test.Hedgehog (eqLines)-import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, testParams)+import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, testParams, withoutRevisions) import Hix.Test.Utils (UnitTest)  packages :: ProjectPackages@@ -78,8 +79,8 @@     resolving = False   } -build :: Versions -> M BuildStatus-build = \case+build :: Versions -> M (BuildStatus, Overrides)+build = withoutRevisions \case   [("direct1", [1, 9, 1]), ("direct2", [2, 0, 1]), ("transitive1", [1, 0, 1])] -> pure Success   [("direct1", [1, 8, 1]), ("direct2", [2, 0, 1]), ("transitive1", [1, 0, 1])] -> pure Success   [("direct1", [1, 8, 1]), ("direct2", [1, 9, 1]), ("transitive1", [1, 0, 1])] -> pure Failure
test/Hix/Test/Managed/LowerOptimize/OrderTest.hs view
@@ -1,6 +1,7 @@ module Hix.Test.Managed.LowerOptimize.OrderTest where  import Hix.Data.Monad (M)+import Hix.Data.Overrides (Overrides) import Hix.Data.Version (Versions) import Hix.Managed.Cabal.Changes (SolverPlan (..)) import qualified Hix.Managed.Cabal.Data.Packages@@ -73,8 +74,8 @@     resolving = False   } -build :: Versions -> M BuildStatus-build _ = pure Success+build :: Versions -> M (BuildStatus, Overrides)+build _ = pure (Success, mempty)  cabalTarget :: [(EnvConstraints, Maybe SolverPlan)] cabalTarget =
test/Hix/Test/Managed/LowerStabilize/MutationTest.hs view
@@ -3,6 +3,7 @@ import Exon (exon)  import Hix.Data.Error (ErrorMessage (Fatal))+import Hix.Data.Overrides (Overrides) import Hix.Data.Version (Versions) import qualified Hix.Managed.Cabal.Data.Packages import Hix.Managed.Cabal.Data.Packages (GhcPackages (GhcPackages))@@ -16,7 +17,7 @@ import Hix.NixExpr (renderRootExpr) import Hix.Pretty (showP) import Hix.Test.Hedgehog (eqLines)-import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, testParams)+import Hix.Test.Managed.Run (Result (..), TestParams (..), lowerTest, testParams, withoutRevisions) import Hix.Test.Utils (UnitTest)  available :: SourcePackages@@ -72,8 +73,8 @@     resolving = False   } -build :: Versions -> M BuildStatus-build = \case+build :: Versions -> M (BuildStatus, Overrides)+build = withoutRevisions \case   [("direct1", [2, 0, 1]), ("direct2", [2, 0, 1])] -> pure Success   [("direct1", [1, 8, 1]), ("direct2", [1, 8, 1])] -> pure Failure   [("direct1", [1, 8, 1]), ("direct2", [2, 0, 1])] -> pure Failure
testing/Hix/Test/Managed/Run.hs view
@@ -9,6 +9,7 @@ import Hix.Data.NixExpr (Expr) import qualified Hix.Data.Options as ProjectOptions import Hix.Data.Options (ProjectOptions)+import Hix.Data.Overrides (Overrides) import Hix.Data.PackageName (LocalPackage) import Hix.Data.Version (Versions) import Hix.Managed.Cabal.Changes (SolverPlan)@@ -45,7 +46,7 @@     ghcPackages :: GhcPackages,     state :: ProjectStateProto,     projectOptions :: ProjectOptions,-    build :: Versions -> M BuildStatus+    build :: Versions -> M (BuildStatus, Overrides)   }  nosortOptions :: ProjectOptions@@ -65,9 +66,17 @@     ghcPackages = GhcPackages {installed = [], available = []},     state = def,     projectOptions = nosortOptions,-    build = const (pure Failure)+    build = const (pure (Failure, mempty))   } +withoutRevisions ::+  (Versions -> M BuildStatus) ->+  Versions ->+  M (BuildStatus, Overrides)+withoutRevisions build versions = do+  status <- build versions+  pure (status, mempty)+ data Result a =   Result {     stateFile :: Expr,@@ -100,7 +109,7 @@ managedTest' defaultEnvName params main =   withFrozenCallStack do     (handlers0, stateFileRef, _) <--      BuildHandlers.handlersUnitTest params.ghcPackages (fmap resultFromStatus . params.build)+      BuildHandlers.handlersUnitTest params.ghcPackages (fmap (first resultFromStatus) . params.build)     (cabalRef, handlers1) <-       if params.cabalLog       then first Just <$> BuildHandlers.logCabal handlers0