Actions: use `mv` instead of renameDirectory (fixes #236)
authorMichal Terepeta <michal.terepeta@gmail.com>
Thu, 5 May 2016 15:05:24 +0000 (17:05 +0200)
committerMichal Terepeta <michal.terepeta@gmail.com>
Thu, 5 May 2016 15:10:32 +0000 (17:10 +0200)
Implementing `moveDirectory` by calling into `renameDirectory` is
problematic because it doesn't work across file-systems (e.g., a
tmpfs based `/tmp`).

This fixes the problem by calling into `mv` instead (similarly to
what we do for `copyDirectory`).

src/Rules/Actions.hs

index 9a9e51e..fd117ae 100644 (file)
@@ -124,7 +124,7 @@ copyDirectory source target = do
 moveDirectory :: FilePath -> FilePath -> Action ()
 moveDirectory source target = do
     putProgressInfo $ renderAction "Move directory" source target
-    liftIO $ IO.renameDirectory source target
+    quietly $ cmd (EchoStdout False) ["mv", source, target]
 
 -- | Transform a given file by applying a function to its contents.
 fixFile :: FilePath -> (String -> String) -> Action ()