Merge branch 'master' into git-remote-annex
This commit is contained in:
commit
ff5193c6ad
137 changed files with 2031 additions and 325 deletions
|
@ -215,7 +215,7 @@ poolVar = unsafePerformIO $ newMVar M.empty
|
|||
-- using it.
|
||||
newExternalState :: ExternalBackendName -> HasExt -> ExternalAddonPID -> Annex ExternalState
|
||||
newExternalState ebname hasext pid = do
|
||||
st <- startExternalAddonProcess basecmd pid
|
||||
st <- startExternalAddonProcess basecmd [] pid
|
||||
st' <- case st of
|
||||
Left (ProgramNotInstalled msg) -> warnonce msg >> return st
|
||||
Left (ProgramFailure msg) -> warnonce msg >> return st
|
||||
|
|
|
@ -174,11 +174,14 @@ needsUpgrade key = or
|
|||
]
|
||||
|
||||
trivialMigrate :: Key -> Backend -> AssociatedFile -> Bool -> Annex (Maybe Key)
|
||||
trivialMigrate oldkey newbackend afile _inannex = trivialMigrate' oldkey newbackend afile
|
||||
<$> (annexMaxExtensionLength <$> Annex.getGitConfig)
|
||||
trivialMigrate oldkey newbackend afile _inannex = do
|
||||
c <- Annex.getGitConfig
|
||||
return $ trivialMigrate' oldkey newbackend afile
|
||||
(annexMaxExtensionLength c)
|
||||
(annexMaxExtensions c)
|
||||
|
||||
trivialMigrate' :: Key -> Backend -> AssociatedFile -> Maybe Int -> Maybe Key
|
||||
trivialMigrate' oldkey newbackend afile maxextlen
|
||||
trivialMigrate' :: Key -> Backend -> AssociatedFile -> Maybe Int -> Maybe Int -> Maybe Key
|
||||
trivialMigrate' oldkey newbackend afile maxextlen maxexts
|
||||
{- Fast migration from hashE to hash backend. -}
|
||||
| migratable && hasExt oldvariety = Just $ alterKey oldkey $ \d -> d
|
||||
{ keyName = S.toShort (keyHash oldkey)
|
||||
|
@ -189,7 +192,7 @@ trivialMigrate' oldkey newbackend afile maxextlen
|
|||
AssociatedFile Nothing -> Nothing
|
||||
AssociatedFile (Just file) -> Just $ alterKey oldkey $ \d -> d
|
||||
{ keyName = S.toShort $ keyHash oldkey
|
||||
<> selectExtension maxextlen file
|
||||
<> selectExtension maxextlen maxexts file
|
||||
, keyVariety = newvariety
|
||||
}
|
||||
{- Upgrade to fix bad previous migration that created a
|
||||
|
|
|
@ -45,20 +45,24 @@ genKeyName s
|
|||
- file that the key was generated from. -}
|
||||
addE :: KeySource -> (KeyVariety -> KeyVariety) -> Key -> Annex Key
|
||||
addE source sethasext k = do
|
||||
maxlen <- annexMaxExtensionLength <$> Annex.getGitConfig
|
||||
let ext = selectExtension maxlen (keyFilename source)
|
||||
c <- Annex.getGitConfig
|
||||
let ext = selectExtension
|
||||
(annexMaxExtensionLength c)
|
||||
(annexMaxExtensions c)
|
||||
(keyFilename source)
|
||||
return $ alterKey k $ \d -> d
|
||||
{ keyName = keyName d <> S.toShort ext
|
||||
, keyVariety = sethasext (keyVariety d)
|
||||
}
|
||||
|
||||
selectExtension :: Maybe Int -> RawFilePath -> S.ByteString
|
||||
selectExtension maxlen f
|
||||
selectExtension :: Maybe Int -> Maybe Int -> RawFilePath -> S.ByteString
|
||||
selectExtension maxlen maxextensions f
|
||||
| null es = ""
|
||||
| otherwise = S.intercalate "." ("":es)
|
||||
where
|
||||
es = filter (not . S.null) $ reverse $
|
||||
take 2 $ filter (S.all validInExtension) $
|
||||
take (fromMaybe maxExtensions maxextensions) $
|
||||
filter (S.all validInExtension) $
|
||||
takeWhile shortenough $
|
||||
reverse $ S.split (fromIntegral (ord '.')) (P.takeExtensions f')
|
||||
shortenough e = S.length e <= fromMaybe maxExtensionLen maxlen
|
||||
|
@ -75,3 +79,6 @@ validInExtension c
|
|||
|
||||
maxExtensionLen :: Int
|
||||
maxExtensionLen = 4 -- long enough for "jpeg"
|
||||
|
||||
maxExtensions :: Int
|
||||
maxExtensions = 2 -- include both extensions of "tar.gz"
|
||||
|
|
|
@ -41,7 +41,7 @@ backendVURL = Backend
|
|||
Nothing -> pure False
|
||||
anyM check eks
|
||||
, verifyKeyContentIncrementally = Just $ \k -> do
|
||||
-- Run incremental verifiers for each equivilant key together,
|
||||
-- Run incremental verifiers for each equivalent key together,
|
||||
-- and see if any of them succeed.
|
||||
eks <- equivkeys k
|
||||
let get = \ek -> getbackend ek >>= \case
|
||||
|
@ -53,7 +53,7 @@ backendVURL = Backend
|
|||
return $ IncrementalVerifier
|
||||
{ updateIncrementalVerifier = \s ->
|
||||
forM_ l $ flip updateIncrementalVerifier s
|
||||
-- If there are no equivilant keys recorded somehow,
|
||||
-- If there are no equivalent keys recorded somehow,
|
||||
-- or if none of them support incremental verification,
|
||||
-- this will return Nothing, which indicates that
|
||||
-- incremental verification was not able to be
|
||||
|
@ -80,9 +80,9 @@ backendVURL = Backend
|
|||
-- Not all keys using this backend are necessarily
|
||||
-- cryptographically secure.
|
||||
, isCryptographicallySecure = False
|
||||
-- A key is secure when all recorded equivilant keys are.
|
||||
-- A key is secure when all recorded equivalent keys are.
|
||||
-- If there are none recorded yet, it's secure because when
|
||||
-- downloaded, an equivilant key that is cryptographically secure
|
||||
-- downloaded, an equivalent key that is cryptographically secure
|
||||
-- will be constructed then.
|
||||
, isCryptographicallySecureKey = \k ->
|
||||
equivkeys k >>= \case
|
||||
|
@ -95,7 +95,7 @@ backendVURL = Backend
|
|||
}
|
||||
where
|
||||
equivkeys k = filter allowedequiv <$> getEquivilantKeys k
|
||||
-- Don't allow using VURL keys as equivilant keys, because that
|
||||
-- Don't allow using VURL keys as equivalent keys, because that
|
||||
-- could let a crafted git-annex branch cause an infinite loop.
|
||||
allowedequiv ek = fromKey keyVariety ek /= VURLKey
|
||||
varietymap = makeVarietyMap regularBackendList
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue