summaryrefslogtreecommitdiff
path: root/Command/Migrate.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-03-23 17:25:28 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-03-23 17:25:28 -0400
commit8beb72e20604b0d2cc6359e75ed4eac45fcd1081 (patch)
tree8780cf25d5f304321d984bef9ea90946f3dc3576 /Command/Migrate.hs
parentaf45a62980b6b231225e4456e602eec4dfc4e04b (diff)
migrate: Bugfix for case when migrating a file results in a key that is already present in .git/annex/objects.
For example, this could happen if using SHA1 and a file with content "foo" were added to that backend. Then a file with "content" foo were migrated from the WORM backend. Assume that, if a backend assigned the same key, the already annexed content must be the same. So, the "old" content can be reused.
Diffstat (limited to 'Command/Migrate.hs')
-rw-r--r--Command/Migrate.hs4
1 files changed, 3 insertions, 1 deletions
diff --git a/Command/Migrate.hs b/Command/Migrate.hs
index 56147113b..38dfd06b2 100644
--- a/Command/Migrate.hs
+++ b/Command/Migrate.hs
@@ -8,6 +8,7 @@
module Command.Migrate where
import Control.Monad.State (liftIO)
+import Control.Monad (unless)
import System.Posix.Files
import System.Directory
@@ -58,7 +59,8 @@ perform file oldkey newbackend = do
ok <- getViaTmpUnchecked newkey $ \t -> do
-- Make a hard link to the old backend's
-- cached key, to avoid wasting disk space.
- liftIO $ createLink src t
+ exists <- liftIO $ doesFileExist t
+ unless exists $ liftIO $ createLink src t
return True
if ok
then do