stage deletions directly using update-index

no need to run git-rm separately
This commit is contained in:
Joey Hess 2012-06-10 13:05:58 -04:00
parent 7f39415600
commit 5308b51ec0
2 changed files with 16 additions and 3 deletions

View file

@ -123,11 +123,16 @@ onAddSymlink file = go =<< Backend.lookupFile file
{- The file could reappear at any time, so --cached is used, to only delete {- The file could reappear at any time, so --cached is used, to only delete
- it from the index. -} - it from the index. -}
onDel :: FilePath -> Annex () onDel :: FilePath -> Annex ()
onDel file = Annex.Queue.addCommand "rm" onDel file = Annex.Queue.addUpdateIndex =<<
[Params "--quiet --cached --ignore-unmatch --"] [file] inRepo (Git.UpdateIndex.unstageFile file)
{- A directory has been deleted, or moved, so tell git to remove anything {- A directory has been deleted, or moved, so tell git to remove anything
- that was inside it from its cache. -} - that was inside it from its cache. Since it could reappear at any time,
- use --cached to only delete it from the index.
-
- Note: This could use unstageFile, but would need to run another git
- command to get the recursive list of files in the directory, so rm is
- just as good. -}
onDelDir :: FilePath -> Annex () onDelDir :: FilePath -> Annex ()
onDelDir dir = Annex.Queue.addCommand "rm" onDelDir dir = Annex.Queue.addCommand "rm"
[Params "--quiet -r --cached --ignore-unmatch --"] [dir] [Params "--quiet -r --cached --ignore-unmatch --"] [dir]

View file

@ -13,6 +13,7 @@ module Git.UpdateIndex (
streamUpdateIndex, streamUpdateIndex,
lsTree, lsTree,
updateIndexLine, updateIndexLine,
unstageFile,
stageSymlink stageSymlink
) where ) where
@ -24,6 +25,7 @@ import Git.Types
import Git.Command import Git.Command
import Git.FilePath import Git.FilePath
import Git.HashObject import Git.HashObject
import Git.Sha
{- Streamers are passed a callback and should feed it lines in the form {- Streamers are passed a callback and should feed it lines in the form
- read by update-index, and generated by ls-tree. -} - read by update-index, and generated by ls-tree. -}
@ -61,6 +63,12 @@ updateIndexLine :: Sha -> BlobType -> TopFilePath -> String
updateIndexLine sha filetype file = updateIndexLine sha filetype file =
show filetype ++ " blob " ++ show sha ++ "\t" ++ getTopFilePath file show filetype ++ " blob " ++ show sha ++ "\t" ++ getTopFilePath file
{- A streamer that removes a file from the index. -}
unstageFile :: FilePath -> Repo -> IO Streamer
unstageFile file repo = do
p <- toTopFilePath file repo
return $ pureStreamer $ "0 " ++ show nullSha ++ "\t" ++ getTopFilePath p
{- A streamer that adds a symlink to the index. -} {- A streamer that adds a symlink to the index. -}
stageSymlink :: FilePath -> String -> Repo -> IO Streamer stageSymlink :: FilePath -> String -> Repo -> IO Streamer
stageSymlink file linktext repo = do stageSymlink file linktext repo = do