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
	
	 Joey Hess
				Joey Hess