packages feed

nix-diff 1.0.15 → 1.0.16

raw patch · 4 files changed

+39/−3 lines, 4 filesdep +filepathdep +process

Dependencies added: filepath, process

Files

CHANGELOG.md view
@@ -1,3 +1,9 @@+1.0.16++* [Accept realised store paths as input](https://github.com/Gabriel439/nix-diff/pull/47)+  * `nix-diff` will attempt to find the corresponding derivations using+    `nix-store --query --deriver` if you provide a realised store path as input+ 1.0.15  * [Fix non-exhaustive pattern match](https://github.com/Gabriel439/nix-diff/pull/45)
README.md view
@@ -77,6 +77,13 @@  ![](https://i.imgur.com/KUB4rXx.png) +It's also possible to pass store paths or links to store paths, for example:++```ShellSession+$ nix-build example.nix+$ nix-diff /run/current-system ./result+```+ ## Development status  [![Build Status](https://travis-ci.org/Gabriel439/nix-diff.png)](https://travis-ci.org/Gabriel439/nix-diff)
nix-diff.cabal view
@@ -1,5 +1,5 @@ name:                nix-diff-version:             1.0.15+version:             1.0.16 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)@@ -30,6 +30,8 @@                      , text                 >= 1.2      && < 1.3                      , unix                                < 2.8                      , vector               >= 0.12     && < 0.13+                     , process                             < 1.7+                     , filepath                            < 1.5   hs-source-dirs:      src   default-language:    Haskell2010   ghc-options:         -Wall
src/Main.hs view
@@ -15,6 +15,7 @@ import Control.Monad.Reader (MonadReader, ReaderT, ask, local) import Control.Monad.State (MonadState, StateT, get, put) import Data.Attoparsec.Text (IResult(..))+import Data.List.NonEmpty (NonEmpty(..)) import Data.Map (Map) import Data.Monoid ((<>)) import Data.Set (Set)@@ -29,8 +30,10 @@ import qualified Control.Monad.State import qualified Data.Attoparsec.Text import qualified Data.Char            as Char+import qualified Data.List.NonEmpty import qualified Data.Map import qualified Data.Set+import qualified Data.String          as String import qualified Data.Text            as Text import qualified Data.Text.IO         as Text.IO import qualified Data.Vector@@ -39,8 +42,10 @@ import qualified Options.Applicative import qualified Patience import qualified System.Directory     as Directory+import qualified System.FilePath      as FilePath import qualified System.Posix.IO import qualified System.Posix.Terminal+import qualified System.Process       as Process  #if MIN_VERSION_base(4,9,0) import Control.Monad.Fail (MonadFail)@@ -214,6 +219,22 @@         _ -> do             fail ("Could not parse a derivation from this file: " ++ string) +-- | Read and parse a derivation from a store path that can be a derivation+-- (.drv) or a realized path, in which case the corresponding derivation is+-- queried.+readInput :: FilePath -> Diff (Derivation FilePath Text)+readInput path =+    if FilePath.isExtensionOf ".drv" path+    then readDerivation path+    else do+        let string = path+        result <- liftIO (Process.readProcess "nix-store" [ "--query", "--deriver", string ] [])+        case String.lines result of+            [] -> fail ("Could not obtain the derivation of " ++ string)+            l : ls -> do+                let drv_path = Data.List.NonEmpty.last (l :| ls)+                readDerivation drv_path+ {-| Join two `Map`s on shared keys, discarding keys which are not present in     both `Map`s -}@@ -623,8 +644,8 @@         then do             echo (explain "The requested outputs do not match")         else do-            leftDerivation  <- readDerivation leftPath-            rightDerivation <- readDerivation rightPath+            leftDerivation  <- readInput leftPath+            rightDerivation <- readInput rightPath              let leftOuts = Nix.Derivation.outputs leftDerivation             let rightOuts = Nix.Derivation.outputs rightDerivation