diff --git a/CHANGELOG b/CHANGELOG index 1acce80c4f..d61836f7c7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,8 @@ git-annex (10.20250926) UNRELEASED; urgency=medium * Remove the Servant build flag; always build with support for annex+http urls and git-annex p2phttp. + * enableremote: Allow type= to be provided when it does not change the + type of the special remote. -- Joey Hess Thu, 25 Sep 2025 13:36:21 -0400 diff --git a/Command/EnableRemote.hs b/Command/EnableRemote.hs index 875231d458..f5fc2c6733 100644 --- a/Command/EnableRemote.hs +++ b/Command/EnableRemote.hs @@ -59,11 +59,9 @@ start _ [] = unknownNameError "Specify the remote to enable." start o (name:rest) = go =<< filter matchingname <$> Annex.getGitRemotes where matchingname r = Git.remoteName r == Just name - go [] = deadLast name $ - let config = Logs.Remote.keyValToConfig Proposed rest - in case M.lookup SpecialRemote.typeField config of - Nothing -> startSpecialRemote o name config - Just _ -> giveup "Cannot change type= of existing special remote. Instead, use: git-annex initremote --sameas" + go [] = deadLast name $ + startSpecialRemote o name $ + Logs.Remote.keyValToConfig Proposed rest go (r:_) | not (null rest) = go [] | otherwise = do @@ -105,6 +103,10 @@ startSpecialRemote' cname perform name config ((u, c, mcu):[]) = starting cname ai si $ do let fullconfig = config `M.union` c t <- either giveup return (SpecialRemote.findType fullconfig) + case SpecialRemote.findType c of + Right t' | t' /= t -> + giveup "Cannot change type= of existing special remote. Instead, use: git-annex initremote --sameas" + _ -> noop gc <- maybe (liftIO dummyRemoteGitConfig) (return . Remote.gitconfig) =<< Remote.byUUID u diff --git a/Test.hs b/Test.hs index 4d8bebaa8d..90e9afd29d 100644 --- a/Test.hs +++ b/Test.hs @@ -1918,19 +1918,19 @@ test_gpg_crypto = do where testscheme scheme = intmpclonerepo $ test_with_gpg $ \gpgcmd environ -> do createDirectory (literalOsPath "dir") - let ps = + let initps = [ "foo" + , "type=directory" , "encryption=" ++ scheme , "directory=dir" , "highRandomQuality=false" ] ++ if scheme `elem` ["hybrid","pubkey"] then ["keyid=" ++ Utility.Gpg.testKeyId] else [] - let initps = ps ++ [ "type=directory" ] git_annex' "initremote" initps (Just environ) "initremote" git_annex_shouldfail' "initremote" initps (Just environ) "initremote should not work when run twice in a row" - git_annex' "enableremote" ps (Just environ) "enableremote" - git_annex' "enableremote" ps (Just environ) "enableremote when run twice in a row" + git_annex' "enableremote" initps (Just environ) "enableremote" + git_annex' "enableremote" initps (Just environ) "enableremote when run twice in a row" git_annex' "get" [annexedfile] (Just environ) "get of file" annexed_present annexedfile git_annex' "copy" [annexedfile, "--to", "foo"] (Just environ) "copy --to encrypted remote"