diff options
author | Joey Hess <joeyh@joeyh.name> | 2017-02-03 14:31:17 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2017-02-03 14:31:17 -0400 |
commit | c438a610208b1914932980a26c0ab90fb544cd34 (patch) | |
tree | 1c204beae009ae2b5351f0eb4e865abef09545ba /Command/Sync.hs | |
parent | 4cded2bc85d530dd335738cb870daf3a2d4e4a2f (diff) |
New annex.synccontent config setting
.. which can be set to true to make git annex sync default to --content.
This may become the default at some point in the future.
As well as being configuable by git config, it can be configured by
git-annex config to control the default behavior in all clones of a
repository.
Had to add a separate --no-content switch to we can tell if it's been
explicitly set, and should override annex.synccontent. If --content was the
default, this complication would not be necessary.
This commit was sponsored by Jake Vosloo on Patreon.
Diffstat (limited to 'Command/Sync.hs')
-rw-r--r-- | Command/Sync.hs | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/Command/Sync.hs b/Command/Sync.hs index e69790799..581cad562 100644 --- a/Command/Sync.hs +++ b/Command/Sync.hs @@ -70,6 +70,7 @@ data SyncOptions = SyncOptions , pullOption :: Bool , pushOption :: Bool , contentOption :: Bool + , noContentOption :: Bool , keyOptions :: Maybe KeyOptions } @@ -92,8 +93,13 @@ optParser desc = SyncOptions <*> invertableSwitch "push" True ( help "avoid git pushes to remotes" ) - <*> invertableSwitch "content" False - ( help "also transfer file contents" + <*> switch + ( long "content" + <> help "transfer file contents" + ) + <*> switch + ( long "no-content" + <> help "do not transfer file contents" ) <*> optional parseAllOption @@ -118,22 +124,24 @@ seek o = allowConcurrentOutput $ do , map (withbranch . pullRemote o mergeConfig) gitremotes , [ mergeAnnex ] ] - when (contentOption o) $ - whenM (seekSyncContent o dataremotes) $ - -- Transferring content can take a while, - -- and other changes can be pushed to the git-annex - -- branch on the remotes in the meantime, so pull - -- and merge again to avoid our push overwriting - -- those changes. - mapM_ includeCommandAction $ concat - [ map (withbranch . pullRemote o mergeConfig) gitremotes - , [ commitAnnex, mergeAnnex ] - ] + whenM (shouldsynccontent <&&> seekSyncContent o dataremotes) $ + -- Transferring content can take a while, + -- and other changes can be pushed to the git-annex + -- branch on the remotes in the meantime, so pull + -- and merge again to avoid our push overwriting + -- those changes. + mapM_ includeCommandAction $ concat + [ map (withbranch . pullRemote o mergeConfig) gitremotes + , [ commitAnnex, mergeAnnex ] + ] void $ includeCommandAction $ withbranch pushLocal -- Pushes to remotes can run concurrently. mapM_ (commandAction . withbranch . pushRemote o) gitremotes - + where + shouldsynccontent = pure (contentOption o) + <||> (pure (not (noContentOption o)) <&&> getGitConfigVal annexSyncContent) + type CurrBranch = (Maybe Git.Branch, Maybe Adjustment) {- There may not be a branch checked out until after the commit, |