git-annex/Remote/Helper/ReadOnly.hs

84 lines
2.6 KiB
Haskell
Raw Normal View History

{- Adds readonly support to remotes.
-
- Copyright 2013-2019 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU AGPL version 3 or higher.
-}
module Remote.Helper.ReadOnly
( adjustReadOnly
, readonlyStoreKey
, readonlyStorer
, readonlyRemoveKey
) where
import Annex.Common
import Types.Remote
import Types.StoreRetrieve
2019-05-28 15:17:25 +00:00
import Types.Import
import Types.Export
import Utility.Metered
{- Adds support for read-only remotes, by replacing the
- methods that write to a remote with dummies that fail.
-
- Note that disabling git pushes to remotes is not handled here.
-}
adjustReadOnly :: Remote -> Remote
adjustReadOnly r
| remoteAnnexReadOnly (gitconfig r) = r
{ storeKey = readonlyStoreKey
, removeKey = readonlyRemoveKey
, repairRepo = Nothing
2019-05-28 15:17:25 +00:00
, exportActions = (exportActions r)
{ storeExport = readonlyStoreExport
, removeExport = readonlyRemoveExport
, removeExportDirectory = Just readonlyRemoveExportDirectory
, renameExport = readonlyRenameExport
}
2019-05-28 15:17:25 +00:00
, importActions = (importActions r)
{ storeExportWithContentIdentifier = readonlyStoreExportWithContentIdentifier
, removeExportWithContentIdentifier = readonlyRemoveExportWithContentIdentifier
, removeExportDirectoryWhenEmpty = Just readonlyRemoveExportDirectory
}
}
| otherwise = r
readonlyStoreKey :: Key -> AssociatedFile -> MeterUpdate -> Annex ()
readonlyStoreKey _ _ _ = readonlyFail
2020-05-14 18:08:09 +00:00
readonlyRemoveKey :: Key -> Annex ()
readonlyRemoveKey _ = readonlyFail
readonlyStorer :: Storer
readonlyStorer _ _ _ = readonlyFail
2020-05-15 16:17:15 +00:00
readonlyStoreExport :: FilePath -> Key -> ExportLocation -> MeterUpdate -> Annex ()
readonlyStoreExport _ _ _ _ = readonlyFail
readonlyRemoveExport :: Key -> ExportLocation -> Annex Bool
readonlyRemoveExport _ _ = readonlyFail'
readonlyRemoveExportDirectory :: ExportDirectory -> Annex Bool
readonlyRemoveExportDirectory _ = readonlyFail'
readonlyRenameExport :: Key -> ExportLocation -> ExportLocation -> Annex (Maybe Bool)
readonlyRenameExport _ _ _ = return Nothing
2020-05-15 16:17:15 +00:00
readonlyStoreExportWithContentIdentifier :: FilePath -> Key -> ExportLocation -> [ContentIdentifier] -> MeterUpdate -> Annex ContentIdentifier
readonlyStoreExportWithContentIdentifier _ _ _ _ _ = readonlyFail
2019-05-28 15:17:25 +00:00
readonlyRemoveExportWithContentIdentifier :: Key -> ExportLocation -> [ContentIdentifier] -> Annex Bool
readonlyRemoveExportWithContentIdentifier _ _ _ = readonlyFail'
2020-05-15 16:17:15 +00:00
readonlyFail :: Annex a
readonlyFail = giveup readonlyWarning
readonlyFail' :: Annex Bool
readonlyFail' = do
warning readonlyWarning
return False
readonlyWarning :: String
readonlyWarning = "this remote is readonly"