

! comparator log messages start with a line identifing comparator used, and date ran, and then a 
! sequence of 3 (sometimes 4) lines describing the differences found by comparator. 

! line 1      summary             type (canonical, archive, etc), bundle, and version info 
! line 2      comparison          exact repositories being compared
! line 3      reason              brief description of the differnce found (or errors or exceptions in processing)
! line 4      extraDetail         a bit more details about errors found (variable, only a few messages have 4 lines)
!
! Rules on which messages are significant, or unexpected, are specified as three regex expresssions, 
! one for each of 
! the (first) three lines above (the forth, "extra detail" is not considered). All three rules, must 
! "match" all three 
! lines. By carefully crafting the rules, you can get some rule to apply too all comparator messages, 
! (e.g. ignore any message 
! stating the about.mappings files are different) or ignore only a certain message for a a certain 
! bundle/version (e.g. 
! ignore differences in build.xml file, but only in the org.eclipse.jst.jsf.doc.user bundle). 
! Note that the three parts of a comparator message must match all three parts of an exclude rule, 
! but for simplicity, if a rule part is empty or null, it is interpreted to mean "match anything" for 
! that message part. 

comparator.aboutmappings.summary = 
comparator.aboutmappings.comparison = 
comparator.aboutmappings.reason = ^In about\\.mappings, the property \"0\" has different values.*$

comparator.testjar.summary = .*org.eclipse.jst.j2ee.tests.*
comparator.testjar.comparison = 
comparator.testjar.reason = ^IOException comparing.*sourceartifactTestData_ClasspathDependencyTests_Test1_jar.*$

comparator.testcorruptjar.summary = .*org.eclipse.wst.jsdt.core.tests.model.*
comparator.testcorruptjar.comparison = 
comparator.testcorruptjar.reason = ^IOException comparing.*sourceartifactworkspace_JavaSearch_corrupt_jar.*$

comparator.docbuildxml.summary = .*(\
org.eclipse.wst.xsl.sdk.documentation|\
org.eclipse.wst.xsl.doc|\
org.eclipse.wst.server.ui.doc.user|\
org.eclipse.jst.server.ui.doc.user|\
org.eclipse.jst.ws.jaxws.doc.user|\
org.eclipse.jst.jsf.doc.user|\
org.eclipse.wst.jsdt.doc|\
org.eclipse.wst.common.project.facet.doc.api\
).*$
comparator.docbuildxml.comparison = 
! exclude all doc, for now
!comparator.docbuildxml.reason = ^Binary file build\\.xml: sizes differ by.*$



