takeByteString can only be used at the end of a parser, not before other
input. This was a dumb enough mistake that I audited the rest of the
code base for similar mistakes. Pity that attoparsec cannot avoid it at
the type level.
Fixes git-annex forget propagation between repositories. (reversion
introduced in version 7.
20190122)
Sponsored-by: Brock Spratlen on Patreon
* adb: Avoid find failing with "Argument list too long"
* Pass --no-textconv when running git diff internally.
+ * Fix git-annex forget propagation between repositories.
+ (reversion introduced in version 7.20190122)
-- Joey Hess <id@joeyh.name> Mon, 31 Jan 2022 13:14:42 -0400
import qualified Data.Set as S
import Data.Either
+import Data.Char
import Data.ByteString (ByteString)
import Data.ByteString.Builder
import qualified Data.ByteString.Lazy as L
transitionLineParser :: A.Parser TransitionLine
transitionLineParser = do
- t <- (parsetransition <$> A.takeByteString)
+ t <- parsetransition <$> A.takeTill (== sp)
_ <- A8.char ' '
c <- vectorClockParser
return $ TransitionLine c t
parsetransition b = case readish (decodeBS b) of
Just t -> Right t
Nothing -> Left b
+ sp = fromIntegral (ord ' ')
combineTransitions :: [Transitions] -> Transitions
combineTransitions = S.unions
git-annex log foo
--[[Joey]]
+
+> [[fixed|done]] --[[Joey]]
--- /dev/null
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2022-02-07T17:49:37Z"
+ content="""
+Reversion introduced in [[!commit 2eadb6cd68073a905e8ff32cc8093a43d0b05c81]].
+Parsing of the transitions log silently failed, so all propagation of
+transitions was broken.
+"""]]
--- /dev/null
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2022-02-07T16:43:26Z"
+ content="""
+I'm sure this used to work, but I've confirmed it no longer does
+and opened a bug report [[sync_does_not_propagate_forgetfulness]]
+
+Update: The bug I found is fixed. I'm fairly sure it caused the problem you
+saw as well, although I have not tried to reproduce your exact situation.
+
+Once you upgrade to the next release of git-annex (or tomorrow's daily
+build), you will need to re-run the git-annex forget command, and then it
+should propagate that new forgetting properly.
+"""]]