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.
This commit is contained in:
parent
ed56dba868
commit
b77903af48
6 changed files with 53 additions and 18 deletions
|
@ -7,8 +7,11 @@ git-annex (6.20170102) UNRELEASED; urgency=medium
|
|||
taken for --json.
|
||||
* vicfg: Include the numcopies configuation.
|
||||
* config: New command for storing configuration in the git-annex branch.
|
||||
* annex.autocommit can be configured via git-annex config, to control
|
||||
the default behavior in all clones of a repository.
|
||||
* 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.
|
||||
* stack.yaml: Update to lts-7.18.
|
||||
* Some optimisations to string splitting code.
|
||||
* unused: When large files are checked right into git, avoid buffering
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -38,6 +38,7 @@ data Configurable a
|
|||
| DefaultConfig a
|
||||
-- ^ A default value is known, but not all config sources
|
||||
-- have been read yet.
|
||||
deriving (Show)
|
||||
|
||||
{- Main git-annex settings. Each setting corresponds to a git-config key
|
||||
- such as annex.foo -}
|
||||
|
@ -57,6 +58,7 @@ data GitConfig = GitConfig
|
|||
, annexHttpHeaders :: [String]
|
||||
, annexHttpHeadersCommand :: Maybe String
|
||||
, annexAutoCommit :: Configurable Bool
|
||||
, annexSyncContent :: Configurable Bool
|
||||
, annexDebug :: Bool
|
||||
, annexWebOptions :: [String]
|
||||
, annexQuviOptions :: [String]
|
||||
|
@ -105,6 +107,8 @@ extractGitConfig r = GitConfig
|
|||
, annexHttpHeadersCommand = getmaybe (annex "http-headers-command")
|
||||
, annexAutoCommit = configurable True $
|
||||
getmaybebool (annex "autocommit")
|
||||
, annexSyncContent = configurable False $
|
||||
getmaybebool (annex "synccontent")
|
||||
, annexDebug = getbool (annex "debug") False
|
||||
, annexWebOptions = getwords (annex "web-options")
|
||||
, annexQuviOptions = getwords (annex "quvi-options")
|
||||
|
@ -156,6 +160,7 @@ extractGitConfig r = GitConfig
|
|||
mergeGitConfig :: GitConfig -> GitConfig -> GitConfig
|
||||
mergeGitConfig gitconfig repoglobals = gitconfig
|
||||
{ annexAutoCommit = merge annexAutoCommit
|
||||
, annexSyncContent = merge annexSyncContent
|
||||
}
|
||||
where
|
||||
merge f = case f gitconfig of
|
||||
|
|
|
@ -32,6 +32,10 @@ These settings can be overridden on a per-repository basis using
|
|||
Set to false to prevent the git-annex assistant and git-annex sync
|
||||
from automatically committing changes to files in the repository.
|
||||
|
||||
* `annex.synccontent`
|
||||
|
||||
Set to true to make git-annex sync default to syncing content.
|
||||
|
||||
# EXAMPLE
|
||||
|
||||
Suppose you want to prevent git annex sync from committing changes
|
||||
|
@ -40,7 +44,12 @@ repository. Then run:
|
|||
|
||||
git annex config --set annex.autocommit false
|
||||
|
||||
If you change your mind, you can get back to the default behavior:
|
||||
If you want to override that in a partiticular clone, just use git config
|
||||
in the clone:
|
||||
|
||||
git config annex.autocommit true
|
||||
|
||||
And to get back to the default behavior:
|
||||
|
||||
git annex config --unset annex.autocommit
|
||||
|
||||
|
|
|
@ -62,7 +62,10 @@ by running "git annex sync" on the remote.
|
|||
|
||||
Normally, syncing does not transfer the contents of annexed files.
|
||||
The --content option causes the content of files in the work tree
|
||||
to also be uploaded and downloaded as necessary.
|
||||
to also be uploaded and downloaded as necessary.
|
||||
|
||||
The annex.synccontent configuration can be set to true to make content
|
||||
be synced by default.
|
||||
|
||||
Normally this tries to get each annexed file in the work tree
|
||||
that the local repository does not yet have, and then copies each
|
||||
|
|
|
@ -1009,6 +1009,13 @@ Here are all the supported configuration settings.
|
|||
To configure the behavior in all clones of the repository,
|
||||
this can be set in [[git-annex-config]].
|
||||
|
||||
* `annex.synccontent`
|
||||
|
||||
Set to true to make git-annex sync default to syncing content.
|
||||
|
||||
To configure the behavior in all clones of the repository,
|
||||
this can be set in [[git-annex-config]].
|
||||
|
||||
* `annex.startupscan`
|
||||
|
||||
Set to false to prevent the git-annex assistant from scanning the
|
||||
|
|
Loading…
Reference in a new issue