d751591ac8
Added new fields for chunk number, and chunk size. These will not appear in normal keys ever, but will be used for chunked data stored on special remotes. This commit was sponsored by Jouni K Seppanen.
44 lines
1.1 KiB
Haskell
44 lines
1.1 KiB
Haskell
{- git-annex "WORM" backend -- Write Once, Read Many
|
|
-
|
|
- Copyright 2010 Joey Hess <joey@kitenet.net>
|
|
-
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
-}
|
|
|
|
module Backend.WORM (backends) where
|
|
|
|
import Common.Annex
|
|
import Types.Backend
|
|
import Types.Key
|
|
import Types.KeySource
|
|
import Backend.Utilities
|
|
|
|
backends :: [Backend]
|
|
backends = [backend]
|
|
|
|
backend :: Backend
|
|
backend = Backend
|
|
{ name = "WORM"
|
|
, getKey = keyValue
|
|
, fsckKey = Nothing
|
|
, canUpgradeKey = Nothing
|
|
, fastMigrate = Nothing
|
|
}
|
|
|
|
{- The key includes the file size, modification time, and the
|
|
- basename of the filename.
|
|
-
|
|
- That allows multiple files with the same names to have different keys,
|
|
- while also allowing a file to be moved around while retaining the
|
|
- same key.
|
|
-}
|
|
keyValue :: KeySource -> Annex (Maybe Key)
|
|
keyValue source = do
|
|
stat <- liftIO $ getFileStatus $ contentLocation source
|
|
n <- genKeyName $ keyFilename source
|
|
return $ Just $ stubKey
|
|
{ keyName = n
|
|
, keyBackendName = name backend
|
|
, keySize = Just $ fromIntegral $ fileSize stat
|
|
, keyMtime = Just $ modificationTime stat
|
|
}
|