summaryrefslogtreecommitdiff
path: root/Git/GCrypt.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Git/GCrypt.hs')
-rw-r--r--Git/GCrypt.hs19
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