Revision b3f95121
b/src/Ganeti/Utils.hs | ||
---|---|---|
71 | 71 |
, getFStatSafe |
72 | 72 |
, needsReload |
73 | 73 |
, watchFile |
74 |
, safeRenameFile |
|
74 | 75 |
) where |
75 | 76 |
|
76 | 77 |
import Control.Concurrent |
... | ... | |
81 | 82 |
import Data.IORef |
82 | 83 |
import Data.List |
83 | 84 |
import qualified Data.Map as M |
84 |
import System.Directory (renameFile) |
|
85 |
import System.Directory (renameFile, createDirectoryIfMissing)
|
|
85 | 86 |
import System.FilePath.Posix (takeDirectory, takeBaseName) |
86 | 87 |
import System.INotify |
87 | 88 |
import System.Posix.Types |
... | ... | |
638 | 639 |
killINotify inotify |
639 | 640 |
return result |
640 | 641 |
|
642 |
-- | Safely rename a file, creating the target directory, if needed. |
|
643 |
safeRenameFile :: FilePath -> FilePath -> IO (Result ()) |
|
644 |
safeRenameFile from to = do |
|
645 |
result <- try $ do |
|
646 |
createDirectoryIfMissing True $ takeDirectory to |
|
647 |
renameFile from to |
|
648 |
return $ either (Bad . show) Ok (result :: Either IOError ()) |
Also available in: Unified diff