diff options
Diffstat (limited to 'Backend/Utilities.hs')
-rw-r--r-- | Backend/Utilities.hs | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/Backend/Utilities.hs b/Backend/Utilities.hs index 24dbfd6d9..6426353e7 100644 --- a/Backend/Utilities.hs +++ b/Backend/Utilities.hs @@ -13,13 +13,18 @@ import Common.Annex {- Generates a keyName from an input string. Takes care of sanitizing it. - If it's not too long, the full string is used as the keyName. - - Otherwise, it's truncated at half the filename length limit, and its - - md5 is prepended to ensure a unique key. -} -genKeyName :: String -> Annex String -genKeyName s = do - limit <- liftIO . fileNameLengthLimit =<< fromRepo gitAnnexDir - let s' = preSanitizeKeyName s - let truncs = truncateFilePath (limit `div` 2) s' - return $ if s' == truncs - then s' - else truncs ++ "-" ++ md5s (Str s) + - Otherwise, it's truncated, and its md5 is prepended to ensure a unique + - key. -} +genKeyName :: String -> String +genKeyName s + -- Avoid making keys longer than the length of a SHA256 checksum. + | bytelen > sha256len = + truncateFilePath (sha256len - md5len - 1) s' ++ "-" ++ md5s (Str s) + | otherwise = s' + where + s' = preSanitizeKeyName s + bytelen = length (decodeW8 s') + + sha256len = 64 + md5len = 32 + |