# 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.

MAVEN_OPTS="${MAVEN_OPTS:-"-Xmx3100M"}"

# The number of acceptable warning for *all* modules
# Please update the per-module test-patch.properties if you update this file.

OK_RELEASEAUDIT_WARNINGS=0
# Allow two warnings.  Javadoc complains about sun.misc.Unsafe use.  See HBASE-7457
OK_JAVADOC_WARNINGS=93

MAX_LINE_LENGTH=100

# All supported branches for testing with precommit build
# be sure to consider branch name prefixes in the order, ie, 4.x should appear
# before 4 since the latter is a prefix
BRANCH_NAMES="4.x-HBase-1.2 4.x-HBase-1.3 4.x-HBase-1.4 master"


# All supported Hadoop versions that we want to test the compilation with
HADOOP2_VERSIONS="2.6.5 2.7.3 2.8.0"
# Presently unused.
HADOOP3_VERSIONS="3.0.0-alpha4"
INCOMPATIBLE_CLASSES="com.google.protobuf.HBaseZeroCopyByteString"
