annex.merge-annex-branches
Added annex.merge-annex-branches config setting which can be used to disable automatic merge of git-annex branches. I wonder if git-annex merge/sync/assistant should disable this setting? Not sure yet, so have not done so. May be that users will not set it in git config, but pass it via -c to commands that need it. Checking the config setting adds a very small overhead, but it's only checked once per command so should be insignificant. This commit was supported by the NSF-funded DataLad project.
This commit is contained in:
parent
addb91b24b
commit
09e73a3ab6
6 changed files with 59 additions and 6 deletions
|
@ -140,7 +140,13 @@ forceUpdate = updateTo =<< siblingBranches
|
||||||
- Returns True if any refs were merged in, False otherwise.
|
- Returns True if any refs were merged in, False otherwise.
|
||||||
-}
|
-}
|
||||||
updateTo :: [(Git.Sha, Git.Branch)] -> Annex Bool
|
updateTo :: [(Git.Sha, Git.Branch)] -> Annex Bool
|
||||||
updateTo pairs = do
|
updateTo pairs = ifM (annexMergeAnnexBranches <$> Annex.getGitConfig)
|
||||||
|
( updateTo' pairs
|
||||||
|
, return False
|
||||||
|
)
|
||||||
|
|
||||||
|
updateTo' :: [(Git.Sha, Git.Branch)] -> Annex Bool
|
||||||
|
updateTo' pairs = do
|
||||||
-- ensure branch exists, and get its current ref
|
-- ensure branch exists, and get its current ref
|
||||||
branchref <- getBranch
|
branchref <- getBranch
|
||||||
dirty <- journalDirty
|
dirty <- journalDirty
|
||||||
|
|
|
@ -26,6 +26,8 @@ git-annex (6.20180113) UNRELEASED; urgency=medium
|
||||||
log.
|
log.
|
||||||
* importfeed: Fix a failure when downloading with youtube-dl
|
* importfeed: Fix a failure when downloading with youtube-dl
|
||||||
and the destination subdirectory does not exist yet.
|
and the destination subdirectory does not exist yet.
|
||||||
|
* Added annex.merge-annex-branches config setting which
|
||||||
|
can be used to disable automatic merge of git-annex branches.
|
||||||
|
|
||||||
-- Joey Hess <id@joeyh.name> Wed, 24 Jan 2018 20:42:55 -0400
|
-- Joey Hess <id@joeyh.name> Wed, 24 Jan 2018 20:42:55 -0400
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ data GitConfig = GitConfig
|
||||||
, annexBloomAccuracy :: Maybe Int
|
, annexBloomAccuracy :: Maybe Int
|
||||||
, annexSshCaching :: Maybe Bool
|
, annexSshCaching :: Maybe Bool
|
||||||
, annexAlwaysCommit :: Bool
|
, annexAlwaysCommit :: Bool
|
||||||
|
, annexMergeAnnexBranches :: Bool
|
||||||
, annexDelayAdd :: Maybe Int
|
, annexDelayAdd :: Maybe Int
|
||||||
, annexHttpHeaders :: [String]
|
, annexHttpHeaders :: [String]
|
||||||
, annexHttpHeadersCommand :: Maybe String
|
, annexHttpHeadersCommand :: Maybe String
|
||||||
|
@ -116,6 +117,7 @@ extractGitConfig r = GitConfig
|
||||||
, annexBloomAccuracy = getmayberead (annex "bloomaccuracy")
|
, annexBloomAccuracy = getmayberead (annex "bloomaccuracy")
|
||||||
, annexSshCaching = getmaybebool (annex "sshcaching")
|
, annexSshCaching = getmaybebool (annex "sshcaching")
|
||||||
, annexAlwaysCommit = getbool (annex "alwayscommit") True
|
, annexAlwaysCommit = getbool (annex "alwayscommit") True
|
||||||
|
, annexMergeAnnexBranches = getbool (annex "merge-annex-branches") True
|
||||||
, annexDelayAdd = getmayberead (annex "delayadd")
|
, annexDelayAdd = getmayberead (annex "delayadd")
|
||||||
, annexHttpHeaders = getlist (annex "http-headers")
|
, annexHttpHeaders = getlist (annex "http-headers")
|
||||||
, annexHttpHeadersCommand = getmaybe (annex "http-headers-command")
|
, annexHttpHeadersCommand = getmaybe (annex "http-headers-command")
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 3"""
|
||||||
|
date="2018-02-22T17:27:06Z"
|
||||||
|
content="""
|
||||||
|
There are situations where a git command that appears to be read-only,
|
||||||
|
such as `git status` actually writes to the repository behind the scenes.
|
||||||
|
It looks like git ignores write errors in at least some such cases. So
|
||||||
|
there is precident for implicit read-only support, but I think not in cases
|
||||||
|
where it would involve significant behavior changes, like it would for the
|
||||||
|
git-annex branch auto-merging. In git's case the behavior change probably
|
||||||
|
only involves repeated `git status` runs being slower than otherwise,
|
||||||
|
or something like that.
|
||||||
|
|
||||||
|
As well as populating the .git/annex/index file with information merged in from
|
||||||
|
recently fetched git-annex branches, git-annex may need to write to other files
|
||||||
|
in order to prepare caches needed to perform what appears to be "read-only"
|
||||||
|
query operation, or to lock files in order to prevent someone who does have
|
||||||
|
write access from dropping them in a situation where that will lose data.
|
||||||
|
An example of the latter is running `git annex drop` in a repository you do have
|
||||||
|
write access to, and it needing to exclusively lock files in origin,
|
||||||
|
which requires write access to origin as well. Without write access,
|
||||||
|
the drop may fail.
|
||||||
|
|
||||||
|
The --read-only flag seems to be setting up a situation where git-annex handles
|
||||||
|
some things being read-only, but then someone expects the flag to
|
||||||
|
make some other thing work read-only, which git-annex can't manage to support
|
||||||
|
for whatever reason.
|
||||||
|
|
||||||
|
So I prefer a more specific name, like annex.merge-annex-branches=false.
|
||||||
|
|
||||||
|
Implemented that.
|
||||||
|
"""]]
|
|
@ -34,9 +34,9 @@ These settings can be overridden on a per-repository basis using
|
||||||
|
|
||||||
* `annex.resolvemerge`
|
* `annex.resolvemerge`
|
||||||
|
|
||||||
Set to false to prevent merge conflicts being automatically resolved
|
Set to false to prevent merge conflicts in the checked out branch
|
||||||
by the git-annex assitant, git-annex sync, git-annex merge,
|
being automatically resolved by the git-annex assitant,
|
||||||
and the git-annex post-receive hook.
|
git-annex sync, git-annex merge, and the git-annex post-receive hook.
|
||||||
|
|
||||||
* `annex.synccontent`
|
* `annex.synccontent`
|
||||||
|
|
||||||
|
|
|
@ -974,6 +974,15 @@ Here are all the supported configuration settings.
|
||||||
since it could garbage collect objects that are staged in git-annex's
|
since it could garbage collect objects that are staged in git-annex's
|
||||||
index but not yet committed.
|
index but not yet committed.
|
||||||
|
|
||||||
|
* `annex.merge-annex-branches`
|
||||||
|
|
||||||
|
By default, git-annex branches that have been pulled from remotes
|
||||||
|
are automatically merged into the local git-annex branch, so that
|
||||||
|
git-annex has the most up-to-date possible knowledge.
|
||||||
|
|
||||||
|
To avoid that merging, set this to "false". This can be useful
|
||||||
|
particularly when you don't have write permission to the repository.
|
||||||
|
|
||||||
* `annex.hardlink`
|
* `annex.hardlink`
|
||||||
|
|
||||||
Set this to `true` to make file contents be hard linked between the
|
Set this to `true` to make file contents be hard linked between the
|
||||||
|
@ -1054,8 +1063,9 @@ Here are all the supported configuration settings.
|
||||||
|
|
||||||
* `annex.resolvemerge`
|
* `annex.resolvemerge`
|
||||||
|
|
||||||
Set to false to prevent merge conflicts being automatically resolved
|
Set to false to prevent merge conflicts in the checked out branch
|
||||||
by the git-annex assitant, git-annex sync, git-annex merge,
|
being automatically resolved by the git-annex assitant,
|
||||||
|
git-annex sync, git-annex merge,
|
||||||
and the git-annex post-receive hook.
|
and the git-annex post-receive hook.
|
||||||
|
|
||||||
To configure the behavior in all clones of the repository,
|
To configure the behavior in all clones of the repository,
|
||||||
|
|
Loading…
Add table
Reference in a new issue