Fix bug in parsing of parens in some preferred content expressions. This fixes the behavior of the manual mode group.
The current manual mode preferred content expression is: "present and (((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) or (not copies=semitrusted+:1))" The old matcher misparsed this, to basically: OR (present and (...)) (not copies=semitrusted+:1)) The paren handling and indeed the whole conversion from tokens to the matcher was just wrong. The new way may not be the cleverest, but I think it is correct, and you can see how it pattern matches structurally against the expressions when parsing them. That expression is now parsed to: MAnd (MOp <function>) (MOr (MOr (MAnd (MOp <function>) (MOp <function>)) (MNot (MOr (MOp <function>) (MOp <function>)))) (MNot (MOp <function>))) Which appears correct, and behaves correct in testing. Also threw in a simplifier, so the final generated Matcher has less unnecessary clutter in it. Mostly so that I could more easily read & confirm them. Also, added a simple test of the Matcher to the test suite. There is a small chance of badly formed preferred content expressions behaving differently than before due to this rewrite.
This commit is contained in:
parent
c84538433a
commit
f8e940eb8e
4 changed files with 69 additions and 18 deletions
2
Test.hs
2
Test.hs
|
@ -56,6 +56,7 @@ import qualified Utility.Misc
|
|||
import qualified Utility.InodeCache
|
||||
import qualified Utility.Env
|
||||
import qualified Utility.Gpg
|
||||
import qualified Utility.Matcher
|
||||
#ifndef __WINDOWS__
|
||||
import qualified GitAnnex
|
||||
#endif
|
||||
|
@ -114,6 +115,7 @@ quickcheck =
|
|||
, check "prop_relPathDirToFile_basics" Utility.Path.prop_relPathDirToFile_basics
|
||||
, check "prop_relPathDirToFile_regressionTest" Utility.Path.prop_relPathDirToFile_regressionTest
|
||||
, check "prop_cost_sane" Config.Cost.prop_cost_sane
|
||||
, check "prop_matcher_sane" Utility.Matcher.prop_matcher_sane
|
||||
, check "prop_HmacSha1WithCipher_sane" Crypto.prop_HmacSha1WithCipher_sane
|
||||
, check "prop_TimeStamp_sane" Logs.UUIDBased.prop_TimeStamp_sane
|
||||
, check "prop_addLog_sane" Logs.UUIDBased.prop_addLog_sane
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue