summaryrefslogtreecommitdiff
path: root/Command
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-02-03 14:31:17 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-02-03 14:31:17 -0400
commitc438a610208b1914932980a26c0ab90fb544cd34 (patch)
tree1c204beae009ae2b5351f0eb4e865abef09545ba /Command
parent4cded2bc85d530dd335738cb870daf3a2d4e4a2f (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')
-rw-r--r--Command/Sync.hs36
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,