aboutsummaryrefslogtreecommitdiff
path: root/Command/Migrate.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-06-05 19:51:03 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-06-05 19:51:03 -0400
commitd3cee987caf20b309334b37bd1b89e8b9115cf0a (patch)
tree8c1a244545efed3b2fd9e48ea28faac12aa326fe /Command/Migrate.hs
parent77188ff04d8d4d42b25daac9eeffbf10d8b663ac (diff)
separate source of content from the filename associated with the key when generating a key
This already made migrate's code a lot simpler.
Diffstat (limited to 'Command/Migrate.hs')
-rw-r--r--Command/Migrate.hs26
1 files changed, 7 insertions, 19 deletions
diff --git a/Command/Migrate.hs b/Command/Migrate.hs
index 6e28c4b52..29e664ce2 100644
--- a/Command/Migrate.hs
+++ b/Command/Migrate.hs
@@ -9,7 +9,7 @@ module Command.Migrate where
import Common.Annex
import Command
-import qualified Backend
+import Backend
import qualified Types.Key
import Annex.Content
import qualified Command.ReKey
@@ -23,14 +23,14 @@ seek = [withFilesInGit $ whenAnnexed start]
start :: FilePath -> (Key, Backend) -> CommandStart
start file (key, oldbackend) = do
exists <- inAnnex key
- newbackend <- choosebackend =<< Backend.chooseBackend file
+ newbackend <- choosebackend =<< chooseBackend file
if (newbackend /= oldbackend || upgradableKey key) && exists
then do
showStart "migrate" file
next $ perform file key newbackend
else stop
where
- choosebackend Nothing = Prelude.head <$> Backend.orderedList
+ choosebackend Nothing = Prelude.head <$> orderedList
choosebackend (Just backend) = return backend
{- Checks if a key is upgradable to a newer representation. -}
@@ -40,25 +40,13 @@ upgradableKey key = isNothing $ Types.Key.keySize key
{- Store the old backend's key in the new backend
- The old backend's key is not dropped from it, because there may
- - be other files still pointing at that key.
- -
- - Use the same filename as the file for the temp file name, to support
- - backends that allow the filename to influence the keys they
- - generate.
- -}
+ - be other files still pointing at that key. -}
perform :: FilePath -> Key -> Backend -> CommandPerform
perform file oldkey newbackend = maybe stop go =<< genkey
where
go newkey = stopUnless (Command.ReKey.linkKey oldkey newkey) $
next $ Command.ReKey.cleanup file oldkey newkey
genkey = do
- src <- inRepo $ gitAnnexLocation oldkey
- tmp <- fromRepo gitAnnexTmpDir
- let tmpfile = tmp </> takeFileName file
- cleantmp tmpfile
- liftIO $ createLink src tmpfile
- newkey <- liftM fst <$>
- Backend.genKey tmpfile (Just newbackend)
- cleantmp tmpfile
- return newkey
- cleantmp t = liftIO $ whenM (doesFileExist t) $ removeFile t
+ content <- inRepo $ gitAnnexLocation oldkey
+ let source = KeySource { keyFilename = file, contentLocation = content }
+ liftM fst <$> genKey source (Just newbackend)