summaryrefslogtreecommitdiff
path: root/src/Propellor/Spin.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Propellor/Spin.hs')
-rw-r--r--src/Propellor/Spin.hs22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/Propellor/Spin.hs b/src/Propellor/Spin.hs
index cc5fa0e8..cd964e16 100644
--- a/src/Propellor/Spin.hs
+++ b/src/Propellor/Spin.hs
@@ -178,11 +178,11 @@ getSshTarget target hst
update :: Maybe HostName -> IO ()
update forhost = do
whenM hasGitRepo $
- req NeedRepoUrl repoUrlMarker setRepoUrl
+ reqMarked NeedRepoUrl repoUrlMarker setRepoUrl
makePrivDataDir
createDirectoryIfMissing True (takeDirectory privfile)
- req NeedPrivData privDataMarker $
+ reqMarked NeedPrivData privDataMarker $
writeFileProtected privfile
whenM hasGitRepo $
@@ -350,19 +350,13 @@ spinCommitMessage = "propellor spin"
-- Request that it run git upload-pack, and connect that up to a git fetch
-- to receive the data.
gitPullFromUpdateServer :: IO ()
-gitPullFromUpdateServer = req NeedGitPush gitPushMarker $ \_ -> do
- -- IO involving stdin can cause data to be buffered in the Handle
- -- (even when it's set NoBuffering), but we need to pass a FD to
- -- git fetch containing all of stdin after the gitPushMarker,
- -- including any that has been buffered.
- --
- -- To do so, create a pipe, and forward stdin, including any
- -- buffered part, through it.
- (pread, pwrite) <- System.Posix.IO.createPipe
- hwrite <- fdToHandle pwrite
- _ <- async $ stdin *>* hwrite
- let hin = pread
+gitPullFromUpdateServer = reqMarked NeedGitPush gitPushMarker $ \_ -> do
+ -- Note that this relies on data not being buffered in the stdin
+ -- Handle, since such buffered data would not be available in the
+ -- FD passed to git fetch.
+ hin <- dup stdInput
hout <- dup stdOutput
+ hClose stdin
hClose stdout
-- Not using git pull because git 2.5.0 badly
-- broke its option parser.