diff options
author | Joey Hess <joey@kitenet.net> | 2013-08-04 12:10:00 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-08-04 13:03:34 -0400 |
commit | 944730682471f4e808f4f1faa9797a965ebadb8f (patch) | |
tree | fea08098ca33d2f3eadcb35efe3fe5b4407fa735 | |
parent | e63d8ef269fa8c89af5785fe4201fc43a82bcb7b (diff) |
Windows: Added support for encrypted special remotes.
-rw-r--r-- | Utility/Gpg.hs | 29 | ||||
-rw-r--r-- | debian/changelog | 1 | ||||
-rw-r--r-- | doc/todo/windows_support.mdwn | 1 |
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. |