better interface for catKey'

It only needs the size, so don't require the other stuff. Should let it
be used in more places, making things faster.
This commit is contained in:
Joey Hess 2021-03-16 14:52:23 -04:00
parent 69dd214d59
commit 8bae692486
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
2 changed files with 9 additions and 4 deletions

View file

@ -133,10 +133,12 @@ catFileStop = do
{- From ref to a symlink or a pointer file, get the key. -}
catKey :: Ref -> Annex (Maybe Key)
catKey ref = catKey' ref =<< catObjectMetaData ref
catKey ref = catObjectMetaData ref >>= \case
Just (_, sz, _) -> catKey' ref sz
Nothing -> return Nothing
catKey' :: Ref -> Maybe (Sha, Integer, ObjectType) -> Annex (Maybe Key)
catKey' ref (Just (_, sz, _))
catKey' :: Ref -> FileSize -> Annex (Maybe Key)
catKey' ref sz
-- Avoid catting large files, that cannot be symlinks or
-- pointer files, which would require buffering their
-- content in memory, as well as a lot of IO.

View file

@ -105,7 +105,10 @@ clean file = do
Nothing -> do
let fileref = Git.Ref.fileRef file
indexmeta <- catObjectMetaData fileref
go' b indexmeta =<< catKey' fileref indexmeta
oldkey <- case indexmeta of
Just (_, sz, _) -> catKey' fileref sz
Nothing -> return Nothing
go' b indexmeta oldkey
go' b indexmeta oldkey = ifM (shouldAnnex file indexmeta oldkey)
( do
-- Before git 2.5, failing to consume all stdin here