summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Utility/Gpg.hs29
-rw-r--r--debian/changelog1
-rw-r--r--doc/todo/windows_support.mdwn1
3 files changed, 20 insertions, 11 deletions
diff --git a/Utility/Gpg.hs b/Utility/Gpg.hs
index d9969ed2f..b06ea2fd1 100644
--- a/Utility/Gpg.hs
+++ b/Utility/Gpg.hs
@@ -18,6 +18,9 @@ import System.Path
import Common
import Utility.Env
import qualified Build.SysConfig as SysConfig
+#ifdef mingw32_HOST_OS
+import Utility.Tmp
+#endif
newtype KeyIds = KeyIds [String]
deriving (Ord, Eq)
@@ -77,8 +80,8 @@ pipeStrict params input = do
- Note that to avoid deadlock with the cleanup stage,
- the reader must fully consume gpg's input before returning. -}
feedRead :: [CommandParam] -> String -> (Handle -> IO ()) -> (Handle -> IO a) -> IO a
-#ifndef mingw32_HOST_OS
feedRead params passphrase feeder reader = do
+#ifndef mingw32_HOST_OS
-- pipe the passphrase into gpg on a fd
(frompipe, topipe) <- createPipe
void $ forkIO $ do
@@ -89,17 +92,23 @@ feedRead params passphrase feeder reader = do
let passphrasefd = [Param "--passphrase-fd", Param $ show pfd]
params' <- stdParams $ [Param "--batch"] ++ passphrasefd ++ params
- closeFd frompipe `after`
- withBothHandles createProcessSuccess (proc gpgcmd params') go
- where
- go (to, from) = do
- void $ forkIO $ do
- feeder to
- hClose to
- reader from
+ closeFd frompipe `after` go params'
#else
-feedRead = error "gpg feedRead not implemented on Windows" -- TODO
+ -- store the passphrase in a temp file for gpg
+ withTmpFile "gpg" $ \tmpfile h -> do
+ hPutStr h passphrase
+ hClose h
+ let passphrasefile = [Param "--passphrase-file", File tmpfile]
+ params' <- stdParams $ [Param "--batch"] ++ passphrasefile ++ params
+ go params'
#endif
+ where
+ go params' = withBothHandles createProcessSuccess (proc gpgcmd params')
+ $ \(to, from) -> do
+ void $ forkIO $ do
+ feeder to
+ hClose to
+ reader from
{- Finds gpg public keys matching some string. (Could be an email address,
- a key id, or a name; See the section 'HOW TO SPECIFY A USER ID' of
diff --git a/debian/changelog b/debian/changelog
index 8caac29ae..e51636ec0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -6,6 +6,7 @@ git-annex (4.20130803) UNRELEASED; urgency=low
* importfeed: Ignores transient problems with feeds. Only exits nonzero
when a feed has repeatedly had a problems for at least 1 day.
* importfeed: Fix handling of dots in extensions.
+ * Windows: Added support for encrypted special remotes.
-- Joey Hess <joeyh@debian.org> Fri, 02 Aug 2013 19:26:20 -0400
diff --git a/doc/todo/windows_support.mdwn b/doc/todo/windows_support.mdwn
index cfde2fb92..8864424f9 100644
--- a/doc/todo/windows_support.mdwn
+++ b/doc/todo/windows_support.mdwn
@@ -3,7 +3,6 @@ now! --[[Joey]]
## status
-* Does not support encryption with gpg.
* Does not work with Cygwin's build of git (that git does not consistently
support use of DOS style paths, which git-annex uses on Windows).
Must use the upstream build of git for Windows.