HBASE-9153: Introduce/update a script to generate jdiff reports

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1524585 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
ndimiduk 2013-09-18 21:35:54 +00:00
parent 6d5a7fbebe
commit 353016c99d
6 changed files with 420 additions and 184 deletions

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed 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.
-->
<project name="jdiff" default="jdiff_report" basedir="JDIFF_FOLDER">
<description>
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.
</description>
<target name="jdiff_report" depends="">
<!-- This variable is used by the Ant JDiff task. Set it to the
location where the jdiff package was unpacked -->
<property name="JDIFF_HOME" value="JDIFF_HOME_NAME" />
<property name="OLD_BRANCH" value="OLD_BRANCH_NAME"/>
<property name="NEW_BRANCH" value="NEW_BRANCH_NAME"/>
<taskdef name="jdiff"
classname="jdiff.JDiffAntTask"
classpath="${JDIFF_HOME}/antjdiff.jar" />
<jdiff destdir="hbase_jdiff_report"
verbose="off"
stats="on">
<old name="V1">
<!-- This is the location of your old source files -->
<dirset dir="${OLD_BRANCH}/src/main/java" includes="**" />
</old>
<new name="V2">
<!-- This is the location of your new source files -->
<dirset dir="${NEW_BRANCH}/hbase-server/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-client/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-common/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-protocol/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-it/src/test/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-hadoop-compat/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-hadoop2-compat/src/main/java" includes="**" />
</new>
</jdiff>
</target>
</project>

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed 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.
-->
<project name="jdiff" default="jdiff_report" basedir="JDIFF_FOLDER">
<description>
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.
</description>
<target name="jdiff_report" depends="">
<!-- This variable is used by the Ant JDiff task. Set it to the
location where the jdiff package was unpacked -->
<property name="JDIFF_HOME" value="JDIFF_HOME_NAME" />
<property name="OLD_BRANCH" value="OLD_BRANCH_NAME"/>
<property name="NEW_BRANCH" value="NEW_BRANCH_NAME"/>
<taskdef name="jdiff"
classname="jdiff.JDiffAntTask"
classpath="${JDIFF_HOME}/antjdiff.jar" />
<jdiff destdir="hbase_jdiff_report"
verbose="off"
stats="on">
<old name="V1">
<!-- This is the location of your old source files -->
<dirset dir="${OLD_BRANCH}/hbase-server/src/main/java" includes="**" />
<dirset dir="${OLD_BRANCH}/hbase-client/src/main/java" includes="**" />
<dirset dir="${OLD_BRANCH}/hbase-common/src/main/java" includes="**" />
<dirset dir="${OLD_BRANCH}/hbase-protocol/src/main/java" includes="**" />
<dirset dir="${OLD_BRANCH}/hbase-it/src/test/java" includes="**" />
<dirset dir="${OLD_BRANCH}/hbase-hadoop-compat/src/main/java" includes="**" />
<dirset dir="${OLD_BRANCH}/hbase-hadoop2-compat/src/main/java" includes="**" />
</old>
<new name="V2">
<!-- This is the location of your new source files -->
<dirset dir="${NEW_BRANCH}/hbase-server/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-client/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-common/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-protocol/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-it/src/test/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-hadoop-compat/src/main/java" includes="**" />
<dirset dir="${NEW_BRANCH}/hbase-hadoop2-compat/src/main/java" includes="**" />
</new>
</jdiff>
</target>
</project>

View File

@ -35,11 +35,11 @@ This defaults to /tmp/jdiff but can optionally be specified by export $JDIFF_WOR
stats="on"> stats="on">
<old name="V1"> <old name="V1">
<!-- This is the location of your old source files --> <!-- This is the location of your old source files -->
<dirset dir="./p-${OLD_BRANCH}/hbase/src/main/java" includes="**" /> <dirset dir="${OLD_BRANCH}/src/main/java" includes="**" />
</old> </old>
<new name="V2"> <new name="V2">
<!-- This is the location of your new source files --> <!-- This is the location of your new source files -->
<dirset dir="./c-${NEW_BRANCH}/hbase/src/main/java" includes="**" /> <dirset dir="${NEW_BRANCH}/src/main/java" includes="**" />
</new> </new>
</jdiff> </jdiff>
</target> </target>

View File

@ -1,182 +0,0 @@
#!/bin/bash
set -x
# Licensed 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:
# > ./jdiffHBaseFromGitRepos.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, both of which have a different structure than 0.94, it is
# necessary to modify hbase_jdiff_template.xml.
#
# On a local machine, JDiff reports have taken ~10-12 minutes to run. On Jenkins, it has taken over 35 minutes
# in some cases. Your mileage may vary.
############################################### 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.
# > ./jdiffHBaseFromGitRepos.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
# > ./jdiffHBaseFromGitRepos.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
# > ./jdiffHBaseFromGitRepos.sh https://github.com/apache/hbase.git 0.94 https://github.com/MY_REPO/hbase.git 0.94
#
############################################# 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.
#
# WARNING: We do not perform validation on this directory, so please make sure it a valid, non-sensitive location.
#
### At this point, CURRENT_BRANCH, PREVIOUS_BRANCH, CURRENT_REPO, PREVIOUS_REPO need to all be specified ###
set -e
#check number of arguments. Should be 4
echo "Starting jdiff"
EXPECTED_ARGS=4
if [[ $# -ne $EXPECTED_ARGS ]]; then
echo "Incorrect number of arguments. Expected $EXPECTED_ARGS";
echo "Usage: $0 PREVIOUS_REPO PREVIOUS_BRANCH CURRENT_REPO CURRENT_BRANCH";
exit 1;
fi
PREVIOUS_REPO=$1
PREVIOUS_BRANCH=$2
CURRENT_REPO=$3
CURRENT_BRANCH=$4
echo "About to validate branches for valid names."
echo "Specifics here: https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html"
git check-ref-format --branch $PREVIOUS_BRANCH
git check-ref-format --branch $CURRENT_BRANCH
set +e
if [[ "$JDIFF_WORKING_DIRECTORY" = "" ]]; then
echo "JDIFF_WORKING_DIRECTORY not set. That's not an issue. We will default it to ./jidff"
JDIFF_WORKING_DIRECTORY=/tmp/jdiff
else
echo "JDIFF_WORKING_DIRECTORY set to $JDIFF_WORKING_DIRECTORY";
fi
mkdir -p $JDIFF_WORKING_DIRECTORY
scenario_template_name=hbase_jdiff_p-$PREVIOUS_BRANCH-c-$CURRENT_BRANCH.xml
cp ./hbase_jdiff_template.xml $JDIFF_WORKING_DIRECTORY/$scenario_template_name
cd $JDIFF_WORKING_DIRECTORY
echo "Beginning jdiff between the following two git repos"
echo "Starting with $PREVIOUS_REPO:$PREVIOUS_BRANCH to $CURRENT_REPO:$CURRENT_BRANCH"
### Pull down the 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
#Copy the template_template into the current working directory
### Configure the jdiff script
echo "Configuring the jdiff script"
sed -i "s]hbase_jdiff_report]hbase_jdiff_report-p-$PREVIOUS_BRANCH-c-$CURRENT_BRANCH]g" ./$scenario_template_name
sed -i "s]JDIFF_HOME_NAME]$JDIFF_HOME]g" ./$scenario_template_name
sed -i "s]OLD_BRANCH_NAME]$PREVIOUS_BRANCH]g" ./$scenario_template_name
sed -i "s]NEW_BRANCH_NAME]$CURRENT_BRANCH]g" ./$scenario_template_name
sed -i "s]V1]$PREVIOUS_BRANCH]g" ./$scenario_template_name
sed -i "s]V2]$CURRENT_BRANCH]g" ./$scenario_template_name
sed -i "s]JDIFF_FOLDER]$JDIFF_WORKING_DIRECTORY]g" ./$scenario_template_name
### Pull down the branches
echo "Pulling down the branches"
cat ./$scenario_template_name
### Previous Branch ###
echo "Pulling down previous branch"
rm -rf p-$PREVIOUS_BRANCH
mkdir -p p-$PREVIOUS_BRANCH
cd p-$PREVIOUS_BRANCH
git clone $PREVIOUS_REPO && cd hbase && git checkout origin/$PREVIOUS_BRANCH && cd ..
### Current Branch ###
echo "Pulling down current branch"
rm -rf ../c-$CURRENT_BRANCH
mkdir -p ../c-$CURRENT_BRANCH
cd ../c-$CURRENT_BRANCH
git clone $CURRENT_REPO && cd hbase && git checkout origin/$CURRENT_BRANCH && cd ..
cd ..
### Run the jdiff command
echo "Running jdiff"
echo "About to issue command to run jdiff";
ant -f ./$scenario_template_name
echo "jdiff operation complete. Report placed into $JDIFF_WORKING_DIRECTORY/hbase_jdiff_report-p-$PREVIOUS_BRANCH-c-$CURRENT_BRANCH/changes.html"

View File

@ -0,0 +1,232 @@
#!/bin/bash
set -e
# Licensed 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
#
#
############################################# 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 <repoUrl or local source directory 1> <branch or source name 1> <repoUrl or local source directory 2> <branch or source name 2>"
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
echo "JDIFF_WORKING_DIRECTORY not set. That's not an issue. We will default it to ./jidff"
JDIFF_WORKING_DIRECTORY=/tmp/jdiff
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
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";

View File

@ -0,0 +1,71 @@
#!/bin/bash
# Licensed 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
}