diff options
| author | Sean Whitton <spwhitton@spwhitton.name> | 2015-12-06 16:50:19 -0700 |
|---|---|---|
| committer | Joey Hess <joeyh@joeyh.name> | 2015-12-08 11:58:50 -0400 |
| commit | 6bacac7f38f60945527f148644d3f9eba70b4bf5 (patch) | |
| tree | 3ff3fdced6bd3d8e5c1f096b63ffb85b13874fa1 /src/Propellor/Spin.hs | |
| parent | 0dab06c92cfef9f46d2e99b9207dba97450d5953 (diff) | |
implement two pre-spin safety checks
- check that we're on the branch specified in git config value
propellor.spin-branch
- check that there are no uncommitted changes if git config value
propellor.forbid-dirty-spin is true
Signed-off-by: Sean Whitton <spwhitton@spwhitton.name>
(cherry picked from commit 8f374d73ae5b2bb53f82835c6d6b5c0194590006)
Diffstat (limited to 'src/Propellor/Spin.hs')
| -rw-r--r-- | src/Propellor/Spin.hs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/Propellor/Spin.hs b/src/Propellor/Spin.hs index ae7e7af5..f01975c9 100644 --- a/src/Propellor/Spin.hs +++ b/src/Propellor/Spin.hs @@ -32,6 +32,24 @@ import Utility.SafeCommand commitSpin :: IO () commitSpin = do + -- safety check #1: check we're on the configured spin branch + spinBranch <- getGitConfigValue "propellor.spin-branch" + case spinBranch of + Nothing -> return () -- just a noop + Just b -> do + currentBranch <- getCurrentBranch + when (b /= currentBranch) $ error + ("spin aborted: check out branch " + ++ b ++ " first") + + -- safety check #2: check we can commit with a dirty tree + noDirtySpin <- getGitConfigBool "propellor.forbid-dirty-spin" + when noDirtySpin $ do + status <- takeWhile (/= '\n') + <$> readProcess "git" ["status", "--porcelain"] + when (not . null $ status) $ + error "spin aborted: commit changes first" + void $ actionMessage "Git commit" $ gitCommit (Just spinCommitMessage) [Param "--allow-empty", Param "-a"] |
