add VerifiedCopy data type
There should be no behavior changes in this commit, it just adds a more expressive data type and adjusts code that had been passing around a [UUID] or sometimes a Maybe Remote to instead use [VerifiedCopy]. Although, since some functions were taking two different [UUID] lists, there's some potential for me to have gotten it horribly wrong.
This commit is contained in:
parent
b1abe59193
commit
90f7c4b6a2
16 changed files with 107 additions and 60 deletions
|
@ -1,4 +1,4 @@
|
|||
{- git-annex numcopies type
|
||||
{- git-annex numcopies types
|
||||
-
|
||||
- Copyright 2014 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
|
@ -7,8 +7,48 @@
|
|||
|
||||
module Types.NumCopies where
|
||||
|
||||
import Types.UUID
|
||||
|
||||
import qualified Data.Map as M
|
||||
|
||||
newtype NumCopies = NumCopies Int
|
||||
deriving (Ord, Eq)
|
||||
|
||||
fromNumCopies :: NumCopies -> Int
|
||||
fromNumCopies (NumCopies n) = n
|
||||
|
||||
data VerifiedCopy
|
||||
{- Use when a repository cannot be accessed, but it's
|
||||
- a trusted repository, which is presumably not going to
|
||||
- lose a copy. This is the weakest level of verification. -}
|
||||
= TrustedCopy UUID
|
||||
{- Represents a recent verification that a copy of an
|
||||
- object exists in a repository with the given UUID. -}
|
||||
| VerifiedCopy UUID
|
||||
{- The strongest proof of the existence of a copy.
|
||||
- Until its associated action is called to unlock it,
|
||||
- the copy is locked in the repository and is guaranteed
|
||||
- not to be dropped by any git-annex process. -}
|
||||
| VerifiedCopyLock UUID (IO ())
|
||||
|
||||
instance ToUUID VerifiedCopy where
|
||||
toUUID (VerifiedCopy u) = u
|
||||
toUUID (VerifiedCopyLock u _) = u
|
||||
toUUID (TrustedCopy u) = u
|
||||
|
||||
instance Show VerifiedCopy where
|
||||
show (TrustedCopy u) = "TrustedCopy " ++ show u
|
||||
show (VerifiedCopy u) = "VerifiedCopy " ++ show u
|
||||
show (VerifiedCopyLock u _) = "VerifiedCopyLock " ++ show u
|
||||
|
||||
strongestVerifiedCopy :: VerifiedCopy -> VerifiedCopy -> VerifiedCopy
|
||||
strongestVerifiedCopy a@(VerifiedCopyLock _ _) _ = a
|
||||
strongestVerifiedCopy _ b@(VerifiedCopyLock _ _) = b
|
||||
strongestVerifiedCopy a@(VerifiedCopy _) _ = a
|
||||
strongestVerifiedCopy _ b@(VerifiedCopy _) = b
|
||||
strongestVerifiedCopy a@(TrustedCopy _) _ = a
|
||||
|
||||
-- Retains stronger verifications over weaker for the same uuid.
|
||||
deDupVerifiedCopies :: [VerifiedCopy] -> [VerifiedCopy]
|
||||
deDupVerifiedCopies l = M.elems $
|
||||
M.fromListWith strongestVerifiedCopy (zip (map toUUID l) l)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue