blob: fc0eba2b8a8c233992ed7c01759716d09a07597f [file]
#!/usr/bin/env bash
#-------------------------------------------------------------------
#
# UPDATE VERSION FOR OO
#
# usage: updateVersion.sh <version> <oo_path>
#
# params:
# version - the version to update the files to
# oo_path - the path to the OO files
#
#-------------------------------------------------------------------
version=$1
oo_path=$2
logfile=/tmp/updateVersion_$(date +%Y-%m-%d).log
configfile=$(dirname "$0")/updateVersion.config
exec > >(tee -ia ${logfile}) 2>&1
echo "***************************************************"
echo "STARTED UPDATING VERSIONS $(date)"
echo "***************************************************"
# validate params
if [[ -z ${version} && -z ${oo_path} ]]
then
echo "Missing both version and OO path. Exiting..."
echo "***************************************************"
echo "FINISHED UPDATING VERSIONS $(date)"
echo "***************************************************"
exit
fi
if [[ -z ${version} ]]
then
echo "Missing version. Exiting..."
echo "***************************************************"
echo "FINISHED UPDATING VERSIONS $(date)"
echo "***************************************************"
exit
else
if [[ ${version} =~ [^[:digit:].] ]]
then
echo "Invalid version format. It should be in the form x or x.x or x.x.x, where x is either a digit or a number. Exiting..."
echo "***************************************************"
echo "FINISHED UPDATING VERSIONS $(date)"
echo "***************************************************"
exit
fi
fi
# validate paths
if [[ -z ${oo_path} ]]
then
echo "Missing OO path, assuming current working directory. I will look here for files to modify..."
oo_path=.
fi
if [[ ! -d "${oo_path}/main" ]]
then
echo "${oo_path} does not contain a main subfolder. Exiting..."
echo "***************************************************"
echo "FINISHED UPDATING VERSIONS $(date)"
echo "***************************************************"
exit
fi
# validate config file
if [[ ! -r ${configfile} ]]
then
echo "${configfile} either does not exist or is not readable. Exiting..."
echo "***************************************************"
echo "FINISHED UPDATING VERSIONS $(date)"
echo "***************************************************"
exit
fi
files=()
patterns=()
while read line
do
if [[ ${line} == ---* ]]
then
filename=`echo ${line} | cut -d':' -f 2`
files+=("${filename:1}")
if [[ ! -z ${pattern} ]]
then
patterns+=("${pattern}")
pattern=""
fi
else
pattern=${pattern}" "${line}
fi
done < ${configfile}
patterns+=("${pattern}")
# echo "***************************************************"
# echo "found ${#files[@]} files and ${#patterns[@]} pattern groups"
# for (( i=0; i<${#files[@]}; i++ ))
# do
# echo "file: ${files[$i]}"
# echo "patterns: ${patterns[$i]}"
# done
echo "***************************************************"
for (( i=0; i<${#files[@]}; i++ ))
do
echo "*********************"
if [[ ${files[$i]} == */* ]]
then # files given as path, like odk/utils/makefile.pmk
filepath=`find ${oo_path} -path "*${files[$i]}"`
else # just the filename
filepath=`find ${oo_path} -type f -name ${files[$i]}`
fi
if [[ -z ${filepath} ]]
then
echo "File not found. Skipping..."
else
declare -i nbrFilesFound
nbrFilesFound=`echo ${filepath} | grep -o "${files[$i]}" | wc -l`
readarray -t filepaths <<< "${filepath}"
for (( f=0; f<${nbrFilesFound}; f++ ))
do
filepath=${filepaths[$f]}
echo "**********"
echo "updating file: ${filepath}"
for j in ${patterns[$i]}
do
# TYPE I substitution:
# -> the file is xml, we have name=<pattern> and value=<old_version>
# -> old_version will be updated
# -> ex. srcrelease.xml
if [[ ${files[$i]} == *.xml ]]
then
readarray -t lines < <(grep -w ${j} ${filepath} | grep -v -e '{' -e '(')
for (( s=0; s<${#lines[@]}; s++ ))
do
echo "line: ${lines[$s]}"
newline=`echo ${lines[$s]} | gsed -E "s|(value=\")[0-9]+.?[0-9]*.?[0-9]*(\")|\1${version}\2|"`
echo "newline: ${newline}"
gsed -E -i "s|(value=\")[0-9]+.?[0-9]*.?[0-9]*(\")|\1${version}\2|" ${filepath}
echo "**********"
done
#
# TYPE II substitution:
# -> the pattern is in the form <pattern>=<new_value>
# -> replace the old value of <pattern> with the <new_value>
# -> ex. minor.mk
elif [[ $j == *=* ]]
then
patt2brepl=`echo $j | cut -d'=' -f 1`
patt2replWith=`echo $j | cut -d'=' -f 2`
echo "pattern to be replaced: ${patt2brepl}"
echo "pattern to replace with: ${patt2replWith}"
if [[ ${patt2replWith} == *\(* && ${patt2replWith} == *\)* ]]
then
replStr=`grep -w ${patt2brepl} ${filepath} | tr '(' '+'`
replStr=`echo ${replStr} | tr ')' '+'`
gsed -E -i "s/(.*)${patt2brepl}.*/\1${replStr}/" ${filepath}
echo "temporarily changing file contents replStr ${replStr}"
fi
readarray -t lines < <(grep -w ${patt2brepl} ${filepath} | grep -v -e '{' -e '(')
for (( s=0; s<${#lines[@]}; s++ ))
do
echo "line: ${lines[$s]}"
newline=`echo ${lines[$s]} | gsed -E "s|(${patt2brepl} ?=? ?)[a-zA-Z0-9]+.?[a-zA-Z0-9]*.?[a-zA-Z0-9]*[+]*|\1${patt2replWith}|"`
echo "newline: ${newline}"
gsed -E -i "s|(${patt2brepl} ?=? ?)[a-zA-Z0-9]+.?[a-zA-Z0-9]*.?[a-zA-Z0-9]*[+]*|\1${patt2replWith}|" ${filepath}
echo "**********"
done
else
#
# TYPE III substitution:
# -> replace right-side pattern with new value
# -> ex. openoffice.lst
readarray -t lines < <(grep -w ${j} ${filepath} | grep -v -e '{' -e '(')
for (( s=0; s<${#lines[@]}; s++ ))
do
echo "line: ${lines[$s]}"
line=`echo ${lines[$s]} | awk '{$1=$1};1'`
patt2brepl=`echo ${line} | cut -d'=' -f 2`
if [[ ${patt2brepl} == ${line} ]]
then
patt2brepl=`echo ${line} | cut -d' ' -f 2`
fi
# search inside words for patterns like aoo412 or AOO4.1.2
insStrPatt=`echo ${patt2brepl} | egrep -w "[aA][oO][oO][0-9]+.?[0-9]*.?[0-9]*"`
if [[ ${patt2brepl} == ${insStrPatt} ]]
then
partAOO=`echo ${patt2brepl} | gsed -E -n "s|.*([aA][oO][oO])[0-9]+.?[0-9]*.?[0-9]*[^a-zA-Z/].*|\1|p"`
partVer=`echo ${patt2brepl} | gsed -E -n "s|.*([aA][oO][oO])([0-9]+.?[0-9]*.?[0-9]*[^a-zA-Z/]).*|\2|p"`
patt2brepl=${partVer}
fi
echo "patt2brepl: [${patt2brepl}]"
v0=`echo ${version} | cut -d'.' -f 1`
if [[ ${v0} != ${version} ]]
then
v1=`echo ${version} | cut -d'.' -f 2`
v2=`echo ${version} | cut -d'.' -f 3`
fi
p0=`echo ${patt2brepl} | cut -d'.' -f 1`
p1=`echo ${patt2brepl} | cut -d'.' -f 2`
p2=`echo ${patt2brepl} | cut -d'.' -f 3`
if [[ ${p0} == ${patt2brepl} ]] # right side is in the form x or xx (one or more numbers only)
then
declare -i nbr
nbr=${#patt2brepl}
if [[ ${nbr} -eq 1 ]] # right side is just x
then
newline=`echo ${line} | gsed -E "s|(${partAOO})[0-9]+.?[0-9]*.?[0-9]*[^a-zA-Z/]|\1${v0}|"`
else
if [[ ${nbr} -eq 2 ]] # right side is xx
then
if [[ ${p0}+1 -eq ${v0} ]] # right side + 1 is version
then
newline=`echo ${line} | gsed -E "s|(${partAOO})[0-9]+.?[0-9]*.?[0-9]*[^a-zA-Z/]|\1${v0}|"`
else
newline=`echo ${line} | gsed -E "s|(${partAOO})[0-9]+.?[0-9]*.?[0-9]*[^a-zA-Z/]|\1${v0}${v1}|"`
fi
else
newline=`echo ${line} | gsed -E "s|(${partAOO})[0-9]+.?[0-9]*.?[0-9]*[^a-zA-Z/]|\1${v0}${v1}${v2}|"`
fi
fi
elif [[ -z ${p2} ]] # right side is in the form x.x
then
if [[ -n ${v1} ]]
then
newline=`echo ${line} | gsed -E "s|(${partAOO})[0-9]+.?[0-9]*.?[0-9]*[^a-zA-Z/]|\1${v0}.${v1}|"`
else
newline=`echo ${line} | gsed -E "s|(${partAOO})[0-9]+.?[0-9]*.?[0-9]*[^a-zA-Z/]|\1${version}|"`
fi
else
newline=`echo ${line} | gsed -E "s|(${partAOO})[0-9]+.?[0-9]*.?[0-9]*[^a-zA-Z/]|\1${version}|"`
fi
echo "newline: ${newline}"
echo "**********"
gsed -E -i "s|${line}|${newline}|" ${filepath}
done
fi
done
done
fi
done
echo "***************************************************"
echo "FINISHED UPDATING VERSIONS $(date)"
echo "***************************************************"