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:
parent
6d5a7fbebe
commit
353016c99d
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -35,11 +35,11 @@ This defaults to /tmp/jdiff but can optionally be specified by export $JDIFF_WOR
|
|||
stats="on">
|
||||
<old name="V1">
|
||||
<!-- 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>
|
||||
<new name="V2">
|
||||
<!-- 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>
|
||||
</jdiff>
|
||||
</target>
|
||||
|
|
|
@ -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"
|
|
@ -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";
|
||||
|
|
@ -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
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue