- reading the journal file, and so can be faster when many lines are being
- written to it. The information that is recorded will be effectively the
- same, only obsolate log lines will not get compacted.
+ -
+ - Currently, only appends when annex.alwayscompact=false. That is to
+ - avoid appending when an older version of git-annex is also in use in the
+ - same repository. An interrupted append could leave the journal file in a
+ - state that would confuse the older version. This is planned to be
+ - changed in a future repository version.
-}
changeOrAppend :: Journalable content => RegardingUUID -> RawFilePath -> (L.ByteString -> ChangeOrAppend content) -> Annex ()
changeOrAppend ru file f = lockJournal $ \jl ->
oldc <- getToChange ru file
case f oldc of
Change newc -> set jl ru file newc
- Append toappend -> append jl file appendable toappend
+ Append toappend ->
+ set jl ru file $
+ oldc <> journalableByteString toappend
+ -- Use this instead in v11
+ -- or whatever.
+ -- append jl file appendable toappend
, case f mempty of
-- Append even though a change was
-- requested; since mempty was passed in,
-git-annex (10.20220625) UNRELEASED; urgency=medium
+git-annex (10.20220724) UNRELEASED; urgency=medium
* Improve handling of parallelization with -J when copying content
from/to a git remote that is a local path.
* Fix a reversion that prevented --batch commands (and the assistant)
from noticing data written to the journal by other commands.
* Added annex.alwayscompact setting which can be unset to speed up
- writes to the git-annex branch in some cases.
+ writes to the git-annex branch in some cases. See its documentation
+ for important notes on when it's appropariate to use.
-- Joey Hess <id@joeyh.name> Tue, 28 Jun 2022 14:49:17 -0400
`-c annex.alwayscompact=false` is `git-annex registerurl --batch`,
when adding a large number of urls to the same key.
+ This option was first supported by git-annex version 10.20220724.
+ It is not entirely safe to set this option in a repository that may also
+ be used by an older version of git-annex at the same time as a version
+ that supports this option.
+
* `annex.allowsign`
By default git-annex avoids gpg signing commits that it makes when
--- /dev/null
+This is a todo for collecting changes that could lead to a v11 repository
+version.
+
+* Append to journal files even when annex.alwayscompact=true.
+ This can make it a lot faster in some cases.
+ See note in Annex.Branch.changeOrAppend.
+
+ It's important that this only happen when no git-annex version
+ older than 10.20220724 can plausibly be running in a repository
+ 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.