verify associated files when checking numcopies
Most of this is just refactoring. But, handleDropsFrom did not verify that associated files from the keys db were still accurate, and has now been fixed to. A minor improvement to this would be to avoid calling catKeyFile twice on the same file, when getting the numcopies and mincopies value, in the common case where the same file has the highest value for both. But, it avoids checking every associated file, so it will scale well to lots of dups already. Sponsored-by: Kevin Mueller on Patreon
This commit is contained in:
parent
d164434679
commit
af9fdf5dba
5 changed files with 68 additions and 10 deletions
|
@ -52,11 +52,7 @@ type Reason = String
|
|||
handleDropsFrom :: [UUID] -> [Remote] -> Reason -> Bool -> Key -> AssociatedFile -> SeekInput -> [VerifiedCopy] -> (CommandStart -> CommandCleanup) -> Annex ()
|
||||
handleDropsFrom locs rs reason fromhere key afile si preverified runner = do
|
||||
g <- Annex.gitRepo
|
||||
l <- map (`fromTopFilePath` g)
|
||||
<$> Database.Keys.getAssociatedFiles key
|
||||
let fs = case afile of
|
||||
AssociatedFile (Just f) -> f : filter (/= f) l
|
||||
AssociatedFile Nothing -> l
|
||||
fs <- Database.Keys.getAssociatedFilesIncluding afile key
|
||||
n <- getcopies fs
|
||||
void $ if fromhere && checkcopies n Nothing
|
||||
then go fs rs n >>= dropl fs
|
||||
|
@ -64,11 +60,7 @@ handleDropsFrom locs rs reason fromhere key afile si preverified runner = do
|
|||
where
|
||||
getcopies fs = do
|
||||
(untrusted, have) <- trustPartition UnTrusted locs
|
||||
(numcopies, mincopies) <- if null fs
|
||||
then (,) <$> getNumCopies <*> getMinCopies
|
||||
else do
|
||||
l <- mapM getFileNumMinCopies fs
|
||||
return (maximum $ map fst l, maximum $ map snd l)
|
||||
(numcopies, mincopies) <- getSafestNumMinCopies' key fs
|
||||
return (length have, numcopies, mincopies, S.fromList untrusted)
|
||||
|
||||
{- Check that we have enough copies still to drop the content.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue