implement Unavilable for gcrypt
Sponsored-by: Brett Eisenberg on Patreon
This commit is contained in:
parent
977403d338
commit
7aac60769a
4 changed files with 23 additions and 26 deletions
|
@ -10,7 +10,7 @@ git-annex (10.20230803) UNRELEASED; urgency=medium
|
|||
* Stop bundling curl in the OSX dmg and linux standalone image.
|
||||
* sync, assist, push, pull: Skip more types of remotes when they
|
||||
are not present due to eg being on a drive that is offline.
|
||||
(directory, borg, bup, ddar, rsync)
|
||||
(directory, borg, bup, ddar, gcrypt, rsync)
|
||||
* info: Added available to the info displayed for a remote.
|
||||
* Added AVAILABILITY UNAVAILABLE and the UNAVAILABLERESPONSE extension
|
||||
to the external special remote protocol.
|
||||
|
|
|
@ -158,7 +158,7 @@ gen' r u c gc rs = do
|
|||
, readonly = Git.repoIsHttp r
|
||||
, appendonly = False
|
||||
, untrustworthy = False
|
||||
, availability = pure (availabilityCalc r)
|
||||
, availability = repoAvail r
|
||||
, remotetype = remote
|
||||
, mkUnavailable = return Nothing
|
||||
, getInfo = gitRepoInfo this
|
||||
|
|
|
@ -231,26 +231,6 @@ unavailable r = gen r'
|
|||
Nothing -> r { Git.location = Git.Unknown }
|
||||
_ -> r -- already unavailable
|
||||
|
||||
{- Checks relatively inexpensively if a repository is available for use. -}
|
||||
repoAvail :: Git.Repo -> Annex Availability
|
||||
repoAvail r
|
||||
| Git.repoIsHttp r = return GloballyAvailable
|
||||
| Git.GCrypt.isEncrypted r = do
|
||||
g <- gitRepo
|
||||
liftIO $ do
|
||||
er <- Git.GCrypt.encryptedRemote g r
|
||||
if Git.repoIsLocal er || Git.repoIsLocalUnknown er
|
||||
then checklocal er
|
||||
else return GloballyAvailable
|
||||
| Git.repoIsUrl r = return GloballyAvailable
|
||||
| Git.repoIsLocalUnknown r = return Unavailable
|
||||
| otherwise = checklocal r
|
||||
where
|
||||
checklocal r' = ifM (liftIO $ isJust <$> catchMaybeIO (Git.Config.read r'))
|
||||
( return LocallyAvailable
|
||||
, return Unavailable
|
||||
)
|
||||
|
||||
{- Tries to read the config for a specified remote, updates state, and
|
||||
- returns the updated repo. -}
|
||||
tryGitConfigRead :: Bool -> Git.Repo -> Bool -> Annex Git.Repo
|
||||
|
|
|
@ -9,9 +9,11 @@ module Remote.Helper.Git where
|
|||
|
||||
import Annex.Common
|
||||
import qualified Git
|
||||
import qualified Git.GCrypt
|
||||
import Types.Availability
|
||||
import qualified Types.Remote as Remote
|
||||
import qualified Utility.RawFilePath as R
|
||||
import qualified Git.Config
|
||||
|
||||
import Data.Time.Clock.POSIX
|
||||
import System.PosixCompat.Files (modificationTime)
|
||||
|
@ -24,10 +26,25 @@ localpathCalc r
|
|||
| not (Git.repoIsLocal r) && not (Git.repoIsLocalUnknown r) = Nothing
|
||||
| otherwise = Just $ fromRawFilePath $ Git.repoPath r
|
||||
|
||||
availabilityCalc :: Git.Repo -> Availability
|
||||
availabilityCalc r
|
||||
| (Git.repoIsLocal r || Git.repoIsLocalUnknown r) = LocallyAvailable
|
||||
| otherwise = GloballyAvailable
|
||||
{- Checks relatively inexpensively if a repository is available for use. -}
|
||||
repoAvail :: Git.Repo -> Annex Availability
|
||||
repoAvail r
|
||||
| Git.repoIsHttp r = return GloballyAvailable
|
||||
| Git.GCrypt.isEncrypted r = do
|
||||
g <- gitRepo
|
||||
liftIO $ do
|
||||
er <- Git.GCrypt.encryptedRemote g r
|
||||
if Git.repoIsLocal er || Git.repoIsLocalUnknown er
|
||||
then checklocal er
|
||||
else return GloballyAvailable
|
||||
| Git.repoIsUrl r = return GloballyAvailable
|
||||
| Git.repoIsLocalUnknown r = return Unavailable
|
||||
| otherwise = checklocal r
|
||||
where
|
||||
checklocal r' = ifM (liftIO $ isJust <$> catchMaybeIO (Git.Config.read r'))
|
||||
( return LocallyAvailable
|
||||
, return Unavailable
|
||||
)
|
||||
|
||||
{- Avoids performing an action on a local repository that's not usable.
|
||||
- Does not check that the repository is still available on disk. -}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue