diff options
| author | Joey Hess <joey@kitenet.net> | 2014-04-03 12:35:27 -0400 |
|---|---|---|
| committer | Joey Hess <joey@kitenet.net> | 2014-04-03 12:35:27 -0400 |
| commit | ced760359a35ebda365056f2046081175e512d8d (patch) | |
| tree | 6f4aa563e660c25e0ca6330f74cd57157f2eada9 | |
| parent | 25ba6d53939fb6eb7356840101dfcc79b3563502 (diff) | |
| parent | 9c3ab7505957ee83c2d59fcc8a934bca326b615b (diff) | |
Merge branch 'joeyconfig'
| -rw-r--r-- | Propellor/CmdLine.hs | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/Propellor/CmdLine.hs b/Propellor/CmdLine.hs index ed762e70..8ed21cbc 100644 --- a/Propellor/CmdLine.hs +++ b/Propellor/CmdLine.hs @@ -94,11 +94,14 @@ buildFirst cmdline next = do where getmtime = catchMaybeIO $ getModificationTime "propellor" +getCurrentBranch :: IO String +getCurrentBranch = takeWhile (/= '\n') + <$> readProcess "git" ["symbolic-ref", "--short", "HEAD"] + updateFirst :: CmdLine -> IO () -> IO () updateFirst cmdline next = do - branchref <- takeWhile (/= '\n') - <$> readProcess "git" ["symbolic-ref", "HEAD"] - let originbranch = "origin" </> takeFileName branchref + branchref <- getCurrentBranch + let originbranch = "origin" </> branchref void $ actionMessage "Git fetch" $ boolSystem "git" [Param "fetch"] @@ -116,7 +119,8 @@ updateFirst cmdline next = do modifyFileMode privDataDir (removeModes otherGroupModes) s <- readProcessEnv "git" ["log", "-n", "1", "--format=%G?", originbranch] (Just [("GNUPGHOME", privDataDir)]) - nukeFile $ privDataDir </> "trustring.gpg" + nukeFile $ privDataDir </> "trustdb.gpg" + nukeFile $ privDataDir </> "pubring.gpg" nukeFile $ privDataDir </> "gpg.conf" if s == "U\n" || s == "G\n" then do @@ -143,9 +147,10 @@ spin host = do url <- getUrl void $ gitCommit [Param "--allow-empty", Param "-a", Param "-m", Param "propellor spin"] void $ boolSystem "git" [Param "push"] - go url =<< gpgDecrypt (privDataFile host) + branch <- getCurrentBranch + go url branch =<< gpgDecrypt (privDataFile host) where - go url privdata = withBothHandles createProcessSuccess (proc "ssh" [user, bootstrapcmd]) $ \(toh, fromh) -> do + go url branch privdata = withBothHandles createProcessSuccess (proc "ssh" [user, bootstrapcmd branch]) $ \(toh, fromh) -> do let finish = do senddata toh (privDataFile host) privDataMarker privdata hClose toh @@ -161,11 +166,11 @@ spin host = do hClose toh hClose fromh sendGitClone host url - go url privdata + go url branch privdata user = "root@"++host - bootstrapcmd = shellWrap $ intercalate " ; " + bootstrapcmd branch = shellWrap $ intercalate " ; " [ "if [ ! -d " ++ localdir ++ " ]" , "then " ++ intercalate " && " [ "apt-get -y install git" @@ -173,6 +178,8 @@ spin host = do ] , "else " ++ intercalate " && " [ "cd " ++ localdir + , "git checkout -b " ++ branch + , "git branch --set-upstream-to=origin/" ++ branch ++ " " ++ branch , "if ! test -x ./propellor; then make build; fi" , "./propellor --boot " ++ host ] @@ -196,7 +203,7 @@ spin host = do sendGitClone :: HostName -> String -> IO () sendGitClone host url = void $ actionMessage ("Pushing git repository to " ++ host) $ - withTmpFile "propellor.git." $ \tmp _ -> allM id + withTmpFile "propellor.git" $ \tmp _ -> allM id -- TODO: ssh connection caching, or better push method -- with less connections. [ boolSystem "git" [Param "bundle", Param "create", File tmp, Param "HEAD"] |
