Merge "Add script to use tempest-lib files in tempest"
This commit is contained in:
commit
a8a6f0334b
141
tools/use_tempest_lib.sh
Executable file
141
tools/use_tempest_lib.sh
Executable file
@ -0,0 +1,141 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Use this script to use interfaces/files from tempest-lib.
|
||||||
|
# Many files have been migrated to tempest-lib and tempest has
|
||||||
|
# its own copy too.
|
||||||
|
# This script helps to remove those from tempest and make use of tempest-lib.
|
||||||
|
# It adds the change-id of each file on which they were migrated in lib.
|
||||||
|
# This should only be done for files which were migrated to lib with
|
||||||
|
# "Migrated" in commit message as done by tempest-lib/tools/migrate_from_tempest.sh script.
|
||||||
|
# "Migrated" keyword is used to fetch the migration commit history from lib.
|
||||||
|
# To use:
|
||||||
|
# 1. Create a new branch in the tempest repo so not to destroy your current
|
||||||
|
# working branch
|
||||||
|
# 2. Run the script from the repo dir and specify the file paths relative to
|
||||||
|
# the root tempest dir(only code and unit tests):
|
||||||
|
#
|
||||||
|
# tools/use_tempest_lib.sh.sh tempest/file1.py tempest/file2.py
|
||||||
|
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "Usage: $0 [OPTION] file1 file2 .."
|
||||||
|
echo "Use files from tempest-lib"
|
||||||
|
echo -e "Input files should be tempest files with path. \n Example- tempest/file1.py tempest/file2.py .."
|
||||||
|
echo ""
|
||||||
|
echo "-s, --service_client Specify if files are service clients."
|
||||||
|
echo "-u, --tempest_lib_git_url Specify the repo to clone tempest-lib from."
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_all_files_valid {
|
||||||
|
failed=0
|
||||||
|
for file in $files; do
|
||||||
|
# Get the latest change-id for each file
|
||||||
|
latest_commit_id=`git log -n1 -- $file | grep "^commit" | awk '{print $2}'`
|
||||||
|
cd $tmpdir
|
||||||
|
filename=`basename $file`
|
||||||
|
lib_path=`find ./ -name $filename`
|
||||||
|
if [ -z $lib_path ]; then
|
||||||
|
echo "ERROR: $filename does not exist in tempest-lib."
|
||||||
|
failed=$(( failed + 1))
|
||||||
|
cd - > /dev/null
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# Get the CHANGE_ID of tempest-lib patch where file was migrated
|
||||||
|
migration_change_id=`git log -n1 --grep "Migrated" -- $lib_path | grep "Change-Id: " | awk '{print $2}'`
|
||||||
|
MIGRATION_IDS=`echo -e "$MIGRATION_IDS\n * $filename: $migration_change_id"`
|
||||||
|
# Get tempest CHANGE_ID of file which was migrated to lib
|
||||||
|
migrated_change_id=`git log -n1 --grep "Migrated" -- $lib_path | grep "* $filename"`
|
||||||
|
migrated_change_id=${migrated_change_id#*:}
|
||||||
|
cd - > /dev/null
|
||||||
|
# Get the commit-id of tempest which was migrated to tempest-lib
|
||||||
|
migrated_commit_id=`git log --grep "$migrated_change_id" -- $file | grep "^commit" | awk '{print $2}'`
|
||||||
|
DIFF=$(git diff $latest_commit_id $migrated_commit_id $file)
|
||||||
|
if [ "$DIFF" != "" ]; then
|
||||||
|
echo "ERROR: $filename in tempest has been updated after migration to tempest-lib. First sync the file to tempest-lib."
|
||||||
|
failed=$(( failed + 1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ $failed -gt 0 ]]; then
|
||||||
|
echo "$failed files had issues"
|
||||||
|
exit $failed
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
service_client=0
|
||||||
|
file_list=''
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
-h|--help) usage; exit;;
|
||||||
|
-u|--tempest_lib_git_url) tempest_lib_git_url="$2"; shift;;
|
||||||
|
-s|--service_client) service_client=1;;
|
||||||
|
*) files="$files $1";;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$files" ]; then
|
||||||
|
usage; exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
TEMPEST_LIB_GIT_URL=${tempest_lib_git_url:-git://git.openstack.org/openstack/tempest-lib}
|
||||||
|
|
||||||
|
tmpdir=$(mktemp -d -t use-tempest-lib.XXXX)
|
||||||
|
|
||||||
|
# Clone tempest-lib
|
||||||
|
git clone $TEMPEST_LIB_GIT_URL $tmpdir
|
||||||
|
|
||||||
|
# Checks all provided files are present in lib and
|
||||||
|
# not updated in tempest after migration to lib.
|
||||||
|
check_all_files_valid
|
||||||
|
|
||||||
|
for file in $files; do
|
||||||
|
rm -f $file
|
||||||
|
tempest_dir=`pwd`
|
||||||
|
tempest_dir="$tempest_dir/tempest/"
|
||||||
|
tempest_dirname=`dirname $file`
|
||||||
|
lib_dirname=`echo $tempest_dirname | sed s@tempest\/@tempest_lib/\@`
|
||||||
|
# Convert tempest dirname to import string
|
||||||
|
tempest_import="${tempest_dirname//\//.}"
|
||||||
|
tempest_import=${tempest_import:2:${#tempest_import}}
|
||||||
|
if [ $service_client -eq 1 ]; then
|
||||||
|
# Remove /json path because tempest-lib supports JSON only without XML
|
||||||
|
lib_dirname=`echo $lib_dirname | sed s@\/json@@`
|
||||||
|
fi
|
||||||
|
# Convert tempest-lib dirname to import string
|
||||||
|
tempest_lib_import="${lib_dirname//\//.}"
|
||||||
|
tempest_lib_import=${tempest_lib_import:2:${#tempest_lib_import}}
|
||||||
|
module_name=`basename $file .py`
|
||||||
|
tempest_import1="from $tempest_import.$module_name"
|
||||||
|
tempest_lib_import1="from $tempest_lib_import.$module_name"
|
||||||
|
tempest_import2="from $tempest_import import $module_name"
|
||||||
|
tempest_lib_import2="from $tempest_lib_import import $module_name"
|
||||||
|
set +e
|
||||||
|
grep -rl "$tempest_import1" $tempest_dir | xargs sed -i'' s/"$tempest_import1"/"$tempest_lib_import1"/g 2> /dev/null
|
||||||
|
grep -rl "$tempest_import2" $tempest_dir | xargs sed -i'' s/"$tempest_import2"/"$tempest_lib_import2"/g 2> /dev/null
|
||||||
|
set -e
|
||||||
|
if [[ -z "$file_list" ]]; then
|
||||||
|
file_list="$module_name"
|
||||||
|
else
|
||||||
|
tmp_file_list="$file_list, $module_name"
|
||||||
|
char_size=`echo $tmp_file_list | wc -c`
|
||||||
|
if [ $char_size -lt 27 ]; then
|
||||||
|
file_list="$file_list, $module_name"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -rf $tmpdir
|
||||||
|
echo "Completed. Run pep8 and fix error if any"
|
||||||
|
|
||||||
|
git add -A tempest/
|
||||||
|
# Generate a migration commit
|
||||||
|
commit_message="Use $file_list from tempest-lib"
|
||||||
|
pre_list=$"The files below have been migrated to tempest-lib\n"
|
||||||
|
pre_list=`echo -e $pre_list`
|
||||||
|
post_list=$"Now Tempest-lib provides those as stable interfaces. So Tempest should\nstart using those from lib and remove its own copy."
|
||||||
|
post_list=`echo -e $post_list`
|
||||||
|
|
||||||
|
git commit -m "$commit_message" -m "$pre_list" -m "$MIGRATION_IDS" -m "$post_list"
|
Loading…
x
Reference in New Issue
Block a user