fix obviously wrong attoparsec parser

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
This commit is contained in:
Joey Hess 2022-02-07 14:09:43 -04:00
parent 65ca0b49d6
commit 6992250d63
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
5 changed files with 31 additions and 1 deletions

View file

@ -2,6 +2,8 @@ git-annex (10.20220128) UNRELEASED; urgency=medium
* 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

View file

@ -25,6 +25,7 @@ import Annex.CatFile
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
@ -82,7 +83,7 @@ parseTransitionsStrictly source b =
transitionLineParser :: A.Parser TransitionLine
transitionLineParser = do
t <- (parsetransition <$> A.takeByteString)
t <- parsetransition <$> A.takeTill (== sp)
_ <- A8.char ' '
c <- vectorClockParser
return $ TransitionLine c t
@ -90,6 +91,7 @@ transitionLineParser = do
parsetransition b = case readish (decodeBS b) of
Just t -> Right t
Nothing -> Left b
sp = fromIntegral (ord ' ')
combineTransitions :: [Transitions] -> Transitions
combineTransitions = S.unions

View file

@ -31,3 +31,5 @@ Reproduction script:
git-annex log foo
--[[Joey]]
> [[fixed|done]] --[[Joey]]

View file

@ -0,0 +1,9 @@
[[!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.
"""]]

View file

@ -0,0 +1,15 @@
[[!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.
"""]]