Generate shorter keys for WORM and URL, avoiding keys that are longer than used for SHA256, so as to not break on systems like Windows that have very small maximum path length limits.
This commit is contained in:
parent
ae14354686
commit
c0f2b992ed
4 changed files with 24 additions and 19 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue