add hash directory stuff, not used yet
This commit is contained in:
parent
83a9bb624b
commit
0e0f85e09d
1 changed files with 29 additions and 0 deletions
29
Locations.hs
29
Locations.hs
|
@ -26,6 +26,9 @@ module Locations (
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import Data.String.Utils
|
import Data.String.Utils
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Bits
|
||||||
|
import Word
|
||||||
|
import Data.Hash.MD5
|
||||||
|
|
||||||
import Types
|
import Types
|
||||||
import qualified GitRepo as Git
|
import qualified GitRepo as Git
|
||||||
|
@ -128,3 +131,29 @@ fileKey file = read $
|
||||||
prop_idempotent_fileKey :: String -> Bool
|
prop_idempotent_fileKey :: String -> Bool
|
||||||
prop_idempotent_fileKey s = k == fileKey (keyFile k)
|
prop_idempotent_fileKey s = k == fileKey (keyFile k)
|
||||||
where k = read $ "test:" ++ s
|
where k = read $ "test:" ++ s
|
||||||
|
|
||||||
|
{- Given a filename, generates a short directory name to put it in,
|
||||||
|
- to do hashing to protect against filesystems that dislike having
|
||||||
|
- many items in a single directory. -}
|
||||||
|
hashDir :: FilePath -> FilePath
|
||||||
|
hashDir s = take 2 $ abcd_to_dir $ md5 (Str s)
|
||||||
|
|
||||||
|
abcd_to_dir :: ABCD -> String
|
||||||
|
abcd_to_dir (ABCD (a,b,c,d)) = concat $ map display_32bits_as_dir [a,b,c,d]
|
||||||
|
|
||||||
|
{- modified version of display_32bits_as_hex from Data.Hash.MD5
|
||||||
|
- Copyright (C) 2001 Ian Lynagh
|
||||||
|
- License: Either BSD or GPL
|
||||||
|
-}
|
||||||
|
display_32bits_as_dir :: Word32 -> String
|
||||||
|
display_32bits_as_dir w = trim $ swap_pairs cs
|
||||||
|
where
|
||||||
|
-- Need 32 characters to use. To avoid inaverdently making
|
||||||
|
-- a real word, use the alphabet without vowels.
|
||||||
|
chars = ['0'..'9'] ++ "bcdfghjklnmpqrstvwxyzZ"
|
||||||
|
cs = map (\x -> getc $ (shiftR w (6*x)) .&. 31) [0..7]
|
||||||
|
getc n = chars !! (fromIntegral n)
|
||||||
|
swap_pairs (x1:x2:xs) = x2:x1:swap_pairs xs
|
||||||
|
swap_pairs _ = []
|
||||||
|
-- Last 2 will always be 00, so omit.
|
||||||
|
trim s = take 6 s
|
||||||
|
|
Loading…
Reference in a new issue