git-annex/debian
Joey Hess f8e940eb8e 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.
2013-05-24 21:46:33 -04:00
..
changelog Fix bug in parsing of parens in some preferred content expressions. This fixes the behavior of the manual mode group. 2013-05-24 21:46:33 -04:00
compat debhelper v9 2012-01-15 14:53:38 -04:00
control debian architecture build fun 2013-05-19 21:44:33 -04:00
copyright clean up license file 2013-03-14 16:52:28 -04:00
doc-base Add doc-base file. Closes: #621408 2011-04-06 21:57:22 -04:00
menu fixups 2013-05-15 22:48:27 -04:00
NEWS releasing version 3.20120123 2012-01-23 15:09:50 -04:00
rules rename var 2013-05-10 18:52:35 -04:00