#!/bin/bash
# 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.

set -ex

. `dirname $0`/bigtop.bom

#A hack to disable Codehaus repository since it's out of service
sed --in-place -e '/http:\/\/repository.codehaus.org/,/<\/repository>/s/true/false/' pom.xml

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m"

#An awful hack for BIGTOP-1429 to satisfy ASF CI build deps. resolution
bash -x ./dev-support/generate-hadoopX-poms.sh $HBASE_VERSION $HBASE_VERSION-hadoop2

mvn -DskipTests -Dslf4j.version=1.6.1         \
    -Dhadoop-two.version=$HADOOP_VERSION      \
    -Dzookeeper.version=$ZOOKEEPER_VERSION    \
    clean install -f pom.xml.hadoop2 "$@" &&  \
mvn -DskipTests -Dslf4j.version=1.6.1         \
    -Dhadoop-two.version=$HADOOP_VERSION      \
    -Dzookeeper.version=$ZOOKEEPER_VERSION    \
    install site assembly:single -f pom.xml.hadoop2 "$@"
rm -rf build
mkdir build
tar -C build --strip-components=1 -xzf hbase-assembly/target/hbase*.tar.gz
