From f93a7fce1d5272c3282ce234053d26b10dd44198 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 17 May 2023 13:23:42 -0400 Subject: [PATCH] sync: Started transition to --content being enabled by default When used without --content or --no-content, warn about the upcoming transition, and suggest using one of the options, or setting annex.synccontent. Sponsored-by: Brett Eisenberg on Patreon --- CHANGELOG | 6 +++++- Command/Sync.hs | 42 +++++++++++++++++++++++++++++---------- doc/git-annex-sync.mdwn | 2 +- doc/todo/v11_changes.mdwn | 7 +++++++ 4 files changed, 44 insertions(+), 13 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ec5bfa697e..e43cdbccb8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -57,8 +57,12 @@ git-annex (10.20230408) UNRELEASED; urgency=medium --content. With --no-pull, avoid downloading content, and with --no-push avoid uploading content. This was done before, but inconsistently. - * sync: Added -g as a short option for --no-content. * uninit: Avoid buffering the names of all annexed files in memory. + * sync: Started a transition to --content being enabled by default. + When used without --content or --no-content, warn about the upcoming + transition, and suggest using one of the options, or setting + annex.synccontent. + * sync: Added -g as a short option for --no-content. -- Joey Hess Sat, 08 Apr 2023 13:57:18 -0400 diff --git a/Command/Sync.hs b/Command/Sync.hs index 59525befe8..5918c6d5df 100644 --- a/Command/Sync.hs +++ b/Command/Sync.hs @@ -106,8 +106,8 @@ data SyncOptions = SyncOptions , messageOption :: Maybe String , pullOption :: Bool , pushOption :: Bool - , contentOption :: Bool - , noContentOption :: Bool + , contentOption :: Maybe Bool + , noContentOption :: Maybe Bool , contentOfOption :: [FilePath] , cleanupOption :: Bool , keyOptions :: Maybe KeyOptions @@ -126,8 +126,8 @@ instance Default SyncOptions where , messageOption = Nothing , pullOption = False , pushOption = False - , contentOption = False - , noContentOption = False + , contentOption = Just False + , noContentOption = Just False , contentOfOption = [] , cleanupOption = False , keyOptions = Nothing @@ -175,15 +175,15 @@ optParser mode desc = SyncOptions ) PullMode -> pure False PushMode -> pure True - <*> switch + <*> optional (flag' True ( long "content" <> help "transfer annexed file contents" - ) - <*> switch + )) + <*> optional (flag' True ( long "no-content" <> short 'g' <> help "do not transfer annexed file contents" - ) + )) <*> many (strOption ( long "content-of" <> short 'C' @@ -236,9 +236,11 @@ instance DeferredParseClass SyncOptions where seek :: SyncOptions -> CommandSeek seek o = do + warnSyncContentTransition o + prepMerge startConcurrency transferStages (seek' o) - + seek' :: SyncOptions -> CommandSeek seek' o = do let withbranch a = a =<< getCurrentBranch @@ -1038,11 +1040,11 @@ cleanupRemote remote (Just b, _) = shouldSyncContent :: SyncOptions -> Annex Bool shouldSyncContent o - | noContentOption o = pure False + | fromMaybe False (noContentOption o) = pure False -- For git-annex pull and git-annex push, -- annex.syncontent defaults to True unless set | operationMode o /= SyncMode = annexsynccontent True - | contentOption o || not (null (contentOfOption o)) = pure True + | fromMaybe False (contentOption o) || not (null (contentOfOption o)) = pure True -- For git-annex sync, -- annex.syncontent defaults to False unless set | otherwise = annexsynccontent False <||> onlyAnnex o @@ -1053,6 +1055,24 @@ shouldSyncContent o HasGitConfig (Just c) -> return c _ -> return d +-- Transition started May 2023, should wait until that has been in a Debian +-- stable release before completing the transition. +warnSyncContentTransition :: SyncOptions -> Annex () +warnSyncContentTransition o + | operationMode o /= SyncMode = noop + | isJust (noContentOption o) || isJust (contentOption o) = noop + | not (null (contentOfOption o)) = noop + | otherwise = getGitConfigVal' annexSyncContent >>= \case + HasGlobalConfig (Just _) -> noop + HasGitConfig (Just _) -> noop + _ -> showwarning + where + showwarning = earlyWarning $ + "git-annex sync will change default behavior to operate on" + <> " --content in a future version of git-annex. Recommend" + <> " you explicitly use --no-content (or -g) to prepare for" + <> " that change. (Or you can configure annex.synccontent)" + notOnlyAnnex :: SyncOptions -> Annex Bool notOnlyAnnex o = not <$> onlyAnnex o diff --git a/doc/git-annex-sync.mdwn b/doc/git-annex-sync.mdwn index e2023d8873..8e0db80410 100644 --- a/doc/git-annex-sync.mdwn +++ b/doc/git-annex-sync.mdwn @@ -15,7 +15,7 @@ previously been added to the repository. Then it does the equivilant of [[git-annex-pull]](1) followed by [[git-annex-push]](1). However, unlike those commands, this command does not transfer annexed -content by default. This may change in a future version of git-annex. +content by default. That will change in a future version of git-annex, # OPTIONS diff --git a/doc/todo/v11_changes.mdwn b/doc/todo/v11_changes.mdwn index 2e40f0ca9b..b9f9cd1c0b 100644 --- a/doc/todo/v11_changes.mdwn +++ b/doc/todo/v11_changes.mdwn @@ -10,3 +10,10 @@ version. after upgrading to the repo version that enables this. Depending on the timing of v11, this may need to be put in a v12 upgrade that is delayed some amount of time (eg 1 year) after v11. + +* Finish the transition of git-annex sync defaulting to --content. + A warning was added in May 2023 when it's run in a way that will change + behavior. It would be good to wait until all git-annex users have + gotten the version with the warning, and used it for a while, + before finishing the transition. This does not need to be tied to a + repository version change really, but it would be reasonable to do so.