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:
parent
4b12506c0a
commit
d87af82d97
3 changed files with 24 additions and 22 deletions
21
Command.hs
21
Command.hs
|
@ -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 )
|
||||||
|
|
|
@ -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
2
debian/changelog
vendored
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue