gcrypt: Support re-enabling to change eg, encryption parameters.

This was never supported before. And it doesn't re-encrypt the
gcrypt repo to the new gcrypt-participants, but it does at least now not
crash, and set gcrypt-participants.

This commit was sponsored by andrea rota.
This commit is contained in:
Joey Hess 2017-04-07 14:10:21 -04:00
parent 99984967eb
commit 57e923b712
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 44 additions and 8 deletions

View file

@ -14,9 +14,11 @@ git-annex (6.20170322) UNRELEASED; urgency=medium
the parameters that git passes. the parameters that git passes.
* enableremote: When enabling a non-special remote, param=value * enableremote: When enabling a non-special remote, param=value
parameters can't be used, so error out if any are provided. parameters can't be used, so error out if any are provided.
* enableremote: Fix re-enabling of existing gcrypt remotes, so * enableremote: Fix re-enabling of special remotes that have a git
that eg, encryption key changes take effect. They were silently url, so that eg, encryption key changes take effect. They were silently
ignored, a reversion introduced in 6.20160527. ignored, a reversion introduced in 6.20160527.
* gcrypt: Support re-enabling to change eg, encryption parameters.
This was never supported before.
-- Joey Hess <id@joeyh.name> Wed, 29 Mar 2017 12:41:46 -0400 -- Joey Hess <id@joeyh.name> Wed, 29 Mar 2017 12:41:46 -0400

View file

@ -31,7 +31,6 @@ import qualified Git.Command
import qualified Git.Config import qualified Git.Config
import qualified Git.GCrypt import qualified Git.GCrypt
import qualified Git.Construct import qualified Git.Construct
import qualified Git.Types as Git ()
import qualified Annex.Branch import qualified Annex.Branch
import Config import Config
import Config.Cost import Config.Cost
@ -176,11 +175,18 @@ gCryptSetup _ mu _ c gc = go $ M.lookup "gitrepo" c
go Nothing = giveup "Specify gitrepo=" go Nothing = giveup "Specify gitrepo="
go (Just gitrepo) = do go (Just gitrepo) = do
(c', _encsetup) <- encryptionSetup c gc (c', _encsetup) <- encryptionSetup c gc
inRepo $ Git.Command.run
[ Param "remote", Param "add" let url = Git.GCrypt.urlPrefix ++ gitrepo
, Param remotename rs <- fromRepo Git.remotes
, Param $ Git.GCrypt.urlPrefix ++ gitrepo case filter (\r -> Git.remoteName r == Just remotename) rs of
] [] -> inRepo $ Git.Command.run
[ Param "remote", Param "add"
, Param remotename
, Param url
]
(r:_)
| Git.repoLocation r == url -> noop
| otherwise -> error "Another remote with the same name already exists."
setGcryptEncryption c' remotename setGcryptEncryption c' remotename

View file

@ -116,3 +116,5 @@ Yes, definitively. I enjoy using annex to backup and manage my data. I would lov
Thanks Thanks
Jörn Jörn
> [[fixed|done]] --[[Joey]]

View file

@ -0,0 +1,26 @@
[[!comment format=mdwn
username="joey"
subject="""comment 2"""
date="2017-04-07T16:58:42Z"
content="""
Huh, so it seems that for gcrypt remotes, enableremote just doesn't
call their setup function at all!
Ah, it's because it sees the remote has an url, so it is not treated
as a special remote, but as a regular git remote, and so the
special remote encryption changes are ignored. (Since 6.20160527)
So, enableremote needs to fail when it thinks it's enabling a regular git
remote and has been passed some parameters which cannot apply to such a
remote. Done.
And, enableremote needs fixed to treat existing gcrypt remotes as special
remotes. Done.
Also, gcrypt special remotes didn't actually support being re-enabled
either. I made that work. When an encryption key is added, that
automatically makes it change the gcrypt-participants, too.
I suppose enableremote could even be made to do the `GCRYPT_FULL_REPACK`
and forced push, but that seems like too much for it to do!
"""]]