summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-04-07 14:10:21 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-04-07 14:10:34 -0400
commite1e52ab130e4a67d001e0577010f8cd142860914 (patch)
tree7f5346afa63d27de9b0c2013624a3e788402eb8f
parent536e5d9cc713d766690330668f6fb9b363d56d61 (diff)
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.
-rw-r--r--CHANGELOG6
-rw-r--r--Remote/GCrypt.hs18
-rw-r--r--doc/bugs/git_annex_enableremote_ignoring_encryption_changes.mdwn2
-rw-r--r--doc/bugs/git_annex_enableremote_ignoring_encryption_changes/comment_2_5b36cd7f8ec4dd4f8787b60959512157._comment26
4 files changed, 44 insertions, 8 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 3d9ed22a2..c53b01c52 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -14,9 +14,11 @@ git-annex (6.20170322) UNRELEASED; urgency=medium
the parameters that git passes.
* enableremote: When enabling a non-special remote, param=value
parameters can't be used, so error out if any are provided.
- * enableremote: Fix re-enabling of existing gcrypt remotes, so
- that eg, encryption key changes take effect. They were silently
+ * enableremote: Fix re-enabling of special remotes that have a git
+ url, so that eg, encryption key changes take effect. They were silently
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
diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs
index ea101a770..f1b48cdd2 100644
--- a/Remote/GCrypt.hs
+++ b/Remote/GCrypt.hs
@@ -31,7 +31,6 @@ import qualified Git.Command
import qualified Git.Config
import qualified Git.GCrypt
import qualified Git.Construct
-import qualified Git.Types as Git ()
import qualified Annex.Branch
import Config
import Config.Cost
@@ -176,11 +175,18 @@ gCryptSetup _ mu _ c gc = go $ M.lookup "gitrepo" c
go Nothing = giveup "Specify gitrepo="
go (Just gitrepo) = do
(c', _encsetup) <- encryptionSetup c gc
- inRepo $ Git.Command.run
- [ Param "remote", Param "add"
- , Param remotename
- , Param $ Git.GCrypt.urlPrefix ++ gitrepo
- ]
+
+ let url = Git.GCrypt.urlPrefix ++ gitrepo
+ rs <- fromRepo Git.remotes
+ 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
diff --git a/doc/bugs/git_annex_enableremote_ignoring_encryption_changes.mdwn b/doc/bugs/git_annex_enableremote_ignoring_encryption_changes.mdwn
index e73b2ce8f..92a454c18 100644
--- a/doc/bugs/git_annex_enableremote_ignoring_encryption_changes.mdwn
+++ b/doc/bugs/git_annex_enableremote_ignoring_encryption_changes.mdwn
@@ -116,3 +116,5 @@ Yes, definitively. I enjoy using annex to backup and manage my data. I would lov
Thanks
Jörn
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_enableremote_ignoring_encryption_changes/comment_2_5b36cd7f8ec4dd4f8787b60959512157._comment b/doc/bugs/git_annex_enableremote_ignoring_encryption_changes/comment_2_5b36cd7f8ec4dd4f8787b60959512157._comment
new file mode 100644
index 000000000..22a6cdf60
--- /dev/null
+++ b/doc/bugs/git_annex_enableremote_ignoring_encryption_changes/comment_2_5b36cd7f8ec4dd4f8787b60959512157._comment
@@ -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!
+"""]]