# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Filters and substitutes for SED
# Multiple patterns for DELETE: comma separated
#   delete=pattern1,pattern2,...,patternn
# No commas can be allowed in the patterns.
#
# Multiple patterns for SUBSTITUTE: comma separated <pattern;substitute> pair
#   substitute=pattern1;substitute1,pattern2;substitute2,...,patternn;substituten
# No commas or semicolons can be allowed in the patterns/subsitutes.
---------------------------------------------------------------------------------
# needed for platform tests; path separator masking
# note, the .* seems to take away too much on occasion, however, without it, nothing gets picked up.
substitute=XSLAT: The log directory 'extinout.*crwombatlog.*log';XSLAT: The log directory 'extinout<ps>crwombatlog<ps>log',XSLAT: The log directory 'extinout/crwombatlog/log';XSLAT: Log directory 'extinout<ps>crwombat<ps>log',XBM0Y: Backup database directory nobackup.*wombat not found;XBM0Y: Backup database directory nobackup<ps>wombat not found,XBM0Y: Backup database directory nobackup/wombat not found;XBM0Y: Backup database directory nobackup<ps>wombat not found,XBM0Q: File extinout/mybackup/wombat/service.properties not found.;XBM0Q: File extinout<ps>mybackup<ps>wombat<ps>service.properties not found.,XBM0Q: File extinout.*mybackup.*wombat.*service.properties not found.;XBM0Q: File extinout<ps>mybackup<ps>wombat<ps>service.properties not found.,XSDG6: Data segment directory not found in extinout/mybackup/wombat backup during restore.;XSDG6: Data segment directory not found in extinout<ps>mybackup<ps>wombat backup during restore.,XSDG6: Data segment directory not found in extinout.*mybackup.*wombat backup during restore.;XSDG6: Data segment directory not found in extinout<ps>mybackup<ps>wombat backup during restore.,XSLAS: Log directory extinout/mybackup/wombat/log not found;XSLAS: Log directory extinout<ps>mybackup<ps>wombat<ps>log not found,XSLAS: Log directory extinout.*mybackup.*wombat.*log not found;XSLAS: Log directory extinout<ps>mybackup<ps>wombat<ps>log not found
