avoid crashing when there are remotes using unparseable urls
Including the non-standard URI form that git-remote-gcrypt uses for rsync. Eg, "ook://foo:bar" cannot be parsed because "bar" is not a valid port number. But git could have a remote with that, it would try to run git-remote-ook to handle it. So, git-annex has to allow for such things, rather than crashing. This commit was sponsored by Luke Shumaker on Patreon.
This commit is contained in:
parent
aafb7f6eb9
commit
2aa4fab62a
8 changed files with 48 additions and 24 deletions
|
@ -28,6 +28,7 @@ urlPrefix = urlScheme ++ ":"
|
|||
|
||||
isEncrypted :: Repo -> Bool
|
||||
isEncrypted Repo { location = Url url } = urlPrefix `isPrefixOf` show url
|
||||
isEncrypted Repo { location = UnparseableUrl url } = urlPrefix `isPrefixOf` url
|
||||
isEncrypted _ = False
|
||||
|
||||
{- The first Repo is the git repository that has the second Repo
|
||||
|
@ -36,22 +37,24 @@ isEncrypted _ = False
|
|||
- When the remote Repo uses gcrypt, returns the actual underlying
|
||||
- git repository that gcrypt is using to store its data.
|
||||
-
|
||||
- Throws an exception if an url is invalid or the repo does not use
|
||||
- gcrypt.
|
||||
- Throws an exception if the repo does not use gcrypt.
|
||||
-}
|
||||
encryptedRemote :: Repo -> Repo -> IO Repo
|
||||
encryptedRemote baserepo = go
|
||||
where
|
||||
go Repo { location = Url url }
|
||||
go Repo { location = Url url } = go' (show url)
|
||||
go Repo { location = UnparseableUrl url } = go' url
|
||||
go _ = notencrypted
|
||||
|
||||
go' u
|
||||
| urlPrefix `isPrefixOf` u =
|
||||
fromRemoteLocation (drop plen u) baserepo
|
||||
| otherwise = notencrypted
|
||||
where
|
||||
u = show url
|
||||
plen = length urlPrefix
|
||||
go _ = notencrypted
|
||||
|
||||
notencrypted = giveup "not a gcrypt encrypted repository"
|
||||
|
||||
plen = length urlPrefix
|
||||
|
||||
data ProbeResult = Decryptable | NotDecryptable | NotEncrypted
|
||||
|
||||
{- Checks if the git repo at a location uses gcrypt.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue