make readonly export remotes really be readonly

When a remote is configured to be readonly, don't allow changing what's
exported to it.

This was missed in the original export remote implementation, but it makes
sense for a readonly export remote to not be allowed to change.
This commit is contained in:
Joey Hess 2019-05-28 11:04:28 -04:00
parent 4c48efeb35
commit 8960f259b8
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
3 changed files with 38 additions and 2 deletions

View file

@ -18,6 +18,8 @@ git-annex (7.20190508) UNRELEASED; urgency=medium
the description to "", now it will error out. the description to "", now it will error out.
* Android: Improve installation process when the user's login shell is not * Android: Improve installation process when the user's login shell is not
bash. bash.
* When a remote is configured to be readonly, don't allow changing
what's exported to it.
-- Joey Hess <id@joeyh.name> Mon, 06 May 2019 13:52:02 -0400 -- Joey Hess <id@joeyh.name> Mon, 06 May 2019 13:52:02 -0400

View file

@ -1,6 +1,6 @@
{- Adds readonly support to remotes. {- Adds readonly support to remotes.
- -
- Copyright 2013, 2015 Joey Hess <id@joeyh.name> - Copyright 2013-2019 Joey Hess <id@joeyh.name>
- -
- Licensed under the GNU AGPL version 3 or higher. - Licensed under the GNU AGPL version 3 or higher.
-} -}
@ -28,6 +28,17 @@ adjustReadOnly r
{ storeKey = readonlyStoreKey { storeKey = readonlyStoreKey
, removeKey = readonlyRemoveKey , removeKey = readonlyRemoveKey
, repairRepo = Nothing , repairRepo = Nothing
, exportActions = exportActions r
{ storeExport = readonlyStoreExport
, removeExport = readonlyRemoveExport
, removeExportDirectory = Just readonlyRemoveExportDirectory
, renameExport = readonlyRenameExport
}
, importActions = importActions r
{ storeExportWithContentIdentifier = readonlyStoreExportWithContentIdentifiera
, removeExportWithContentIdentifier = readonlyRemoveExportWithContentIdentifier
, removeExportDirectoryWhenEmpty = Just readonlyRemoveExportDirectory
}
} }
| otherwise = r | otherwise = r
@ -40,7 +51,30 @@ readonlyRemoveKey _ = readonlyFail
readonlyStorer :: Storer readonlyStorer :: Storer
readonlyStorer _ _ _ = readonlyFail readonlyStorer _ _ _ = readonlyFail
readonlyStoreExport :: FilePath -> Key -> ExportLocation -> MeterUpdate -> Annex Bool
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
readonlyStoreExportWithContentIdentifier :: FilePath -> Key -> ExportLocation -> [ContentIdentifier] -> MeterUpdate -> Annex (Maybe ContentIdentifier)
readonlyStoreExportWithContentIdentifier _ _ _ _ _ = do
readonlyWarning
return Nothing
removeExportWithContentIdentifier :: Key -> ExportLocation -> [ContentIdentifier] -> Annex Bool
removeExportWithContentIdentifier _ _ _ = readonlyFail
readonlyFail :: Annex Bool readonlyFail :: Annex Bool
readonlyFail = do readonlyFail = do
warning "this remote is readonly" readonlyWarning
return False return False
readonlyWarning :: Annex ()
readonylWarning = warning "this remote is readonly"