diff options
Diffstat (limited to 'Git/GCrypt.hs')
-rw-r--r-- | Git/GCrypt.hs | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/Git/GCrypt.hs b/Git/GCrypt.hs index 1260c2ced..c8c193c45 100644 --- a/Git/GCrypt.hs +++ b/Git/GCrypt.hs @@ -13,6 +13,7 @@ import Common import Git.Types import Git.Construct import qualified Git.Config as Config +import qualified Git.Command as Command import Utility.Gpg urlPrefix :: String @@ -44,12 +45,28 @@ encryptedRepo baserepo = go go _ = notencrypted notencrypted = error "not a gcrypt encrypted repository" +{- Checks if the git repo at a location is a gcrypt repo that + - we can decrypt. This works by trying to fetch from the repo + - at the location, into the baserepo. + - + - Returns false if the git repo is not using gcrypt, or if it is using + - gcrypt but cannot be decrypted. We do not try to detect gcrypt + - repos that cannot be decrypted, because gcrypt may change in the future + - to avoid easy fingerprinting of gcrypt repos. + -} +probeGCryptRepo :: FilePath -> Repo -> IO Bool +probeGCryptRepo dir baserepo = catchBoolIO $ Command.runBool + [ Param "fetch" + , Param $ urlPrefix ++ dir + ] baserepo + type RemoteName = String +type GCryptId = String {- gcrypt gives each encrypted repository a uique gcrypt-id, - which is stored in the repository (in encrypted form) - and cached in a per-remote gcrypt-id configuration setting. -} -remoteRepoId :: Repo -> Maybe RemoteName -> Maybe String +remoteRepoId :: Repo -> Maybe RemoteName -> Maybe GCryptId remoteRepoId = getRemoteConfig "gcrypt-id" getRemoteConfig :: String -> Repo -> Maybe RemoteName -> Maybe String |