generalized safeWriteFile to viaTmp
This commit is contained in:
		
					parent
					
						
							
								d72fb5acc2
							
						
					
				
			
			
				commit
				
					
						2cda9d0a0f
					
				
			
		
					 4 changed files with 9 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -55,7 +55,7 @@ gitPreCommitHookWrite repo = do
 | 
			
		|||
	if exists
 | 
			
		||||
		then warning $ "pre-commit hook (" ++ hook ++ ") already exists, not configuring"
 | 
			
		||||
		else liftIO $ do
 | 
			
		||||
			safeWriteFile hook preCommitScript
 | 
			
		||||
			viaTmp writeFile hook preCommitScript
 | 
			
		||||
			p <- getPermissions hook
 | 
			
		||||
			setPermissions hook $ p {executable = True}
 | 
			
		||||
	where
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ checkRemoteUnused' r = do
 | 
			
		|||
writeUnusedFile :: FilePath -> [(Int, Key)] -> Annex ()
 | 
			
		||||
writeUnusedFile prefix l = do
 | 
			
		||||
	g <- Annex.gitRepo
 | 
			
		||||
	liftIO $ safeWriteFile (gitAnnexUnusedLog prefix g) $
 | 
			
		||||
	liftIO $ viaTmp writeFile (gitAnnexUnusedLog prefix g) $
 | 
			
		||||
		unlines $ map (\(n, k) -> show n ++ " " ++ show k) l
 | 
			
		||||
 | 
			
		||||
table :: [(Int, Key)] -> [String]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -128,7 +128,7 @@ gitAttributesUnWrite repo = do
 | 
			
		|||
	let attributes = Git.attributes repo
 | 
			
		||||
	whenM (doesFileExist attributes) $ do
 | 
			
		||||
		c <- readFileStrict attributes
 | 
			
		||||
		liftIO $ safeWriteFile attributes $ unlines $
 | 
			
		||||
		liftIO $ viaTmp writeFile attributes $ unlines $
 | 
			
		||||
			filter (\l -> not $ l `elem` attrLines) $ lines c
 | 
			
		||||
		Git.run repo "add" [File attributes]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								Utility.hs
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								Utility.hs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -22,7 +22,7 @@ module Utility (
 | 
			
		|||
	shellUnEscape,
 | 
			
		||||
	unsetFileMode,
 | 
			
		||||
	readMaybe,
 | 
			
		||||
	safeWriteFile,
 | 
			
		||||
	viaTmp,
 | 
			
		||||
	dirContains,
 | 
			
		||||
	dirContents,
 | 
			
		||||
	myHomeDir,
 | 
			
		||||
| 
						 | 
				
			
			@ -243,13 +243,14 @@ readMaybe s = case reads s of
 | 
			
		|||
	((x,_):_) -> Just x
 | 
			
		||||
	_ -> Nothing
 | 
			
		||||
 | 
			
		||||
{- Writes a file using a temp file that is renamed atomically into place. -}
 | 
			
		||||
safeWriteFile :: FilePath -> String -> IO ()
 | 
			
		||||
safeWriteFile file content = do
 | 
			
		||||
{- Runs an action like writeFile, writing to a tmp file first and
 | 
			
		||||
 - then moving it into place. -}
 | 
			
		||||
viaTmp :: (FilePath -> String -> IO ()) -> FilePath -> String -> IO ()
 | 
			
		||||
viaTmp a file content = do
 | 
			
		||||
	pid <- getProcessID
 | 
			
		||||
        let tmpfile = file ++ ".tmp" ++ show pid
 | 
			
		||||
	createDirectoryIfMissing True (parentDir file)
 | 
			
		||||
	writeFile tmpfile content
 | 
			
		||||
	a tmpfile content
 | 
			
		||||
	renameFile tmpfile file
 | 
			
		||||
 | 
			
		||||
{- Lists the contents of a directory.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue