better key to file mapping

This commit is contained in:
Joey Hess 2010-10-13 01:04:06 -04:00
parent 67ae9d7fa1
commit 16cd682290

View file

@ -20,10 +20,17 @@ gitStateDir :: GitRepo -> FilePath
gitStateDir repo = (gitWorkTree repo) ++ "/" ++ stateLoc ++ "/"
{- Converts a key into a filename fragment.
- Just escape "/" in the key name, to keep a flat
- tree of files and avoid issues with files ending with "/" etc. -}
-
- Escape "/" in the key name, to keep a flat tree of files and avoid
- issues with keys containing "/../" or ending with "/" etc.
-
- "/" is escaped to "%" because it's short and rarely used, and resembles
- a slash
- "%" is escaped to "&s", and "&" to "&a"; this ensures that the mapping
- is one to one.
- -}
keyFile :: Key -> FilePath
keyFile key = replace "/" "&s" $ replace "&" "&a" key
keyFile key = replace "/" "%" $ replace "%" "%s" $ replace "&" "&a" key
{- An annexed file's content is stored in
- .git/annex/<backend>/<key> ; this allows deriving the key and backend
@ -32,6 +39,7 @@ annexLocation :: State -> Backend -> Key -> FilePath
annexLocation state backend key =
(gitWorkTree $ repo state) ++ "/" ++
(annexLocationRelative state backend key)
annexLocationRelative :: State -> Backend -> Key -> FilePath
annexLocationRelative state backend key =
gitDir (repo state) ++ "/annex/" ++ (name backend) ++