diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-06-02 15:07:20 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-06-02 15:07:20 -0400 |
commit | 07f0f11f3cd8c8b52b2fe1324d5319613b5e2e79 (patch) | |
tree | 28674475e4a2c1a11affa60dda698b85e1ad5bdf /Git | |
parent | 013bf0e00e1414d7368eac50bf0e30519671c712 (diff) |
Pass -S to git commit-tree when commit.gpgsign is set and when making a non-automatic commit, in order to preserve current behavior when used with git 1.9, which has stopped doing this itself.
Diffstat (limited to 'Git')
-rw-r--r-- | Git/Branch.hs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/Git/Branch.hs b/Git/Branch.hs index 8f79f59b6..875f20f89 100644 --- a/Git/Branch.hs +++ b/Git/Branch.hs @@ -13,6 +13,7 @@ import Common import Git import Git.Sha import Git.Command +import qualified Git.Config import qualified Git.Ref import qualified Git.BuildVersion @@ -114,19 +115,33 @@ fastForward branch (first:rest) repo = (False, True) -> findbest c rs -- worse (False, False) -> findbest c rs -- same -{- The user may have set commit.gpgsign, indending all their manual +{- The user may have set commit.gpgsign, intending all their manual - commits to be signed. But signing automatic/background commits could - easily lead to unwanted gpg prompts or failures. -} data CommitMode = ManualCommit | AutomaticCommit deriving (Eq) +{- Prevent signing automatic commits. -} applyCommitMode :: CommitMode -> [CommandParam] -> [CommandParam] applyCommitMode commitmode ps | commitmode == AutomaticCommit && not (Git.BuildVersion.older "2.0.0") = Param "--no-gpg-sign" : ps | otherwise = ps +{- Some versions of git commit-tree honor commit.gpgsign themselves, + - but others need -S to be passed to enable gpg signing of manual commits. -} +applyCommitModeForCommitTree :: CommitMode -> [CommandParam] -> Repo -> [CommandParam] +applyCommitModeForCommitTree commitmode ps r + | commitmode == ManualCommit = + case (Git.Config.getMaybe "commit.gpgsign" r) of + Just s | Git.Config.isTrue s == Just True -> + Param "-S":ps + _ -> ps' + | otherwise = ps' + where + ps' = applyCommitMode commitmode ps + {- Commit via the usual git command. -} commitCommand :: CommitMode -> [CommandParam] -> Repo -> IO Bool commitCommand = commitCommand' runBool @@ -172,9 +187,9 @@ commitTree commitmode message parentrefs tree repo = pipeWriteRead ([Param "commit-tree", Param (fromRef tree)] ++ ps) sendmsg repo where - ps = applyCommitMode commitmode $ - map Param $ concatMap (\r -> ["-p", fromRef r]) parentrefs sendmsg = Just $ flip hPutStr message + ps = applyCommitModeForCommitTree commitmode parentparams repo + parentparams = map Param $ concatMap (\r -> ["-p", fromRef r]) parentrefs {- A leading + makes git-push force pushing a branch. -} forcePush :: String -> String |