split off versionedExport from appendonly

S3 uses versionedExport, while GitLFS uses appendonly.

This is groundwork for later changes.
This commit is contained in:
Joey Hess 2020-12-28 14:37:15 -04:00
parent fe4725d66e
commit 46059ab0e5
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
12 changed files with 41 additions and 26 deletions

View file

@ -76,6 +76,7 @@ gen r u rc gc rs = do
{ storeExport = storeExportM serial adir
, retrieveExport = retrieveExportM serial adir
, removeExport = removeExportM serial adir
, versionedExport = False
, checkPresentExport = checkPresentExportM this serial adir
, removeExportDirectory = Just $ removeExportDirectoryM serial adir
, renameExport = renameExportM serial adir

View file

@ -88,6 +88,7 @@ gen r u rc gc rs = do
{ storeExport = storeExportM dir
, retrieveExport = retrieveExportM dir
, removeExport = removeExportM dir
, versionedExport = False
, checkPresentExport = checkPresentExportM dir
-- Not needed because removeExportLocation
-- auto-removes empty directories.

View file

@ -93,6 +93,7 @@ gen r u rc gc rs
{ storeExport = storeExportM external
, retrieveExport = retrieveExportM external
, removeExport = removeExportM external
, versionedExport = False
, checkPresentExport = checkPresentExportM external
, removeExportDirectory = Just $ removeExportDirectoryM external
, renameExport = renameExportM external

View file

@ -39,6 +39,7 @@ instance HasExportUnsupported (ExportActions Annex) where
, retrieveExport = nope
, checkPresentExport = \_ _ -> return False
, removeExport = nope
, versionedExport = False
, removeExportDirectory = nope
, renameExport = \_ _ _ -> return Nothing
}
@ -128,7 +129,8 @@ adjustExportImport' isexport isimport r rs = do
dbv <- prepdbv
ciddbv <- prepciddb
let normal = not isexport && not isimport
let iskeyvaluestore = normal || appendonly r
let versioned = versionedExport (exportActions r)
let iskeyvaluestore = normal || versioned
return $ r
{ exportActions = if isexport
then if isimport
@ -170,16 +172,16 @@ adjustExportImport' isexport isimport r rs = do
else Nothing
, retrieveKeyFile = \k af dest p ->
if isimport
then supportappendonlyretrieve k af dest p $
then supportversionedretrieve k af dest p $
retrieveKeyFileFromImport dbv ciddbv k af dest p
else if isexport
then supportappendonlyretrieve k af dest p $
then supportversionedretrieve k af dest p $
retrieveKeyFileFromExport dbv k af dest p
else retrieveKeyFile r k af dest p
, retrieveKeyFileCheap = if iskeyvaluestore
then retrieveKeyFileCheap r
else Nothing
, checkPresent = \k -> if appendonly r
, checkPresent = \k -> if versioned
then checkPresent r k
else if isimport
then anyM (checkPresentImport ciddbv k)
@ -356,11 +358,11 @@ adjustExportImport' isexport isimport r rs = do
then retrieveKeyFileFromExport dbv k af dest p
else giveup "no content identifier is recorded, unable to retrieve"
-- appendonly remotes have a key/value store, so can use
-- versionedExport remotes have a key/value store, so can use
-- the usual retrieveKeyFile, rather than an import/export
-- variant. However, fall back to that if retrieveKeyFile fails.
supportappendonlyretrieve k af dest p a
| appendonly r =
supportversionedretrieve k af dest p a
| versionedExport (exportActions r) =
retrieveKeyFile r k af dest p
`catchNonAsync` const a
| otherwise = a

View file

@ -73,6 +73,7 @@ gen r u rc gc rs = do
{ storeExport = cannotModify
, retrieveExport = retriveExportHttpAlso url
, removeExport = cannotModify
, versionedExport = False
, checkPresentExport = checkPresentExportHttpAlso url
, removeExportDirectory = Nothing
, renameExport = cannotModify

View file

@ -101,6 +101,7 @@ gen r u rc gc rs = do
{ storeExport = storeExportM o
, retrieveExport = retrieveExportM o
, removeExport = removeExportM o
, versionedExport = False
, checkPresentExport = checkPresentExportM o
, removeExportDirectory = Just (removeExportDirectoryM o)
, renameExport = renameExportM o

View file

@ -210,6 +210,7 @@ gen r u rc gc rs = do
{ storeExport = storeExportS3 hdl this rs info magic
, retrieveExport = retrieveExportS3 hdl this info
, removeExport = removeExportS3 hdl this rs info
, versionedExport = versioning info
, checkPresentExport = checkPresentExportS3 hdl this info
-- S3 does not have directories.
, removeExportDirectory = Nothing
@ -232,7 +233,7 @@ gen r u rc gc rs = do
, gitconfig = gc
, localpath = Nothing
, readonly = False
, appendonly = versioning info
, appendonly = False
, availability = GloballyAvailable
, remotetype = remote
, mkUnavailable = gen r u (M.insert hostField (Proposed "!dne!") rc) gc rs

View file

@ -100,6 +100,7 @@ gen r u rc gc rs = do
, retrieveExport = retrieveExportDav hdl
, checkPresentExport = checkPresentExportDav hdl this
, removeExport = removeExportDav hdl
, versionedExport = False
, removeExportDirectory = Just $
removeExportDirectoryDav hdl
, renameExport = renameExportDav hdl