summaryrefslogtreecommitdiff
path: root/Locations.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-10-12 20:04:36 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-10-12 20:04:36 -0400
commitb7858ada038084c8455cdf9d3598382308dc52b3 (patch)
tree373fec9662eb3b7c592dc28ccd301473fb3ce1a2 /Locations.hs
parent476f66abb99ad2baa18b699c26ac9ee7250eca76 (diff)
bugfixes
Diffstat (limited to 'Locations.hs')
-rw-r--r--Locations.hs25
1 files changed, 24 insertions, 1 deletions
diff --git a/Locations.hs b/Locations.hs
index 300f443f7..59f9df727 100644
--- a/Locations.hs
+++ b/Locations.hs
@@ -3,9 +3,14 @@
module Locations (
gitStateDir,
- stateLoc
+ stateLoc,
+ keyFile,
+ annexLocation,
+ backendFile
) where
+import Data.String.Utils
+import Types
import GitRepo
{- Long-term, cross-repo state is stored in files inside the .git-annex
@@ -13,3 +18,21 @@ import GitRepo
stateLoc = ".git-annex"
gitStateDir :: GitRepo -> FilePath
gitStateDir repo = (gitWorkTree repo) ++ "/" ++ stateLoc ++ "/"
+
+{- Generates a filename that can be used to record a key somewhere to disk.
+ - Just escape "/" in the key name, to keep a flat
+ - tree of files and avoid issues with files ending with "/" etc. -}
+keyFile :: Key -> FilePath
+keyFile key = replace "/" "%" $ replace "%" "%%" key
+
+{- An annexed file's content is stored somewhere under .git/annex/,
+ - based on the key. -}
+annexLocation :: State -> Key -> FilePath
+annexLocation state key = gitDir (repo state) ++ "/annex/" ++ (keyFile key)
+
+{- Name of state file that holds the key for an annexed file,
+ - using a given backend. -}
+backendFile :: State -> Backend -> FilePath -> String
+backendFile state backend file =
+ gitStateDir (repo state) ++ (gitRelative (repo state) file) ++
+ "." ++ (name backend)