cd544e548b
giveup changed to filter out control characters. (It is too low level to make it use StringContainingQuotedPath.) error still does not, but it should only be used for internal errors, where the message is not attacker-controlled. Changed a lot of existing error to giveup when it is not strictly an internal error. Of course, other exceptions can still be thrown, either by code in git-annex, or a library, that include some attacker-controlled value. This does not guard against those. Sponsored-by: Noam Kremen on Patreon
41 lines
1.1 KiB
Haskell
41 lines
1.1 KiB
Haskell
{- git-annex command
|
|
-
|
|
- Copyright 2014 Joey Hess <id@joeyh.name>
|
|
-
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
-}
|
|
|
|
module Command.ResolveMerge where
|
|
|
|
import Command
|
|
import qualified Git
|
|
import Git.Sha
|
|
import qualified Git.Branch
|
|
import Annex.AutoMerge
|
|
|
|
import qualified Data.ByteString as S
|
|
|
|
cmd :: Command
|
|
cmd = command "resolvemerge" SectionPlumbing
|
|
"resolve merge conflicts"
|
|
paramNothing (withParams seek)
|
|
|
|
seek :: CmdParams -> CommandSeek
|
|
seek = withNothing (commandAction start)
|
|
|
|
start :: CommandStart
|
|
start = starting "resolvemerge" (ActionItemOther Nothing) (SeekInput []) $ do
|
|
us <- fromMaybe nobranch <$> inRepo Git.Branch.current
|
|
d <- fromRawFilePath <$> fromRepo Git.localGitDir
|
|
let merge_head = d </> "MERGE_HEAD"
|
|
them <- fromMaybe (giveup nomergehead) . extractSha
|
|
<$> liftIO (S.readFile merge_head)
|
|
ifM (resolveMerge (Just us) them False)
|
|
( do
|
|
void $ commitResolvedMerge Git.Branch.ManualCommit
|
|
next $ return True
|
|
, giveup "Merge conflict could not be automatically resolved."
|
|
)
|
|
where
|
|
nobranch = giveup "No branch is currently checked out."
|
|
nomergehead = giveup "No SHA found in .git/merge_head"
|