diff options
author | Joey Hess <joey@kitenet.net> | 2010-10-18 02:06:27 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-10-18 02:06:27 -0400 |
commit | f3dcc8489d7b7f9417f9752987a298976838ce47 (patch) | |
tree | dccdaea2a16f6fde8f314c381f54b288c19a8996 /TypeInternals.hs | |
parent | 0382d26cdbdc52c1e985cba9667a4d50d0653216 (diff) |
gratuitous rename
Diffstat (limited to 'TypeInternals.hs')
-rw-r--r-- | TypeInternals.hs | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/TypeInternals.hs b/TypeInternals.hs new file mode 100644 index 000000000..e8f7cb9e7 --- /dev/null +++ b/TypeInternals.hs @@ -0,0 +1,70 @@ +{- git-annex internal data types + - + - Most things should not need this, using Types and/or Annex instead. + -} + +module TypeInternals where + +import Control.Monad.State (StateT) +import Data.String.Utils + +import qualified GitRepo as Git + +-- command-line flags +data Flag = Force deriving (Eq, Read, Show) + +-- git-annex's runtime state type doesn't really belong here, +-- but it uses Backend, so has to be here to avoid a depends loop. +data AnnexState = AnnexState { + repo :: Git.Repo, + backends :: [Backend], + supportedBackends :: [Backend], + flags :: [Flag] +} deriving (Show) + +-- git-annex's monad +type Annex = StateT AnnexState IO + +-- annexed filenames are mapped through a backend into keys +type KeyFrag = String +type BackendName = String +data Key = Key (BackendName, KeyFrag) deriving (Eq) + +-- show a key to convert it to a string; the string includes the +-- name of the backend to avoid collisions between key strings +instance Show Key where + show (Key (b, k)) = b ++ ":" ++ k + +instance Read Key where + readsPrec _ s = [((Key (b,k)) ,"")] + where + l = split ":" s + b = l !! 0 + k = join ":" $ drop 1 l + +-- pulls the backend name out +backendName :: Key -> BackendName +backendName (Key (b,k)) = b + +-- pulls the key fragment out +keyFrag :: Key -> KeyFrag +keyFrag (Key (b,k)) = k + +-- this structure represents a key-value backend +data Backend = Backend { + -- name of this backend + name :: String, + -- converts a filename to a key + getKey :: FilePath -> Annex (Maybe Key), + -- stores a file's contents to a key + storeFileKey :: FilePath -> Key -> Annex Bool, + -- retrieves a key's contents to a file + retrieveKeyFile :: Key -> FilePath -> Annex Bool, + -- removes a key + removeKey :: Key -> Annex Bool, + -- checks if a backend is storing the content of a key + hasKey :: Key -> Annex Bool +} + +instance Show Backend where + show backend = "Backend { name =\"" ++ (name backend) ++ "\" }" |