@@ -30,7 +30,6 @@ module Obelisk.Command.Thunk
30 , parseGitUri
30 , parseGitUri
31 , uriThunkPtr
31 , uriThunkPtr
32 , setThunk
32 , setThunk
36import Control.Applicative
35import Control.Applicative
@@ -625,10 +624,7 @@ packThunk' noTrail thunkDir = checkThunkDirectory thunkDir >> readThunk thunkDir
625 pure thunkPtr
624 pure thunkPtr
627setThunk :: MonadObelisk m => String -> FilePath -> m ()
626setThunk :: MonadObelisk m => String -> FilePath -> m ()
628−setThunk = setThunk' False
630−setThunk' :: MonadObelisk m => Bool -> String -> FilePath -> m ()
631−setThunk' noTrail branch thunkDir = checkThunkDirectory thunkDir >> readThunk thunkDir >>= \case
627+setThunk branch thunkDir = checkThunkDirectory thunkDir >> readThunk thunkDir >>= \case
632 Left err -> failWith $ T.pack $ "thunk set : " <> show err
628 Left err -> failWith $ T.pack $ "thunk set : " <> show err
633 Right (ThunkData_Packed thunkptr) -> do
629 Right (ThunkData_Packed thunkptr) -> do
634 let thunkSrc = _thunkPtr_source thunkptr
630 let thunkSrc = _thunkPtr_source thunkptr
@@ -639,11 +635,28 @@ setThunk' noTrail branch thunkDir = checkThunkDirectory thunkDir >> readThunk th
639 (exitCode, _) <- gitLsRemoteExitCode repository branch
635 (exitCode, _) <- gitLsRemoteExitCode repository branch
640 case exitCode of
636 case exitCode of
641 ExitSuccess -> do
637 ExitSuccess -> do
642− -- TODO: Accomplish this without unpacking
638+ remoteResults <- readGitProcessNoRepo ["ls-remote", repository, branch]
643− _ <- unpackThunk' noTrail thunkDir
639+ uri <- mkURI $ T.pack repository
644− callProcessAndLogOutput (Debug, Error) $ gitProc thunkDir ["checkout", branch]
640+ let rev = head $ T.words remoteResults -- TODO: Don't use head
645− _ <- packThunk' noTrail thunkDir
641+ sha256 <- nixPrefetchGit uri rev False
646− updateThunkToLatest thunkDir
642+ let newThunkPtr = ThunkPtr
643+ { _thunkPtr_source = case _thunkPtr_source thunkptr of
644+ ThunkSource_Git gitSource -> ThunkSource_Git GitSource
645+ { _gitSource_url = _gitSource_url gitSource
646+ , _gitSource_branch = Just $ N $ T.pack branch
647+ , _gitSource_fetchSubmodules = _gitSource_fetchSubmodules gitSource
649+ ThunkSource_GitHub gitHubSource -> ThunkSource_GitHub GitHubSource
650+ { _gitHubSource_owner = _gitHubSource_owner gitHubSource
651+ , _gitHubSource_repo = _gitHubSource_repo gitHubSource
652+ , _gitHubSource_branch = Just $ N $ T.pack branch
654+ , _thunkPtr_rev = ThunkRev
655+ { _thunkRev_commit = Ref.hash $ encodeUtf8 rev
656+ , _thunkRev_nixSha256 = sha256
659+ overwriteThunk thunkDir newThunkPtr
647 ExitFailure errNum -> failWith $ T.pack $ if errNum == 2
660 ExitFailure errNum -> failWith $ T.pack $ if errNum == 2
648 then "Error: branch not found"
661 then "Error: branch not found"
649 else ("Error Code: " <> show errNum <> "issue checking out the desired branch")
662 else ("Error Code: " <> show errNum <> "issue checking out the desired branch")