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:
parent
65ca0b49d6
commit
6992250d63
5 changed files with 31 additions and 1 deletions
|
@ -2,6 +2,8 @@ git-annex (10.20220128) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
* adb: Avoid find failing with "Argument list too long"
|
* adb: Avoid find failing with "Argument list too long"
|
||||||
* Pass --no-textconv when running git diff internally.
|
* 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
|
-- Joey Hess <id@joeyh.name> Mon, 31 Jan 2022 13:14:42 -0400
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ import Annex.CatFile
|
||||||
|
|
||||||
import qualified Data.Set as S
|
import qualified Data.Set as S
|
||||||
import Data.Either
|
import Data.Either
|
||||||
|
import Data.Char
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import Data.ByteString.Builder
|
import Data.ByteString.Builder
|
||||||
import qualified Data.ByteString.Lazy as L
|
import qualified Data.ByteString.Lazy as L
|
||||||
|
@ -82,7 +83,7 @@ parseTransitionsStrictly source b =
|
||||||
|
|
||||||
transitionLineParser :: A.Parser TransitionLine
|
transitionLineParser :: A.Parser TransitionLine
|
||||||
transitionLineParser = do
|
transitionLineParser = do
|
||||||
t <- (parsetransition <$> A.takeByteString)
|
t <- parsetransition <$> A.takeTill (== sp)
|
||||||
_ <- A8.char ' '
|
_ <- A8.char ' '
|
||||||
c <- vectorClockParser
|
c <- vectorClockParser
|
||||||
return $ TransitionLine c t
|
return $ TransitionLine c t
|
||||||
|
@ -90,6 +91,7 @@ transitionLineParser = do
|
||||||
parsetransition b = case readish (decodeBS b) of
|
parsetransition b = case readish (decodeBS b) of
|
||||||
Just t -> Right t
|
Just t -> Right t
|
||||||
Nothing -> Left b
|
Nothing -> Left b
|
||||||
|
sp = fromIntegral (ord ' ')
|
||||||
|
|
||||||
combineTransitions :: [Transitions] -> Transitions
|
combineTransitions :: [Transitions] -> Transitions
|
||||||
combineTransitions = S.unions
|
combineTransitions = S.unions
|
||||||
|
|
|
@ -31,3 +31,5 @@ Reproduction script:
|
||||||
git-annex log foo
|
git-annex log foo
|
||||||
|
|
||||||
--[[Joey]]
|
--[[Joey]]
|
||||||
|
|
||||||
|
> [[fixed|done]] --[[Joey]]
|
||||||
|
|
|
@ -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.
|
||||||
|
"""]]
|
|
@ -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.
|
||||||
|
"""]]
|
Loading…
Reference in a new issue