diff options
author | Joey Hess <joey@kitenet.net> | 2014-07-10 17:06:04 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-07-10 17:06:04 -0400 |
commit | b873f05ca7e86344a28d269d682b7ffd8a88baca (patch) | |
tree | 2e1191a0e0ded12d30d913937e7335230e5fde9d /Backend | |
parent | 490f52bbab0d6757dbe4b41bab2e39508899efea (diff) |
migrate: Avoid re-checksumming when migrating from hashE to hash backend.
Diffstat (limited to 'Backend')
-rw-r--r-- | Backend/Hash.hs | 10 | ||||
-rw-r--r-- | Backend/URL.hs | 1 | ||||
-rw-r--r-- | Backend/WORM.hs | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/Backend/Hash.hs b/Backend/Hash.hs index 41368a5bb..3ff496271 100644 --- a/Backend/Hash.hs +++ b/Backend/Hash.hs @@ -44,6 +44,7 @@ genBackend hash = Just Backend , getKey = keyValue hash , fsckKey = Just $ checkKeyChecksum hash , canUpgradeKey = Just needsUpgrade + , fastMigrate = Just trivialMigrate } genBackendE :: Hash -> Maybe Backend @@ -129,6 +130,15 @@ needsUpgrade :: Key -> Bool needsUpgrade key = "\\" `isPrefixOf` keyHash key || any (not . validExtension) (takeExtensions $ keyName key) +{- Fast migration from hashE to hash backend. (Optimisation) -} +trivialMigrate :: Key -> Backend -> Maybe Key +trivialMigrate oldkey newbackend + | keyBackendName oldkey == name newbackend ++ "E" = Just $ oldkey + { keyName = keyHash oldkey + , keyBackendName = name newbackend + } + | otherwise = Nothing + hashFile :: Hash -> FilePath -> Integer -> Annex String hashFile hash file filesize = liftIO $ go hash where diff --git a/Backend/URL.hs b/Backend/URL.hs index a8161c98d..4233c56bc 100644 --- a/Backend/URL.hs +++ b/Backend/URL.hs @@ -24,6 +24,7 @@ backend = Backend , getKey = const $ return Nothing , fsckKey = Nothing , canUpgradeKey = Nothing + , fastMigrate = Nothing } {- Every unique url has a corresponding key. -} diff --git a/Backend/WORM.hs b/Backend/WORM.hs index 60db42f56..cc7123850 100644 --- a/Backend/WORM.hs +++ b/Backend/WORM.hs @@ -22,6 +22,7 @@ backend = Backend , getKey = keyValue , fsckKey = Nothing , canUpgradeKey = Nothing + , fastMigrate = Nothing } {- The key includes the file size, modification time, and the |