undo command
This commit was sponsored by Andrew Cant.
This commit is contained in:
parent
d22d650f59
commit
13260ccc3a
7 changed files with 139 additions and 6 deletions
|
@ -19,7 +19,8 @@ module Git.UpdateIndex (
|
|||
updateIndexLine,
|
||||
stageFile,
|
||||
unstageFile,
|
||||
stageSymlink
|
||||
stageSymlink,
|
||||
stageDiffTreeItem,
|
||||
) where
|
||||
|
||||
import Common
|
||||
|
@ -28,6 +29,7 @@ import Git.Types
|
|||
import Git.Command
|
||||
import Git.FilePath
|
||||
import Git.Sha
|
||||
import qualified Git.DiffTree as Diff
|
||||
|
||||
{- Streamers are passed a callback and should feed it lines in the form
|
||||
- read by update-index, and generated by ls-tree. -}
|
||||
|
@ -95,7 +97,10 @@ stageFile sha filetype file repo = do
|
|||
unstageFile :: FilePath -> Repo -> IO Streamer
|
||||
unstageFile file repo = do
|
||||
p <- toTopFilePath file repo
|
||||
return $ pureStreamer $ "0 " ++ fromRef nullSha ++ "\t" ++ indexPath p
|
||||
return $ unstageFile' p
|
||||
|
||||
unstageFile' :: TopFilePath -> Streamer
|
||||
unstageFile' p = pureStreamer $ "0 " ++ fromRef nullSha ++ "\t" ++ indexPath p
|
||||
|
||||
{- A streamer that adds a symlink to the index. -}
|
||||
stageSymlink :: FilePath -> Sha -> Repo -> IO Streamer
|
||||
|
@ -106,5 +111,11 @@ stageSymlink file sha repo = do
|
|||
<*> toTopFilePath file repo
|
||||
return $ pureStreamer line
|
||||
|
||||
{- A streamer that applies a DiffTreeItem to the index. -}
|
||||
stageDiffTreeItem :: Diff.DiffTreeItem -> Streamer
|
||||
stageDiffTreeItem d = case toBlobType (Diff.dstmode d) of
|
||||
Nothing -> unstageFile' (Diff.file d)
|
||||
Just t -> pureStreamer $ updateIndexLine (Diff.dstsha d) t (Diff.file d)
|
||||
|
||||
indexPath :: TopFilePath -> InternalGitPath
|
||||
indexPath = toInternalGitPath . getTopFilePath
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue