Skip to content

Commit 696f9e8

Browse files
committed
remote: simplify buildDerivation
1 parent da9b46c commit 696f9e8

File tree

4 files changed

+17
-21
lines changed

4 files changed

+17
-21
lines changed

hnix-store-remote/app/BuildDerivation.hs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,23 @@
22
module Main where
33

44
import Data.Default.Class (Default(def))
5-
import Data.Text (Text)
6-
import System.Nix.Derivation (Derivation)
7-
import System.Nix.StorePath (StorePath)
85

96
import qualified Data.Text
10-
import qualified Data.Text.IO
11-
import qualified Data.Attoparsec.Text
127
import qualified System.Environment
138
import qualified System.Nix.Build
14-
import qualified System.Nix.Derivation
159
import qualified System.Nix.StorePath
1610
import qualified System.Nix.Store.Remote
1711

18-
parseDerivation :: FilePath -> IO (Derivation StorePath Text)
19-
parseDerivation source = do
20-
contents <- Data.Text.IO.readFile source
21-
case Data.Attoparsec.Text.parseOnly
22-
(System.Nix.Derivation.parseDerivation def) contents of
23-
Left e -> error e
24-
Right drv -> pure drv
25-
2612
main :: IO ()
2713
main = System.Environment.getArgs >>= \case
2814
[filename] -> do
2915
case System.Nix.StorePath.parsePathFromText def (Data.Text.pack filename) of
3016
Left e -> error $ show e
3117
Right p -> do
32-
d <- parseDerivation filename
3318
out <-
3419
System.Nix.Store.Remote.runStore
3520
$ System.Nix.Store.Remote.buildDerivation
3621
p
37-
d
3822
System.Nix.Build.BuildMode_Normal
3923
print out
4024
_ -> error "No input derivation file"

hnix-store-remote/hnix-store-remote.cabal

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ executable build-derivation
137137
buildable: False
138138
build-depends:
139139
base >=4.12 && <5
140-
, attoparsec
141140
, hnix-store-core
142141
, hnix-store-remote
143142
, data-default-class

hnix-store-remote/src/System/Nix/Store/Remote/Client.hs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@ import Data.HashSet (HashSet)
3232
import Data.Map (Map)
3333
import Data.Set (Set)
3434
import Data.Some (Some)
35-
import Data.Text (Text)
3635

3736
import System.Nix.Build (BuildMode, BuildResult)
38-
import System.Nix.Derivation (Derivation)
3937
import System.Nix.DerivedPath (DerivedPath)
4038
import System.Nix.Hash (HashAlgo(..))
4139
import System.Nix.Nar (NarSource)
@@ -52,6 +50,12 @@ import System.Nix.Store.Remote.Types.SubstituteMode (SubstituteMode)
5250
import System.Nix.Store.Remote.Client.Core
5351
import System.Nix.Store.Types (FileIngestionMethod(..), RepairMode(..))
5452

53+
import qualified Control.Monad.IO.Class
54+
import qualified Data.Attoparsec.Text
55+
import qualified Data.Text.IO
56+
import qualified System.Nix.Derivation
57+
import qualified System.Nix.StorePath
58+
5559
-- | Add `NarSource` to the store
5660
addToStore
5761
:: MonadRemoteStore m
@@ -114,10 +118,18 @@ addIndirectRoot = doReq . AddIndirectRoot
114118
buildDerivation
115119
:: MonadRemoteStore m
116120
=> StorePath
117-
-> Derivation StorePath Text
118121
-> BuildMode
119122
-> m BuildResult
120-
buildDerivation a b c = doReq (BuildDerivation a b c)
123+
buildDerivation sp mode = do
124+
sd <- getStoreDir
125+
drvContents <-
126+
Control.Monad.IO.Class.liftIO
127+
$ Data.Text.IO.readFile
128+
$ System.Nix.StorePath.storePathToFilePath sd sp
129+
case Data.Attoparsec.Text.parseOnly
130+
(System.Nix.Derivation.parseDerivation sd) drvContents of
131+
Left e -> throwError $ RemoteStoreError_DerivationParse e
132+
Right drv -> doReq (BuildDerivation sp drv mode)
121133

122134
-- | Build paths if they are an actual derivations.
123135
--

hnix-store-remote/src/System/Nix/Store/Remote/MonadStore.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ data RemoteStoreError
5555
= RemoteStoreError_Fixme String
5656
| RemoteStoreError_BuildFailed
5757
| RemoteStoreError_ClientVersionTooOld
58+
| RemoteStoreError_DerivationParse String
5859
| RemoteStoreError_Disconnected
5960
| RemoteStoreError_GetAddrInfoFailed
6061
| RemoteStoreError_GenericIncrementalLeftovers String ByteString -- when there are bytes left over after genericIncremental parser is done, (Done x leftover), first param is show x

0 commit comments

Comments
 (0)