9f1577f746
The only remaining vestiage of backends is different types of keys. These are still called "backends", mostly to avoid needing to change user interface and configuration. But everything to do with storing keys in different backends was gone; instead different types of remotes are used. In the refactoring, lots of code was moved out of odd corners like Backend.File, to closer to where it's used, like Command.Drop and Command.Fsck. Quite a lot of dead code was removed. Several data structures became simpler, which may result in better runtime efficiency. There should be no user-visible changes.
43 lines
1 KiB
Haskell
43 lines
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 Control.Monad.State
|
|
import System.FilePath
|
|
import System.Posix.Files
|
|
|
|
import Types.Backend
|
|
import Types
|
|
import Types.Key
|
|
|
|
backends :: [Backend Annex]
|
|
backends = [backend]
|
|
|
|
backend :: Backend Annex
|
|
backend = Types.Backend.Backend {
|
|
name = "WORM",
|
|
getKey = keyValue,
|
|
fsckKey = const (return True)
|
|
}
|
|
|
|
{- 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 :: FilePath -> Annex (Maybe Key)
|
|
keyValue file = do
|
|
stat <- liftIO $ getFileStatus file
|
|
return $ Just $ Key {
|
|
keyName = takeFileName file,
|
|
keyBackendName = name backend,
|
|
keySize = Just $ fromIntegral $ fileSize stat,
|
|
keyMtime = Just $ modificationTime stat
|
|
}
|