From 9c6d930fd13f5d5f8df08de98b088955f4229958 Mon Sep 17 00:00:00 2001 From: Nick Dimiduk Date: Sat, 16 Jan 2016 15:44:07 -0800 Subject: [PATCH 1/5] HBASE-15119 Include git SHA in check_compatibility reports --- dev-support/check_compatibility.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dev-support/check_compatibility.sh b/dev-support/check_compatibility.sh index b6c11e0..95dba00 100755 --- a/dev-support/check_compatibility.sh +++ b/dev-support/check_compatibility.sh @@ -188,6 +188,8 @@ for ref in 1 2; do echo "Maven could not successfully package ${COMMIT[${ref}]}. Exiting..." >&2 exit 2 fi + # grab sha for future reference + SHA[${ref}]=$(git rev-parse --short HEAD) popd > /dev/null fi @@ -207,6 +209,7 @@ for ref in 1 2; do echo "Maven could not successfully package ${COMMIT[${ref}]}. Exiting..." >&2 exit 2 fi + SHA[${ref}]=$(git rev-parse --short HEAD) popd > /dev/null done @@ -259,7 +262,8 @@ fi # Generate command line arguments for Java ACC. JAVA_ACC_COMMAND+=(-l HBase) -JAVA_ACC_COMMAND+=(-v1 ${COMMIT[1]} -v2 ${COMMIT[2]}) +JAVA_ACC_COMMAND+=(-v1 ${COMMIT[1]}${SHA[1]+"/${SHA[1]}"}) +JAVA_ACC_COMMAND+=(-v2 ${COMMIT[2]}${SHA[2]+"/${SHA[2]}"}) JAVA_ACC_COMMAND+=(-d1 ${JARS[1]} -d2 ${JARS[2]}) JAVA_ACC_COMMAND+=(-report-path \ ${SCRIPT_DIRECTORY}/target/compatibility/report/${COMMIT[1]}_${COMMIT[2]}_compat_report.html) -- 2.7.2 From e00e45a7834a9be14c3ec6dd6bfc9e8c30dcaa53 Mon Sep 17 00:00:00 2001 From: Dima Spivak Date: Mon, 20 Jun 2016 12:45:27 -0700 Subject: [PATCH 2/5] HBASE-16073 update compatibility_checker for jacc dropping comma sep args Signed-off-by: Sean Busbey --- dev-support/check_compatibility.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dev-support/check_compatibility.sh b/dev-support/check_compatibility.sh index 95dba00..1745172 100755 --- a/dev-support/check_compatibility.sh +++ b/dev-support/check_compatibility.sh @@ -234,7 +234,8 @@ for ref in 1 2; do JARS[${ref}]=$(paste -s -d , <(echo "${JARS}")) done -# Download the Java API Compliance Checker (Java ACC) into /dev-support/target/compatibility. +# Download the Java API Compliance Checker (Java ACC) v. 1.7 (see HBASE-16073) into +# /dev-support/target/compatibility. # Note: Java API Compliance Checker (Java ACC) is licensed under the GNU GPL or LGPL. For more # information, visit http://ispras.linuxbase.org/index.php/Java_API_Compliance_Checker . @@ -242,7 +243,7 @@ done if [ ! -d ${SCRIPT_DIRECTORY}/target/compatibility/javaACC ] || [ -n "${FORCE_DOWNLOAD}" ]; then echo "Downloading Java API Compliance Checker..." rm -rf ${SCRIPT_DIRECTORY}/target/compatibility/javaACC - if ! git clone https://github.com/lvc/japi-compliance-checker.git \ + if ! git clone https://github.com/lvc/japi-compliance-checker.git -b 1.7 \ ${SCRIPT_DIRECTORY}/target/compatibility/javaACC; then echo "Failed to download Java API Compliance Checker. Exiting..." >&2 exit 2 -- 2.7.2 From e292a3b12bce509df93e823ac7dae55b2301261f Mon Sep 17 00:00:00 2001 From: Dima Spivak Date: Mon, 27 Jun 2016 15:18:04 -0700 Subject: [PATCH 3/5] HBASE-16129 check_compatibility.sh is broken when using Java API Compliance Checker v1.7 * This commit also fixes some stray tabs that got into the script at some point. Signed-off-by: Sean Busbey --- dev-support/check_compatibility.sh | 65 ++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/dev-support/check_compatibility.sh b/dev-support/check_compatibility.sh index 1745172..182cea7 100755 --- a/dev-support/check_compatibility.sh +++ b/dev-support/check_compatibility.sh @@ -70,12 +70,14 @@ Options: -f, --force-download Download dependencies (i.e. Java ACC), even if they are already present. -h, --help Show this screen. + -j, --java-acc Specify which version of Java ACC to use to run the analysis. This + can be a tag, branch, or commit hash. Defaults to master. -n, --no-checkout Run the tool without first using Git to checkout the two HBase versions. If this option is selected, - dev-support/target/compatibility/1 and - dev-support/target compatibility/2 must each be Git repositories. - Also note that the references must still be specified as these are - used when naming the compatibility report. + dev-support/target/compatibility/1 and + dev-support/target compatibility/2 must each be Git repositories. + Also note that the references must still be specified as these are + used when naming the compatibility report. -o , --options= A comma-separated list of options to pass directly to Java ACC. -q, --quick Runs Java ACC in quick analysis mode, which disables a number of checks for things that may break compatibility. @@ -89,14 +91,18 @@ __EOF GETOPT=${GETOPT:-/usr/bin/env getopt} # Parse command line arguments and check for proper syntax. -if ! ARG_LIST=$(${GETOPT} -q -o abfhno:qr:s \ - -l all,binary-only,force-download,help,no-checkout,options:,quick,repo:,source-only \ +if ! ARG_LIST=$(${GETOPT} -q -o abfhj:no:qr:s \ + -l all,binary-only,force-download,help,java-acc:,no-checkout,options:,quick,repo:,source-only \ -- "${@}"); then usage >&2 exit 2 fi eval set -- "${ARG_LIST[@]}" +# Set defaults for options in case they're not specified on the command line. +JAVA_ACC_COMMIT="master" +REPO_URL="https://github.com/apache/hbase.git" + while ((${#})); do case "${1}" in -a | --all ) @@ -111,6 +117,9 @@ while ((${#})); do -h | --help ) usage exit 0 ;; + -j | --java-acc ) + JAVA_ACC_COMMIT="${2}" + shift 2 ;; -n | --no-checkout ) NO_CHECKOUT=true shift 1 ;; @@ -133,12 +142,12 @@ while ((${#})); do shift 1 # If there is one positional argument, only was specified. if [ ${#} -eq 1 ]; then - COMMIT[1]="${1}" - COMMIT[2]=master - shift 1 + COMMIT[1]="${1}" + COMMIT[2]=master + shift 1 # If there are two positional arguments, and were both specified. elif [ ${#} -eq 2 ]; then - COMMIT[1]="${1}" + COMMIT[1]="${1}" COMMIT[2]="${2}" shift 2 # If there are no positional arguments or too many, someone needs to reread the usage @@ -151,9 +160,6 @@ while ((${#})); do esac done -# Set defaults for options if they're not specified on the command line. -REPO_URL=${REPO_URL:-https://github.com/apache/hbase.git} - # Do identical operations for both HBase versions in a for loop to save some lines of code. for ref in 1 2; do if ! [ "${NO_CHECKOUT}" ]; then @@ -165,8 +171,8 @@ for ref in 1 2; do if [ "${ref}" = "1" ]; then echo "Cloning ${REPO_URL} into ${SCRIPT_DIRECTORY}/target/compatibility/${ref}..." if ! git clone ${REPO_URL} ${SCRIPT_DIRECTORY}/target/compatibility/${ref}; then - echo "Error while cloning ${REPO_URL}. Exiting..." >&2 - exit 2 + echo "Error while cloning ${REPO_URL}. Exiting..." >&2 + exit 2 fi elif [ "${ref}" = "2" ]; then # Avoid cloning from Git twice by copying first repo into different folder. @@ -215,7 +221,7 @@ for ref in 1 2; do JARS=$(find ${SCRIPT_DIRECTORY}/target/compatibility/${ref} "${JAR_FIND_EXPRESSION[@]}") if [ ${#JARS[@]} -eq 0 ]; then - echo "Unable to find any JARs matching the find expression. Exiting..." >&2 + echo "Unable to find any JARs matching the find expression. Exiting..." >&2 exit 2 fi @@ -225,17 +231,21 @@ for ref in 1 2; do fi fi + # Create an XML descriptor containing paths to the JARs for Java ACC to use (support for + # comma-separated lists of JARs was removed, as described on their issue tracker: + # https://github.com/lvc/japi-compliance-checker/issues/27). + DESCRIPTOR_PATH="${SCRIPT_DIRECTORY}/target/compatibility/${ref}.xml" + echo "${COMMIT[${ref}]}${SHA[${ref}]+"/${SHA[${ref}]}"}" > "${DESCRIPTOR_PATH}" + echo "" >> "${DESCRIPTOR_PATH}" + echo "The JARs to be analyzed from ${COMMIT[${ref}]} are:" for jar in ${JARS}; do - echo " ${jar}" + echo " ${jar}" | tee -a "${DESCRIPTOR_PATH}" done - # Generate a comma-separated list of packages by using process substitution and passing - # the result to paste. - JARS[${ref}]=$(paste -s -d , <(echo "${JARS}")) + echo "" >> "${DESCRIPTOR_PATH}" done -# Download the Java API Compliance Checker (Java ACC) v. 1.7 (see HBASE-16073) into -# /dev-support/target/compatibility. +# Download the Java API Compliance Checker (Java ACC) into /dev-support/target/compatibility. # Note: Java API Compliance Checker (Java ACC) is licensed under the GNU GPL or LGPL. For more # information, visit http://ispras.linuxbase.org/index.php/Java_API_Compliance_Checker . @@ -243,7 +253,7 @@ done if [ ! -d ${SCRIPT_DIRECTORY}/target/compatibility/javaACC ] || [ -n "${FORCE_DOWNLOAD}" ]; then echo "Downloading Java API Compliance Checker..." rm -rf ${SCRIPT_DIRECTORY}/target/compatibility/javaACC - if ! git clone https://github.com/lvc/japi-compliance-checker.git -b 1.7 \ + if ! git clone https://github.com/lvc/japi-compliance-checker.git -b "${JAVA_ACC_COMMIT}" \ ${SCRIPT_DIRECTORY}/target/compatibility/javaACC; then echo "Failed to download Java API Compliance Checker. Exiting..." >&2 exit 2 @@ -253,8 +263,8 @@ fi # Generate annotation list dynamically; this way, there's no chance the file # gets stale and you have better visiblity into what classes are actually analyzed. declare -a ANNOTATION_LIST -ANNOTATION_LIST+=(InterfaceAudience.Public) -ANNOTATION_LIST+=(InterfaceAudience.LimitedPrivate) +ANNOTATION_LIST+=(org.apache.hadoop.hbase.classification.InterfaceAudience.Public) +ANNOTATION_LIST+=(org.apache.hadoop.hbase.classification.InterfaceAudience.LimitedPrivate) if ! [ -f ${SCRIPT_DIRECTORY}/target/compatibility/annotations ]; then cat > ${SCRIPT_DIRECTORY}/target/compatibility/annotations << __EOF $(tr " " "\n" <<< "${ANNOTATION_LIST[@]}") @@ -263,9 +273,8 @@ fi # Generate command line arguments for Java ACC. JAVA_ACC_COMMAND+=(-l HBase) -JAVA_ACC_COMMAND+=(-v1 ${COMMIT[1]}${SHA[1]+"/${SHA[1]}"}) -JAVA_ACC_COMMAND+=(-v2 ${COMMIT[2]}${SHA[2]+"/${SHA[2]}"}) -JAVA_ACC_COMMAND+=(-d1 ${JARS[1]} -d2 ${JARS[2]}) +JAVA_ACC_COMMAND+=(-old "${SCRIPT_DIRECTORY}/target/compatibility/1.xml") +JAVA_ACC_COMMAND+=(-new "${SCRIPT_DIRECTORY}/target/compatibility/2.xml") JAVA_ACC_COMMAND+=(-report-path \ ${SCRIPT_DIRECTORY}/target/compatibility/report/${COMMIT[1]}_${COMMIT[2]}_compat_report.html) if [ "${ALL}" != "true" ] ; then -- 2.7.2 From 7d49ee6d2498679d784a7f4829ca3727b7205864 Mon Sep 17 00:00:00 2001 From: Dima Spivak Date: Mon, 27 Jun 2016 11:29:23 -0700 Subject: [PATCH 4/5] HBASE-16124 Make check_compatibility.sh less verbose when building HBase Signed-off-by: Sean Busbey --- dev-support/check_compatibility.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-support/check_compatibility.sh b/dev-support/check_compatibility.sh index 182cea7..249124d 100755 --- a/dev-support/check_compatibility.sh +++ b/dev-support/check_compatibility.sh @@ -190,7 +190,7 @@ for ref in 1 2; do exit 2 fi echo "Building ${COMMIT[${ref}]}..." - if ! mvn clean package -DskipTests; then + if ! mvn clean package --batch-mode -DskipTests; then echo "Maven could not successfully package ${COMMIT[${ref}]}. Exiting..." >&2 exit 2 fi @@ -211,7 +211,7 @@ for ref in 1 2; do pushd ${SCRIPT_DIRECTORY}/target/compatibility/${ref} > /dev/null echo "The --no-checkout option was specified, but no JARs were found." \ "Attempting to build ${COMMIT[${ref}]}..." - if ! mvn clean package -DskipTests; then + if ! mvn clean package --batch-mode -DskipTests; then echo "Maven could not successfully package ${COMMIT[${ref}]}. Exiting..." >&2 exit 2 fi -- 2.7.2 From 6b1cc588b83f248e4c6306c1811e7fb5717af2d2 Mon Sep 17 00:00:00 2001 From: Dima Spivak Date: Wed, 27 Apr 2016 15:53:05 -0700 Subject: [PATCH 5/5] HBASE-15729 Remove old JDiff wrapper scripts in dev-support Signed-off-by: Sean Busbey Conflicts: dev-support/jdiffHBasePublicAPI.sh --- .../hbase_jdiff_acrossSingularityTemplate.xml | 59 ----- .../hbase_jdiff_afterSingularityTemplate.xml | 66 ------ dev-support/hbase_jdiff_template.xml | 53 ----- dev-support/jdiffHBasePublicAPI.sh | 249 --------------------- dev-support/jdiffHBasePublicAPI_common.sh | 76 ------- 5 files changed, 503 deletions(-) delete mode 100644 dev-support/hbase_jdiff_acrossSingularityTemplate.xml delete mode 100644 dev-support/hbase_jdiff_afterSingularityTemplate.xml delete mode 100644 dev-support/hbase_jdiff_template.xml delete mode 100755 dev-support/jdiffHBasePublicAPI.sh delete mode 100755 dev-support/jdiffHBasePublicAPI_common.sh diff --git a/dev-support/hbase_jdiff_acrossSingularityTemplate.xml b/dev-support/hbase_jdiff_acrossSingularityTemplate.xml deleted file mode 100644 index e8c5867..0000000 --- a/dev-support/hbase_jdiff_acrossSingularityTemplate.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -Creates a report in the directory "hbase_jdiff_report-p-PREVIOUS_BRANCH-c-CURRENT_BRANCH" of the default jdiff report folder. -This defaults to /tmp/jdiff but can optionally be specified by export $JDIFF_WORKING_DIRECTORY. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dev-support/hbase_jdiff_afterSingularityTemplate.xml b/dev-support/hbase_jdiff_afterSingularityTemplate.xml deleted file mode 100644 index 6c4cd93..0000000 --- a/dev-support/hbase_jdiff_afterSingularityTemplate.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - -Creates a report in the directory "hbase_jdiff_report-p-PREVIOUS_BRANCH-c-CURRENT_BRANCH" of the default jdiff report folder. -This defaults to /tmp/jdiff but can optionally be specified by export $JDIFF_WORKING_DIRECTORY. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dev-support/hbase_jdiff_template.xml b/dev-support/hbase_jdiff_template.xml deleted file mode 100644 index 21fe8ed..0000000 --- a/dev-support/hbase_jdiff_template.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - -Creates a report in the directory "hbase_jdiff_report-p-PREVIOUS_BRANCH-c-CURRENT_BRANCH" of the default jdiff report folder. -This defaults to /tmp/jdiff but can optionally be specified by export $JDIFF_WORKING_DIRECTORY. - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dev-support/jdiffHBasePublicAPI.sh b/dev-support/jdiffHBasePublicAPI.sh deleted file mode 100755 index 2000d2a..0000000 --- a/dev-support/jdiffHBasePublicAPI.sh +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/bash -set -e - -# 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. - -################################################ ABOUT JDIFF ####################################################### -# -# What is JDiff? JDiff is a tool for comparing the public APIs of two separate Java codebases. Like diff, it will -# give additions, changes, and removals. It will output an HTML report with the information. -# To learn more, visit http://javadiff.sourceforge.net/. -# JDiff is licensed under LGPL. - -############################################# QUICK-START EXAMPLE ################################################## -# -# Suppose we wanted to see the API diffs between HBase 0.92 and HBase 0.94. We could use this tool like so: -# > ./jdiffHBasePublicAPI.sh https://github.com/apache/hbase.git 0.92 https://github.com/apache/hbase.git 0.94 -# -# This would generate a report in the local folder /tmp/jdiff/hbase_jdiff_report-p-0.92-c-0.94/ -# To view the report, simply examine /tmp/jdiff/hbase_jdiff_report-p-0.92-c-0.94/changes.html in your choice of -# browser. -# -# Note that this works because 0.92 and 0.94 have the source directory structure that is specified in the -# hbase_jdiff_template.xml file. To compare 0.95 to 0.96, which have the post-singularity structure, two other -# template files (included) are used. The formats are autoated and is all taken care of automatically by the script. -# -# On a local machine, JDiff reports have taken ~20-30 minutes to run. On Jenkins, it has taken over 35 minutes -# in some cases. Your mileage may vary. Trunk and 0.95 take more time than 0.92 and 0.94. -# -# -############################################ SPECIFYING A LOCAL REPO ############################################### -# -# The JDiff tool also works with local code. Instead of specifying a repo and a branch, you can specifying the -# absolute path of the ./hbase folder and a name for code (e.g. experimental_94). -# -# A local repo can be specified for none, one, or both of the sources. -# -############################################### EXAMPLE USE CASES ################################################## -# -# Example 1: Generate a report to check if potential change doesn't break API compatibility with Apache HBase 0.94 -# -# In this case, you could compare the version you are using against a repo branch where your changes are. -# > ./jdiffHBasePublicAPI.sh https://github.com/apache/hbase.git 0.94 https://github.com/MY_REPO/hbase.git 0.94 -# -# Example 2: Generate a report to check if two branches of the same repo have any public API incompatibilities -# > ./jdiffHBasePublicAPI.sh https://github.com/MY_REPO/hbase.git $BRANCH_1 \ -# > https://github.com/MY_REPO/hbase.git $BRANCH_2 -# -# Example 3: Have Example 1 done in a special directory in the user's home folder -# -# > export JDIFF_WORKING_DIRECTORY=~/jdiff_reports -# > ./jdiffHBasePublicAPI.sh https://github.com/apache/hbase.git 0.94 https://github.com/MY_REPO/hbase.git 0.94 -# -# Example 4: Check the API diff of a local change against an existing repo branch. -# > ./jdiffHBasePublicAPI.sh https://github.com/apache/hbase.git 0.95 /home/aleks/exp_hbase/hbase experiment_95 -# -# Example 5: Compare two local repos for public API changes -# > ./jdiffHBasePublicAPI.sh /home/aleks/stable_hbase/hbase stable_95 /home/aleks/exp_hbase/hbase experiment_95 -# -# -################################################## NOTE ON USAGE ################################################### -# -# 1. When using this tool, please specify the initial version first and the current version second. The semantics -# do not make sense otherwise. For example: jdiff 94 95 is good. jdiff 95 94 is bad -# -############################################# READING A JDIFF REPORT ############################################### -# -# The purpose of the JDiff report is show things that have changed between two versions of the public API. A user -# would use this report to determine if committing a change would cause existing API clients to break. To do so, -# there are specific things that one should look for in the report. -# -# 1. Identify the classes that constitute the public API. An example in 0.94 might be all classes in -# org.apache.hadoop.hbase.client.* -# 2. After identifying those classes, go through each one and look for offending changes. -# Those may include, but are not limited to: -# 1. Removed methods -# 2. Changed methods (including changes in return type and exception types) -# 3. Methods added to interfaces -# 4. Changed class inheritence information (may in innocuous but definitely worth validating) -# 5. Removed or renamed public static member variables and constants -# 6. Removed or renamed packages -# 7. Class moved to a different package - -########################################### SETTING THE JDIFF WORKING DIRECTORY #################################### -# -# By default, the working environment of jdiff is /tmp/jdiff. However, sometimes it is nice to have it place reports -# and temp files elsewhere. In that case, please export JDIFF_WORKING_DIRECTORY into the bash environment and this -# script will pick that up and use it. -# - -scriptDirectory=$(dirname ${BASH_SOURCE[0]}) -x=`echo $scriptDirectory | sed "s{\.{{g"` -DEV_SUPPORT_HOME="`pwd`$x" -. $scriptDirectory/jdiffHBasePublicAPI_common.sh - -EXPECTED_ARGS=4 - -if [[ "$#" -ne "$EXPECTED_ARGS" ]]; then - echo "This tool expects $EXPECTED_ARGS arguments, but received $#. Please check your command and try again."; - echo "Usage: $0 " - exit 1; -fi - -echo "JDiff evaluation beginning:"; -isGitRepo $1 -FIRST_SOURCE_TYPE=$INPUT_FORMAT; -isGitRepo $3 -SECOND_SOURCE_TYPE=$INPUT_FORMAT; - -PREVIOUS_BRANCH=$2 ## We will still call it a branch even if it's not from a git repo. -CURRENT_BRANCH=$4 - -echo "We are going to compare source 1 which is a $FIRST_SOURCE_TYPE and source 2, which is a $SECOND_SOURCE_TYPE" - - -# Check that if either source is from a git repo, that the name is reasonable. -if [[ "$FIRST_SOURCE_TYPE" = "git_repo" ]]; then - - git check-ref-format --branch $2 -fi - -if [[ "$SECOND_SOURCE_TYPE" = "git_repo" ]]; then - - git check-ref-format --branch $4 -fi - -#If the JDIFF_WORKING_DIRECTORY is set, then we will output the report there. Otherwise, to the default location -if [[ "$JDIFF_WORKING_DIRECTORY" = "" ]]; then - - JDIFF_WORKING_DIRECTORY=/tmp/jdiff - echo "JDIFF_WORKING_DIRECTORY not set. That's not an issue. We will default it to $JDIFF_WORKING_DIRECTORY." -else - echo "JDIFF_WORKING_DIRECTORY set to $JDIFF_WORKING_DIRECTORY"; -fi -mkdir -p $JDIFF_WORKING_DIRECTORY - -# We will need this to reference the template we want to use -cd $JDIFF_WORKING_DIRECTORY -scenario_template_name=hbase_jdiff_p-$PREVIOUS_BRANCH-c-$CURRENT_BRANCH.xml - - -# Pull down JDiff tool and unpack it -if [ ! -d jdiff-1.1.1-with-incompatible-option ]; then - curl -O http://cloud.github.com/downloads/tomwhite/jdiff/jdiff-1.1.1-with-incompatible-option.zip - unzip jdiff-1.1.1-with-incompatible-option.zip -fi - -JDIFF_HOME=`pwd`/jdiff-1.1.1-with-incompatible-option -cd $JDIFF_WORKING_DIRECTORY - -# Pull down sources if necessary. Note that references to previous change are prefaced with p- in order to avoid collission of branch names -if [[ "$FIRST_SOURCE_TYPE" = "git_repo" ]]; then - - PREVIOUS_REPO=$1 - rm -rf p-$PREVIOUS_BRANCH - mkdir -p p-$PREVIOUS_BRANCH - cd p-$PREVIOUS_BRANCH - git clone --depth 1 $PREVIOUS_REPO && cd hbase && git checkout origin/$PREVIOUS_BRANCH - cd $JDIFF_WORKING_DIRECTORY - HBASE_1_HOME=`pwd`/p-$PREVIOUS_BRANCH/hbase -else - HBASE_1_HOME=$1 -fi - -echo "HBASE_1_HOME set to $HBASE_1_HOME" -echo "In HBASE_1_HOME, we have" -ls -la $HBASE_1_HOME - -if [[ "$SECOND_SOURCE_TYPE" = "git_repo" ]]; then - CURRENT_REPO=$3 - rm -rf $JDIFF_WORKING_DIRECTORY/c-$CURRENT_BRANCH - mkdir -p $JDIFF_WORKING_DIRECTORY/c-$CURRENT_BRANCH - cd $JDIFF_WORKING_DIRECTORY/c-$CURRENT_BRANCH - git clone --depth 1 $CURRENT_REPO && cd hbase && git checkout origin/$CURRENT_BRANCH - cd $JDIFF_WORKING_DIRECTORY - HBASE_2_HOME=`pwd`/c-$CURRENT_BRANCH/hbase -else - HBASE_2_HOME=$3 -fi - -echo "HBASE_2_HOME set to $HBASE_2_HOME" -echo "In HBASE_2_HOME, we have" -ls -la $HBASE_2_HOME - -# Next step is to pull down the proper template based on the directory structure -isNewFormat $HBASE_1_HOME -export P_FORMAT=$BRANCH_FORMAT - -isNewFormat $HBASE_2_HOME -export C_FORMAT=$BRANCH_FORMAT - -if [[ "$C_FORMAT" = "new" ]]; then - - if [[ "$P_FORMAT" = "new" ]]; then - templateFile=$DEV_SUPPORT_HOME/hbase_jdiff_afterSingularityTemplate.xml - echo "Previous format is of the new style. We'll be using template $templateFile"; - else - templateFile=$DEV_SUPPORT_HOME/hbase_jdiff_acrossSingularityTemplate.xml - echo "Previous format is of the old style. We'll be using template $templateFile"; - fi - -else - - if [[ "P_FORMAT" != "old" ]]; then - echo "When using this tool, please specify the initial version first and the current version second. They should be in ascending chronological order. - The semantics do not make sense otherwise. For example: jdiff 94 95 is good. jdiff 95 94 is bad." - echo "Exiting the script." - exit 5; - fi - templateFile=$DEV_SUPPORT_HOME/hbase_jdiff_template.xml - echo "Both formats are using the 94 and earlier style directory format. We'll be using template $templateFile" -fi - -cp $templateFile $JDIFF_WORKING_DIRECTORY/$scenario_template_name - -### Configure the jdiff script - -### Note that PREVIOUS_BRANCH and CURRENT_BRANCH will be the absolute locations of the source. -echo "Configuring the jdiff script" -sed -i "s]hbase_jdiff_report]hbase_jdiff_report-p-$PREVIOUS_BRANCH-c-$CURRENT_BRANCH]g" $JDIFF_WORKING_DIRECTORY/$scenario_template_name -sed -i "s]JDIFF_HOME_NAME]$JDIFF_HOME]g" $JDIFF_WORKING_DIRECTORY/$scenario_template_name -sed -i "s]OLD_BRANCH_NAME]$HBASE_1_HOME]g" $JDIFF_WORKING_DIRECTORY/$scenario_template_name -sed -i "s]NEW_BRANCH_NAME]$HBASE_2_HOME]g" $JDIFF_WORKING_DIRECTORY/$scenario_template_name - -sed -i "s]V1]$PREVIOUS_BRANCH]g" $JDIFF_WORKING_DIRECTORY/$scenario_template_name -sed -i "s]V2]$CURRENT_BRANCH]g" $JDIFF_WORKING_DIRECTORY/$scenario_template_name - -sed -i "s]JDIFF_FOLDER]$JDIFF_WORKING_DIRECTORY]g" $JDIFF_WORKING_DIRECTORY/$scenario_template_name - -echo "Running jdiff"; -ls -la $JDIFF_WORKING_DIRECTORY; -ant -f $JDIFF_WORKING_DIRECTORY/$scenario_template_name; - -echo "jdiff operation complete. Report placed into $JDIFF_WORKING_DIRECTORY/hbase_jdiff_report-p-$PREVIOUS_BRANCH-c-$CURRENT_BRANCH/changes.html"; - diff --git a/dev-support/jdiffHBasePublicAPI_common.sh b/dev-support/jdiffHBasePublicAPI_common.sh deleted file mode 100755 index 1cc9954..0000000 --- a/dev-support/jdiffHBasePublicAPI_common.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/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. -# -########################################################################################################################## -# -### Purpose: To describe whether the directory specified has the old directory format or the new directory format -### Usage: This function takes one argument: The directory in question -### It will set the temporary variable BRANCH_FORMAT. This variable can change with every call, so it is up to the user to -### store it into something else as soon as the function exists -### Example: -### > isNewFormat ./myDevDir/testing/branch/hbase -isNewFormat() { - - echo "Determining if directory $1 is of the 0.94 and before OR 0.95 and after versions"; - if [[ "$1" = "" ]]; then - echo "Directory not specified. Exiting"; - fi - echo "First, check that $1 exists"; - if [[ -d $1 ]]; then - echo "Directory $1 exists" - else - echo "Directory $1 does not exist. Exiting"; - exit 1; - fi - - if [[ -d "$1/hbase-server" ]]; then - - echo "The directory $1/hbase-server exists so this is of the new format"; - export BRANCH_FORMAT=new; - - else - echo "The directory $1/hbase-server does not exist. Therefore, this is of the old format"; - export BRANCH_FORMAT=old; - fi -} - -### Purpose: To describe whether the argument specified is a git repo or a local directory -### Usage: This function takes one argument: The directory in question -### It will set the temporary variable INPUT_FORMAT. This variable can change with every call, so it is up to the user to -### store it into something else as soon as the function exists -### Example: -### > isGitRepo ./myDevDir/testing/branch/hbase - -isGitRepo() { - - echo "Determining if this is a local directory or a git repo."; - if [[ "$1" = "" ]]; then - echo "No value specified for repo or directory. Exiting." - exit 1; - fi - - if [[ `echo $1 | grep 'http://'` || `echo $1 | grep 'https://'` || `echo $1 | grep 'git://'` ]]; then - echo "Looks like $1 is a git repo"; - export INPUT_FORMAT=git_repo - else - echo "$1 is a local directory"; - export INPUT_FORMAT=local_directory - fi - - -} -- 2.7.2