From eb259a74840fc7e4769a3ba3384b635b3b4ef5be Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 7 Sep 2013 18:38:00 -0400 Subject: partially complete gcrypt remote (local send done; rest not) This is a git-remote-gcrypt encrypted special remote. Only sending files in to the remote works, and only for local repositories. Most of the work so far has involved making initremote work. A particular problem is that remote setup in this case needs to generate its own uuid, derivied from the gcrypt-id. That required some larger changes in the code to support. For ssh remotes, this will probably just reuse Remote.Rsync's code, so should be easy enough. And for downloading from a web remote, I will need to factor out the part of Remote.Git that does that. One particular thing that will need work is supporting hot-swapping a local gcrypt remote. I think it needs to store the gcrypt-id in the git config of the local remote, so that it can check it every time, and compare with the cached annex-uuid for the remote. If there is a mismatch, it can change both the cached annex-uuid and the gcrypt-id. That should work, and I laid some groundwork for it by already reading the remote's config when it's local. (Also needed for other reasons.) This commit was sponsored by Daniel Callahan. --- Assistant/MakeRemote.hs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'Assistant') diff --git a/Assistant/MakeRemote.hs b/Assistant/MakeRemote.hs index e26d6057a..fa662babd 100644 --- a/Assistant/MakeRemote.hs +++ b/Assistant/MakeRemote.hs @@ -68,8 +68,8 @@ makeRsyncRemote name location = makeRemote name location $ const $ void $ go =<< Command.InitRemote.findExisting name where go Nothing = setupSpecialRemote name Rsync.remote config - =<< Command.InitRemote.generateNew name - go (Just v) = setupSpecialRemote name Rsync.remote config v + (Nothing, Command.InitRemote.newConfig name) + go (Just (u, c)) = setupSpecialRemote name Rsync.remote config (Just u, c) config = M.fromList [ ("encryption", "shared") , ("rsyncurl", location) @@ -89,7 +89,7 @@ initSpecialRemote name remotetype config = go 0 r <- Command.InitRemote.findExisting fullname case r of Nothing -> setupSpecialRemote fullname remotetype config - =<< Command.InitRemote.generateNew fullname + (Nothing, Command.InitRemote.newConfig fullname) Just _ -> go (n + 1) {- Enables an existing special remote. -} @@ -98,15 +98,15 @@ enableSpecialRemote name remotetype config = do r <- Command.InitRemote.findExisting name case r of Nothing -> error $ "Cannot find a special remote named " ++ name - Just v -> setupSpecialRemote name remotetype config v + Just (u, c) -> setupSpecialRemote name remotetype config (Just u, c) -setupSpecialRemote :: RemoteName -> RemoteType -> R.RemoteConfig -> (UUID, R.RemoteConfig) -> Annex RemoteName -setupSpecialRemote name remotetype config (u, c) = do +setupSpecialRemote :: RemoteName -> RemoteType -> R.RemoteConfig -> (Maybe UUID, R.RemoteConfig) -> Annex RemoteName +setupSpecialRemote name remotetype config (mu, c) = do {- Currently, only 'weak' ciphers can be generated from the - assistant, because otherwise GnuPG may block once the entropy - pool is drained, and as of now there's no way to tell the user - to perform IO actions to refill the pool. -} - c' <- R.setup remotetype u $ + (c', u) <- R.setup remotetype mu $ M.insert "highRandomQuality" "false" $ M.union config c describeUUID u name configSet u c' -- cgit v1.2.3