packages feed

nix-diff 1.0.1 → 1.0.2

raw patch · 3 files changed

+39/−40 lines, 3 filesdep ~optparse-generic

Dependency ranges changed: optparse-generic

Files

README.md view
@@ -1,4 +1,4 @@-# `nix-diff 1.0.1`+# `nix-diff 1.0.2`  This package provides a `nix-diff` executable which explains why two Nix derivations differ.  The most common use cases for this are:
nix-diff.cabal view
@@ -1,5 +1,5 @@ name:                nix-diff-version:             1.0.1+version:             1.0.2 synopsis:            Explain why two Nix derivations differ description:         This package provides a @nix-diff@ executable which                      explains why two Nix derivations (i.e. @*.drv@ files)@@ -24,7 +24,7 @@                      , Diff             >= 0.3  && < 0.4                      , text             >= 1.2  && < 1.3                      , system-filepath  >= 0.4  && < 0.5-                     , optparse-generic >= 1.1  && < 1.3+                     , optparse-generic >= 1.1  && < 1.4                      , nix-derivation   >= 1.0  && < 1.1                      , mtl              >= 2.2  && < 2.3                      , unix                        < 2.8
src/Main.hs view
@@ -408,54 +408,53 @@              let leftInputs  = groupByName (Nix.Derivation.inputDrvs leftDerivation)             let rightInputs = groupByName (Nix.Derivation.inputDrvs rightDerivation)-    +             let leftNames  = Data.Map.keysSet leftInputs             let rightNames = Data.Map.keysSet rightInputs             let leftExtraNames  = Data.Set.difference leftNames  rightNames             let rightExtraNames = Data.Set.difference rightNames leftNames -            if leftNames /= rightNames-            then do+            Control.Monad.State.when (leftNames /= rightNames) $ do                 echo (explain "The set of input names do not match:")                 diffWith leftExtraNames rightExtraNames $ \(sign, names) -> do                     forM_ names $ \name -> do                         echo ("    " <> sign name)-            else do -                let assocs = Data.Map.toList (innerJoin leftInputs rightInputs)-                descended <- forM assocs $ \(inputName, (leftPaths, rightPaths)) -> do-                    let leftExtraPaths =-                            Data.Map.difference leftPaths  rightPaths-                    let rightExtraPaths =-                            Data.Map.difference rightPaths leftPaths-                    case (Data.Map.toList leftExtraPaths, Data.Map.toList rightExtraPaths) of-                        _   | leftPaths == rightPaths -> do-                            return False-                        ([(leftPath', leftOutputs')], [(rightPath', rightOutputs')])-                            | leftOutputs' == rightOutputs' -> do-                            echo (explain ("The input named `" <> inputName <> "` differs"))-                            indented 2 (diff leftPath' leftOutputs' rightPath' rightOutputs')-                            return True-                        _ -> do-                            echo (explain ("The set of inputs named `" <> inputName <> "` do not match"))-                            diffWith leftExtraPaths rightExtraPaths $ \(sign, extraPaths) -> do-                                forM_ (Data.Map.toList extraPaths) $ \(extraPath, outputs) -> do-                                    echo ("    " <> sign (pathToText extraPath <> renderOutputs outputs))-                            return False-                if or descended++            let assocs = Data.Map.toList (innerJoin leftInputs rightInputs)+            descended <- forM assocs $ \(inputName, (leftPaths, rightPaths)) -> do+                let leftExtraPaths =+                        Data.Map.difference leftPaths  rightPaths+                let rightExtraPaths =+                        Data.Map.difference rightPaths leftPaths+                case (Data.Map.toList leftExtraPaths, Data.Map.toList rightExtraPaths) of+                    _   | leftPaths == rightPaths -> do+                        return False+                    ([(leftPath', leftOutputs')], [(rightPath', rightOutputs')])+                        | leftOutputs' == rightOutputs' -> do+                        echo (explain ("The input named `" <> inputName <> "` differs"))+                        indented 2 (diff leftPath' leftOutputs' rightPath' rightOutputs')+                        return True+                    _ -> do+                        echo (explain ("The set of inputs named `" <> inputName <> "` do not match"))+                        diffWith leftExtraPaths rightExtraPaths $ \(sign, extraPaths) -> do+                            forM_ (Data.Map.toList extraPaths) $ \(extraPath, outputs) -> do+                                echo ("    " <> sign (pathToText extraPath <> renderOutputs outputs))+                        return False+            if or descended+            then return ()+            else do+                let leftSrcs  = Nix.Derivation.inputSrcs leftDerivation+                let rightSrcs = Nix.Derivation.inputSrcs rightDerivation+                differed <- diffSrcs leftSrcs rightSrcs++                if not differed                 then return ()                 else do-                    let leftSrcs  = Nix.Derivation.inputSrcs leftDerivation-                    let rightSrcs = Nix.Derivation.inputSrcs rightDerivation-                    differed <- diffSrcs leftSrcs rightSrcs--                    if not differed-                    then return ()-                    else do-                        let leftEnv  = Nix.Derivation.env leftDerivation-                        let rightEnv = Nix.Derivation.env rightDerivation-                        let leftOutNames  = Data.Map.keysSet leftOuts-                        let rightOutNames = Data.Map.keysSet rightOuts-                        diffEnv leftOutNames rightOutNames leftEnv rightEnv+                    let leftEnv  = Nix.Derivation.env leftDerivation+                    let rightEnv = Nix.Derivation.env rightDerivation+                    let leftOutNames  = Data.Map.keysSet leftOuts+                    let rightOutNames = Data.Map.keysSet rightOuts+                    diffEnv leftOutNames rightOutNames leftEnv rightEnv  main :: IO () main = do