stage deletions directly using update-index
no need to run git-rm separately
This commit is contained in:
parent
7f39415600
commit
5308b51ec0
2 changed files with 16 additions and 3 deletions
|
@ -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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue