drop --auto: Fix bug that prevented dropping files from untrusted repositories.

This is a corresponding bug to the one I fixed yesterday in the assistant.
This commit is contained in:
Joey Hess 2013-04-01 15:20:42 -04:00
parent 4b12506c0a
commit d87af82d97
3 changed files with 24 additions and 22 deletions

View file

@ -20,7 +20,6 @@ module Command (
isBareRepo, isBareRepo,
numCopies, numCopies,
numCopiesCheck, numCopiesCheck,
autoCopiesWith,
checkAuto, checkAuto,
module ReExported module ReExported
) where ) where
@ -109,26 +108,6 @@ numCopiesCheck file key vs = do
have <- trustExclude UnTrusted =<< Remote.keyLocations key have <- trustExclude UnTrusted =<< Remote.keyLocations key
return $ length have `vs` needed return $ length have `vs` needed
{- Used for commands that have an auto mode that checks the number of known
- copies of a key.
-
- In auto mode, first checks that the number of known
- copies of the key is > or < than the numcopies setting, before running
- the action.
-}
autoCopiesWith :: FilePath -> Key -> (Int -> Int -> Bool) -> (Maybe Int -> CommandStart) -> CommandStart
autoCopiesWith file key vs a = do
numcopiesattr <- numCopies file
Annex.getState Annex.auto >>= auto numcopiesattr
where
auto numcopiesattr False = a numcopiesattr
auto numcopiesattr True = do
needed <- getNumCopies numcopiesattr
have <- trustExclude UnTrusted =<< Remote.keyLocations key
if length have `vs` needed
then a numcopiesattr
else stop
checkAuto :: Annex Bool -> Annex Bool checkAuto :: Annex Bool -> Annex Bool
checkAuto checker = ifM (Annex.getState Annex.auto) checkAuto checker = ifM (Annex.getState Annex.auto)
( checker , return True ) ( checker , return True )

View file

@ -31,7 +31,7 @@ seek = [withField fromOption Remote.byNameWithUUID $ \from ->
withFilesInGit $ whenAnnexed $ start from] withFilesInGit $ whenAnnexed $ start from]
start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
start from file (key, _) = autoCopiesWith file key (>) $ \numcopies -> start from file (key, _) = checkDropAuto from file key $ \numcopies ->
stopUnless (checkAuto $ wantDrop False (Remote.uuid <$> from) (Just file)) $ stopUnless (checkAuto $ wantDrop False (Remote.uuid <$> from) (Just file)) $
case from of case from of
Nothing -> startLocal file numcopies key Nothing Nothing -> startLocal file numcopies key Nothing
@ -138,3 +138,24 @@ notEnoughCopies key need have skip bad = do
where where
unsafe = showNote "unsafe" unsafe = showNote "unsafe"
hint = showLongNote "(Use --force to override this check, or adjust annex.numcopies.)" hint = showLongNote "(Use --force to override this check, or adjust annex.numcopies.)"
{- In auto mode, only runs the action if there are enough copies
- copies on other semitrusted repositories.
-
- Passes any numcopies attribute of the file on to the action as an
- optimisation. -}
checkDropAuto :: Maybe Remote -> FilePath -> Key -> (Maybe Int -> CommandStart) -> CommandStart
checkDropAuto mremote file key a = do
numcopiesattr <- numCopies file
Annex.getState Annex.auto >>= auto numcopiesattr
where
auto numcopiesattr False = a numcopiesattr
auto numcopiesattr True = do
needed <- getNumCopies numcopiesattr
locs <- Remote.keyLocations key
uuid <- getUUID
let remoteuuid = fromMaybe uuid $ Remote.uuid <$> mremote
locs' <- trustExclude UnTrusted $ filter (/= remoteuuid) locs
if length locs' >= needed
then a numcopiesattr
else stop

2
debian/changelog vendored
View file

@ -22,6 +22,8 @@ git-annex (4.20130324) UNRELEASED; urgency=low
* Adjust built-in preferred content expressions to make most types * Adjust built-in preferred content expressions to make most types
of repositories want content that is only located on untrusted, dead, of repositories want content that is only located on untrusted, dead,
and unwanted repositories. and unwanted repositories.
* drop --auto: Fix bug that prevented dropping files from untrusted
repositories.
-- Joey Hess <joeyh@debian.org> Mon, 25 Mar 2013 10:21:46 -0400 -- Joey Hess <joeyh@debian.org> Mon, 25 Mar 2013 10:21:46 -0400