summaryrefslogtreecommitdiff
path: root/Annex/Locations.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Annex/Locations.hs')
-rw-r--r--Annex/Locations.hs15
1 files changed, 13 insertions, 2 deletions
diff --git a/Annex/Locations.hs b/Annex/Locations.hs
index e12920091..47768b9c1 100644
--- a/Annex/Locations.hs
+++ b/Annex/Locations.hs
@@ -69,6 +69,7 @@ module Annex.Locations (
hashDirMixed,
hashDirLower,
preSanitizeKeyName,
+ reSanitizeKeyName,
prop_isomorphic_fileKey
) where
@@ -426,7 +427,10 @@ gitAnnexAssistantDefaultDir = "annex"
- same key.
-}
preSanitizeKeyName :: String -> String
-preSanitizeKeyName = concatMap escape
+preSanitizeKeyName = preSanitizeKeyName' False
+
+preSanitizeKeyName' :: Bool -> String -> String
+preSanitizeKeyName' resanitize = concatMap escape
where
escape c
| isAsciiUpper c || isAsciiLower c || isDigit c = [c]
@@ -435,9 +439,16 @@ preSanitizeKeyName = concatMap escape
-- , is safe and uncommon, so will be used to escape
-- other characters. By itself, it is escaped to
-- doubled form.
- | c == ',' = ",,"
+ | c == ',' = if not resanitize
+ then ",,"
+ else ","
| otherwise = ',' : show (ord c)
+{- Converts a keyName that has been santizied with an old version of
+ - preSanitizeKeyName to be sanitized with the new version. -}
+reSanitizeKeyName :: String -> String
+reSanitizeKeyName = preSanitizeKeyName' True
+
{- Converts a key into a filename fragment without any directory.
-
- Escape "/" in the key name, to keep a flat tree of files and avoid