diff --git a/Scripts/tcar.sh b/Scripts/tcar.sh new file mode 100755 index 0000000..815a79e --- /dev/null +++ b/Scripts/tcar.sh @@ -0,0 +1,197 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +declare -xr TCAR_SCRIPT_NAME="tcar" +declare -xr TCAR_SCRIPT_VERSION="0.9" + +###################################################################### +# Script Internationalization +###################################################################### + +# Set the script language information using the LC format. This format +# shows both language and country information (e.g., `es_ES'). +declare -xr TCAR_SCRIPT_LANG_LC=$(echo ${LANG} | cut -d'.' -f1) + +# Set the script language information using the LL format. This format +# shows only the language information (e.g., `es'). +declare -xr TCAR_SCRIPT_LANG_LL=$(echo ${TCAR_SCRIPT_LANG_LC} | cut -d'_' -f1) + +# Set the script language information using the CC format. This format +# shows only the country information (e.g., `ES'). +declare -xr TCAR_SCRIPT_LANG_CC=$(echo ${TCAR_SCRIPT_LANG_LC} | cut -d'_' -f2) + +# Set function environments required by GNU gettext system. +. gettext.sh + +###################################################################### +# Script Configuration Files (redefine global variables) +###################################################################### + +declare -xr TCAR_SCRIPT_CONFIGS="/etc/tcar/tcar.conf ${HOME}/.tcar.conf" +for TCAR_SCRIPT_CONFIG in ${TCAR_SCRIPT_CONFIGS};do + if [[ -f ${TCAR_SCRIPT_CONFIG} ]];then + . ${TCAR_SCRIPT_CONFIG} + fi +done + +###################################################################### +# Script Global Functions +###################################################################### + +# Export script's environment functions. +for SCRIPT_FILE in $(ls ${TCAR_SCRIPT_BASEDIR}/tcar_*.sh);do + if [[ -x ${SCRIPT_FILE} ]];then + . ${SCRIPT_FILE} + export -f $(grep '^function ' ${SCRIPT_FILE} | cut -d' ' -f2) + else + echo "${SCRIPT_FILE} `gettext "has not execution rights."`" + exit 1 + fi +done + +###################################################################### +# Signals +###################################################################### + +# Trap signals in order to terminate the script execution correctly +# (e.g., removing all temporal files before leaving). Trapping the +# exit signal seems to be enough by now, since it is always present as +# part of the script execution flow. Each time the tcar.sh +# script is executed it will inevitably end with an EXIT signal at +# some point of its execution, even if it is interrupted in the middle +# of its execution (e.g., through `Ctrl+C'). +trap tcar_terminateScriptExecution 0 + +###################################################################### +# Default Action +###################################################################### + +if [[ $# -eq 0 ]];then + tcar_printUsage +fi + +###################################################################### +# Parse Command-line Arguments +###################################################################### + +declare -x TCAR_MODULE_NAME='' +declare -x TCAR_MODULE_ARGUMENT='' +declare -x TCAR_SCRIPT_ARGUMENT='' + +# Retrieve module's name using the first argument of tcar.sh +# script as reference. +if [[ ! ${1} =~ '^-' ]];then + TCAR_MODULE_NAME="${1}"; shift 1 +else + TCAR_MODULE_NAME="" +fi + +# Initialize tcar.sh script specific options. The way tcar.sh script +# retrieves its options isn't as sophisticated (e.g., it doesn't +# provide valid-option verifications) as it is provided by getopt +# command. I cannot use getopt here because it is used already when +# loading module-specific options. Using more than one invocation of +# getopt in the same script is not possible (e.g., one of the +# invocations may enter in conflict with the other one when different +# option definitions are expected in the command-line.) +while true; do + + # Store non-option arguments passed to tcar.sh script. + if [[ ! ${1} =~ '^-' ]];then + TCAR_SCRIPT_ARGUMENT="${1} ${TCAR_SCRIPT_ARGUMENT}" + shift 1 + if [[ $# -gt 0 ]];then + continue + else + break + fi + fi + + case "${1}" in + + --help ) + + if [[ -z ${TCAR_MODULE_NAME} ]];then + tcar_printUsage + else + # Store the argument for further processing inside the + # module environment that will be executed later. + TCAR_MODULE_ARGUMENT="-g ${1} ${TCAR_MODULE_ARGUMENT}" + shift 1 + fi + ;; + + --version ) + + if [[ -z ${TCAR_MODULE_NAME} ]];then + tcar_printVersion + else + TCAR_MODULE_ARGUMENT="-g ${1} ${TCAR_MODULE_ARGUMENT}" + shift 1 + fi + ;; + + --quiet ) + + TCAR_FLAG_QUIET='true' + shift 1 + ;; + + --yes ) + + TCAR_FLAG_YES='true' + shift 1 + ;; + + --debug ) + + TCAR_FLAG_DEBUG='true' + shift 1 + ;; + + * ) + + # Store module-specific option arguments. This is, all + # arguments not considered part of tcar.sh script + # itself. The module-specific option arguments are passed, + # later, to getopt for option processing, inside the + # module-specific environments. + TCAR_MODULE_ARGUMENT="-g ${1} ${TCAR_MODULE_ARGUMENT}" + shift 1 + if [[ $# -gt 0 ]];then + continue + else + break + fi + ;; + esac +done + +# Initiate module-specific environment. +tcar_setModuleEnvironment -m "${TCAR_MODULE_NAME}" ${TCAR_MODULE_ARGUMENT} ${TCAR_SCRIPT_ARGUMENT} + +# At this point everything has been done without errors. So, exit +# tcar.sh script successfully. +exit 0 diff --git a/Scripts/tcar_checkFiles.sh b/Scripts/tcar_checkFiles.sh new file mode 100755 index 0000000..b69c9ea --- /dev/null +++ b/Scripts/tcar_checkFiles.sh @@ -0,0 +1,156 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardizes the way file conditional expressions are applied to +# files. Here is where tcar.sh script answers questions like: is the +# file a regular file or a directory? Or, is it a symbolic link? Or +# even, does it have execution rights, etc. If the verification fails +# somehow at any point, an error message is output and tcar.sh script +# finishes its execution. +function tcar_checkFiles { + + # Reset text domain locally, in order to prevent this function + # from using the last text domain definition. By default all + # common functions do use the same MO file. + local TEXTDOMAIN="${TCAR_SCRIPT_NAME}" + + # Initialize local array variables. + local -a CONDITION_COMMAND + local -a CONDITION_PATTERN + local -a CONDITION_MESSAGE + + # Initialize local counter. + local COUNTER=0 + + OPTIND=1 + while getopts "i:,r,m:,n,d,e,f,h,x" OPTION "${@}"; do + + case "${OPTION}" in + + d ) + CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' + CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-d' + CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't a directory."`" + ;; + + e ) + CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' + CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-e' + CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "doesn't exist."`" + ;; + + f ) + CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' + CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-f' + CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't a regular file."`" + ;; + + h ) + CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' + CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-h' + CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't a symbolic link."`" + ;; + + x ) + CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' + CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-x' + CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't an executable file."`" + ;; + + i ) + local MIME=${OPTARG} + CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/file' + CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-bi' + CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`eval_gettext "isn't a \\\"\\\$MIME\\\" file."`" + ;; + + m ) + CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='match' + CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]="${OPTARG}" + CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "doesn't match its pattern."`" + ;; + + n ) + CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]="/bin/rpm" + CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]="-q --quiet" + CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't installed in the system."`" + ;; + + esac + done + + # Clean up positional parameters to reflect the fact that options + # have been processed already. + shift $(( ${OPTIND} - 1 )) + + # Define list of files we want to apply verifications to, now that + # all option-like arguments have been removed from positional + # parameters list so we are free to go with the verifications. + local FILE='' + local FILES=${@} + + # Verify existence of files to prevent tcar.sh script from + # using the current location in cases when it shouldn't (e.g., + # here it is expecting a list of files to process.). + if [[ -z ${FILES} ]];then + tcar_printMessage "`gettext "No file for processing found."`" --as-error-line + fi + + for FILE in ${FILES};do + + until [[ ${COUNTER} -eq ${#CONDITION_PATTERN[*]} ]];do + + case ${CONDITION_COMMAND[${COUNTER}]} in + + "/usr/bin/test" | "/bin/rpm" ) + ${CONDITION_COMMAND[${COUNTER}]} ${CONDITION_PATTERN[${COUNTER}]} ${FILE} \ + || tcar_printMessage "${FILE} ${CONDITION_MESSAGE[${COUNTER}]}" --as-error-line + ;; + + "/usr/bin/file" ) + if [[ ! $(${CONDITION_COMMAND[${COUNTER}]} ${CONDITION_PATTERN[${COUNTER}]} ${FILE}) =~ "^${MIME}" ]];then + tcar_printMessage "${FILE} ${CONDITION_MESSAGE[${COUNTER}]}" --as-error-line + fi + ;; + + "match" ) + if [[ ! ${FILE} =~ "${CONDITION_PATTERN[${COUNTER}]}" ]];then + tcar_printMessage "${FILE} ${CONDITION_MESSAGE[${COUNTER}]}" --as-error-line + fi + ;; + + * ) + tcar_printMessage "`gettext "The condition command provided isn't supported."`" --as-error-line + ;; + + esac + + COUNTER=$((${COUNTER} + 1)) + + done + + done + +} diff --git a/Scripts/tcar_checkModuleName.sh b/Scripts/tcar_checkModuleName.sh new file mode 100755 index 0000000..51e06af --- /dev/null +++ b/Scripts/tcar_checkModuleName.sh @@ -0,0 +1,37 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Verify whether child and sibling modules do exist or not, based on +# module's based directory. +function tcar_checkModuleName { + + local TCAR_MODULE_LIST=$(ls ${TCAR_MODULE_BASEDIR} | tr '\n' '|' \ + | sed -r 's/\|$//' | tr '[[:upper:]]' '[[:lower:]]') + + tcar_printMessage "TCAR_MODULE_LIST : ${TCAR_MODULE_LIST}" --as-debugger-line + + tcar_checkFiles -m "^(${TCAR_MODULE_LIST})$" "${TCAR_MODULE_NAME}" + +} diff --git a/Scripts/tcar_checkRepoDirSource.sh b/Scripts/tcar_checkRepoDirSource.sh new file mode 100755 index 0000000..91e18e3 --- /dev/null +++ b/Scripts/tcar_checkRepoDirSource.sh @@ -0,0 +1,94 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardizes the path construction of directories inside the working +# copy, using absolute paths. This function transforms relative paths +# passed as non-option arguments to tcar.sh script command-line into +# absolute paths inside the working copy, based on whether you are +# using Subversion or Git as version control system. Further +# verifications, (e.g., whether they really exist as directories +# inside the working copy or not) should be realized outside this +# function. +# +# Use this function whenever you want to be sure non-option arguments +# passed to tcar.sh script command-line do always point to directories +# inside the working copy. Transforming relative paths into absolute +# paths, before processing them, is very useful when you need to +# execute the tcar.sh script as command (e.g., `tcar') anywhere on +# your workstation. +function tcar_checkRepoDirSource { + + local LOCATION=${1} + + # Remove any dot from arguments passed to tcar.sh script. + # This way it is possible to use a single dot to reflect the + # current location from which tcar.sh was executed. Notice + # that using a dot as argument is optional (e.g.: when you pass no + # argument to tcar command-line, the current location is + # used as default location). However, it might be useful to use a + # dot as argument when you want to include the current location in + # a list of arguments to process. Don't forget that dot slash can + # be used to refer locations relatively. + LOCATION=$(echo "${LOCATION}" | sed -r "s,^\.(/([[:alnum:]_/.-]+)?)?$,$(pwd)\1,g") + + # Remove the path to repository's base directory from location in + # order to avoid path duplications here. + LOCATION=$(echo "${LOCATION}" | sed "s,${TCAR_BASEDIR}/,,g") + + # When we use Git as version control system, there isn't a need of + # using the `trunk', `branches', `tags' convention we were using + # for Subversion. The working copy begins directly with the + # content of our repository (e.g., Documentation, Scripts, + # Identity and Locales). + # + # When we use Subversion as version control system, we follow the + # `trunk', `branches', `tags' convention to organize files inside + # the repository and need to redefine the source path in order to + # build the repository absolute path from the repository top level + # on. As convention, when you prepare your working copy through + # tcar.sh script, the absolute path to the `trunk/' + # directory is used as working copy. This is, path arguments + # provided to tcar.sh script will be interpreted from trunk/ + # directory level on. For example, the following command should + # work correctly in both Subversion and Git repositories: + # + # tcar render Documentation/Manuals/Docbook/Tcar-ug + # + # There isn't a need of verifying the paths built here. This is + # something we do later, using the tcar_checkFiles function. We + # don't do the file verification here to avoid malformed error + # messages when we reassign variable values using this function as + # reference (e.g., in order to prevent error messages from being + # stored inside variables.). + LOCATION=${TCAR_BASEDIR}/${LOCATION} + + # Remove trailing slashes passed as argument. The single slash + # form is used to refer the repository's root directory. The + # single slash form passed as argument of tcar.sh script is + # useful to execute commands over the + # entire repository tree. + echo "${LOCATION}" | sed -r -e 's,/+,/,g' -e 's,/+$,,g' + +} diff --git a/Scripts/tcar_checkWorkDirSource.sh b/Scripts/tcar_checkWorkDirSource.sh new file mode 100755 index 0000000..118460f --- /dev/null +++ b/Scripts/tcar_checkWorkDirSource.sh @@ -0,0 +1,55 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Prepare non-option arguments passed through the command-line for +# further processing. When the argument provided is not an absolute +# path this function transforms it into an absolute path using the +# current working directory. +function tcar_checkWorkDirSource { + + local LOCATION=${1} + + # Append the current working directory when the location provided + # isn't absolute. + if [[ ! ${LOCATION} =~ '^/' ]];then + LOCATION=${PWD}/${LOCATION} + fi + + # Remove both consecutive slashes and trailing slashes from final + # location. + echo "${LOCATION}" | sed -r -e 's,/+,/,g' -e 's,/+$,,g' + + # The single slash form doesn't point to repository's root + # directory anymore. Instead, when a single slash is passed + # as argument through the command-line, it preserves its regular + # meaning which is pointing the workstation's file system. + + # The path verification isn't appropriate here because this + # function is commonly used inside variable assignments and flow + # control doesn't take place in such situation. In case path + # verification fails here, the script wouldn't end its execution + # which contradicts the expected behaviour. + +} diff --git a/Scripts/tcar_getConfigLines.sh b/Scripts/tcar_getConfigLines.sh new file mode 100755 index 0000000..6cd9179 --- /dev/null +++ b/Scripts/tcar_getConfigLines.sh @@ -0,0 +1,64 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way configuration lines are retrieved form +# configuration files. As arguments, the configuration file absolute +# path, the configuration section name, and the configuration option +# name must be provided. +function tcar_getConfigLines { + + # Initialize absolute path to configuration file. + local CONFIGURATION_FILE="${1}" + + # Initialize configuration section name where the variable value + # we want to to retrieve is set in. + local CONFIGURATION_SECTION="${2}" + + # Initialize variable name we want to retrieve value from. + local CONFIGURATION_OPTION="${3}" + + # Verify configuration variable name. When no variable name is + # provided print all configuration lines that can be considered as + # well-formed paths. Be sure configuration variable name starts + # just at the beginning of the line. + if [[ ! ${CONFIGURATION_OPTION} =~ '^[[:alnum:]_./-]+$' ]];then + CONFIGURATION_OPTION='[[:alnum:]_./-]+[[:space:]]*=' + fi + + # Retrieve configuration lines from configuration file. Don't sort + # the value of this value so as to preserve the order given in the + # configuration file. This is important because configuration + # files are being used for setting render-from priorities. + local CONFIGURATION_LINES=$(cat ${CONFIGURATION_FILE} \ + | egrep -v '^#' \ + | egrep -v '^[[:space:]]*$' \ + | sed -r -n "/^\[${CONFIGURATION_SECTION}\][[:space:]]*$/,/^\[/p" \ + | egrep -v '^\[' \ + | egrep "^${CONFIGURATION_OPTION}") + + # Output value related to variable name. + echo "${CONFIGURATION_LINES}" + +} diff --git a/Scripts/tcar_getConfigSectionNames.sh b/Scripts/tcar_getConfigSectionNames.sh new file mode 100755 index 0000000..b573dd7 --- /dev/null +++ b/Scripts/tcar_getConfigSectionNames.sh @@ -0,0 +1,50 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way section names are retrieved from configuration +# files. Once section names are retrieved they are printed to standard +# output for further processing. +function tcar_getConfigSectionNames { + + # Define absolute path to configuration file we want to retrieve + # section names from. + local CONFIGURATION_FILE=${1} + + # Verify existence of configuration file. + tcar_checkFiles -ef ${CONFIGURATION_FILE} + + # Define regular expression pattern used to retrieve section names + # from configuration files. Don't permit any regular expression + # meta-character either. + local CONFIGURATION_SECTION_REGEX='^\[[[:alnum:]_.-]+\][[:space:]]*$' + + # Output all section names without brackets, one per line. Don't + # permit any kind of expansion here. Section names are used as + # reference to retrieve information from configuration file, + # expanding them would create different points of verifications. + egrep ${CONFIGURATION_SECTION_REGEX} ${CONFIGURATION_FILE} \ + | sed -r 's,\[(.+)\],\1,' + +} diff --git a/Scripts/tcar_getConfigValue.sh b/Scripts/tcar_getConfigValue.sh new file mode 100755 index 0000000..91444c0 --- /dev/null +++ b/Scripts/tcar_getConfigValue.sh @@ -0,0 +1,50 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way configuration values are retrieved from +# configuration files. As arguments, the configuration file absolute +# path, the configuration section name, and the configuration option +# name must be provided. +function tcar_getConfigValue { + + local CONFIGURATION_FILE="${1}" + + local CONFIGURATION_SECTION="${2}" + + local CONFIGURATION_OPTION="${3}" + + local CONFIGURATION_LINES=$(tcar_getConfigLines \ + "${CONFIGURATION_FILE}" "${CONFIGURATION_SECTION}" "${CONFIGURATION_OPTION}") + + for CONFIGURATION_LINE in "${CONFIGURATION_LINES}";do + + local CONFIGURATION_VALUE=$(echo "${CONFIGURATION_LINE}" \ + | cut -d= -f2- | sed -r -e 's/"//g' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') + + eval echo ${CONFIGURATION_VALUE} + + done + +} diff --git a/Scripts/tcar_getFileExtension.sh b/Scripts/tcar_getFileExtension.sh new file mode 100755 index 0000000..e2d9f77 --- /dev/null +++ b/Scripts/tcar_getFileExtension.sh @@ -0,0 +1,31 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Retrieve the extension of a file. +function tcar_getFileExtension { + + basename ${1} | sed -r 's/.+\.([[:alnum:]]+)$/\1/' + +} diff --git a/Scripts/tcar_getFileName.sh b/Scripts/tcar_getFileName.sh new file mode 100755 index 0000000..68f42ef --- /dev/null +++ b/Scripts/tcar_getFileName.sh @@ -0,0 +1,31 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Retrieve the name of a file. +function tcar_getFileName { + + basename ${1} | sed -r 's/\.([[:alnum:]]+)$//' + +} diff --git a/Scripts/tcar_getFilesList.sh b/Scripts/tcar_getFilesList.sh new file mode 100755 index 0000000..ee7f304 --- /dev/null +++ b/Scripts/tcar_getFilesList.sh @@ -0,0 +1,97 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way list of files are built inside tcar.sh script. +# This function outputs a sorted and unique list of files based on the +# options and locations passed as argument. +function tcar_getFilesList { + + # Initialize pattern used to reduce the find output. + local PATTERN="${TCAR_FLAG_FILTER}" + + # Initialize options used with find command. + local OPTIONS='' + + OPTIND=1 + while getopts "p:,a:,i:,t:,u:" OPTION "${@}"; do + + case "${OPTION}" in + p ) + PATTERN="${OPTARG}" + ;; + a ) + OPTIONS="${OPTIONS} -maxdepth ${OPTARG}" + ;; + i ) + OPTIONS="${OPTIONS} -mindepth ${OPTARG}" + ;; + t ) + OPTIONS="${OPTIONS} -type ${OPTARG}" + ;; + u ) + OPTIONS="${OPTIONS} -uid ${OPTARG}" + ;; + esac + + done + + # Clean up positional parameters to reflect the fact that options + # have been processed already. + shift $(( ${OPTIND} - 1 )) + + # At this point all options arguments have been processed and + # removed from positional parameters. Only non-option arguments + # remain so we use them as source location for find command to + # look files for. + + # Verify that locations does exist. + tcar_checkFiles -e ${@} + + # Redefine pattern as regular expression. When we use regular + # expressions with find, regular expressions are evaluated against + # the whole file path. This way, when the regular expression is + # specified, we need to build it in a way that matches the whole + # path we are using. Doing so, every time we pass the `--filter' + # option in the command-line could be a tedious task. Instead, in + # the sake of reducing some typing, we prepare the regular + # expression here to match the whole path using the regular + # expression provided by the user as pattern. Do not use locations + # as part of regular expression so it could be possible to use + # path expansion. Using path expansion reduce the amount of + # places to find out things and so the time required to finish the + # task. + # + # Don't do such path expansion here. Instead, do it when you call + # this function. Otherwise you would be prohibiting the + # application of exact patterns. + #PATTERN="^/.*${PATTERN}$" + + # Define list of files to process. At this point we cannot verify + # whether the location is a directory or a file since path + # expansion could be introduced to it. The best we can do is + # verifying exit status and go on. + find ${@} -regextype posix-egrep ${OPTIONS} -regex "${PATTERN}" | sort | uniq + +} diff --git a/Scripts/tcar_getPathComponent.sh b/Scripts/tcar_getPathComponent.sh new file mode 100755 index 0000000..eb4a71d --- /dev/null +++ b/Scripts/tcar_getPathComponent.sh @@ -0,0 +1,125 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way directory structures are organized inside the +# working copy of CentOS Artwork Repository. You can use this function +# to retrieve information from paths (e.g., releases, architectures +# and theme artistic motifs) or the patterns used to build the paths. +function tcar_getPathComponent { + + # Define release pattern. + local VERSION="(([[:digit:]]+)(\.([[:digit:]]+))?)" + + # Define architecture pattern. Make it match the architectures the + # CentOS distribution is able to be installed on. + local ARCHITECTURE="(i386|x86_64)" + + # Define regular expression pattern that match the theme artistic + # motif component inside the path strings. + local THEME_MOTIF="Themes/Motifs/(([[:alnum:]]+)/(${VERSION}))" + + # Define location we want to apply verifications to. + local LOCATION=${1} + + # Remove location from positional parameters, so only the option + # remain. + shift 1 + + # Look for options passed through positional parameters. + while true;do + + case "${1}" in + + --release ) + echo "${LOCATION}" | egrep "${VERSION}" | sed -r "s!.*/${VERSION}/.*!\1!" + shift 1 + break + ;; + + --release-major ) + echo "${LOCATION}" | egrep "${VERSION}" | sed -r "s!.*/${VERSION}/.*!\2!" + shift 1 + break + ;; + + --release-minor ) + echo "${LOCATION}" | egrep "${VERSION}" | sed -r "s!.*/${VERSION}/.*!\4!" + shift 1 + break + ;; + + --release-pattern ) + echo "${VERSION}" + shift 1 + break + ;; + + --architecture ) + echo "${LOCATION}" | egrep "${ARCHITECTURE}" | sed -r "s!${ARCHITECTURE}!\1!" + shift 1 + break + ;; + + --architecture-pattern ) + echo "${ARCHITECTURE}" + shift 1 + break + ;; + + --motif ) + echo "${LOCATION}" | egrep "${THEME_MOTIF}" | sed -r "s!.*${THEME_MOTIF}.*!\1!" + shift 1 + break + ;; + + --motif-name ) + echo "${LOCATION}" | egrep "${THEME_MOTIF}" | sed -r "s!.*${THEME_MOTIF}.*!\2!" + shift 1 + break + ;; + + --motif-version ) + echo "${LOCATION}" | egrep "${THEME_MOTIF}" | sed -r "s!.*${THEME_MOTIF}.*!\3!" + shift 1 + break + ;; + + --motif-pattern ) + echo "${THEME_MOTIF}" + shift 1 + break + ;; + + --repo-dir ) + echo "${LOCATION}" | sed "s,${TCAR_USER_WRKDIR}/,," + shift 1 + break + ;; + + esac + + done + +} diff --git a/Scripts/tcar_getRepoName.sh b/Scripts/tcar_getRepoName.sh new file mode 100755 index 0000000..144c29a --- /dev/null +++ b/Scripts/tcar_getRepoName.sh @@ -0,0 +1,134 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize files and directories name convection inside the working +# copy of CentOS Artwork Repository. As convection, regular files are +# written in lower-case and directories are written capitalized. Use +# this function to sanitate the name of regular files and directories +# on paths you work with. +function tcar_getRepoName { + + # Define the name we want to apply verifications to. + local NAME="${1}" + + # Avoid using options as it were names. When name value is empty + # but an option is provided, the option becomes the first + # positional argument and is evaluated as it were a name which is + # something we need to prevent from happening. + if [[ ${NAME} =~ '^-' ]];then + return + fi + + # Look for options passed through positional parameters. + case "${2}" in + + -f|--basename ) + + # Reduce the path passed to use just the non-directory + # part of it (i.e., the last component in the path; _not_ + # the last "real" directory in the path). + NAME=$(basename ${NAME}) + + # Clean value. + NAME=$(echo ${NAME} \ + | tr -s ' ' '_' \ + | tr '[:upper:]' '[:lower:]') + ;; + + -d|--dirname ) + + local DIR='' + local DIRS='' + local CLEANDIRS='' + local PREFIXDIR='' + + # In order to sanitate each directory in a path, it is + # required to break off the path string so each component + # can be worked out individually and later combine them + # back to create a clean path string. + + # Reduce path information passed to use the directory part + # of it only. Of course, this is applied if there is a + # directory part in the path. Assuming there is no + # directory part but a non-empty value in the path, use + # that value as directory part and clean it up. + if [[ ${NAME} =~ '.+/.+' ]];then + + # When path information is reduced, we need to + # consider that absolute paths contain some + # directories outside the working copy directory + # structure that shouldn't be sanitized (e.g., /home, + # /home/centos, /home/centos/artwork, + # /home/centos/artwork/turnk, trunk, etc.) So, we keep + # them unchanged for later use. + PREFIXDIR=$(echo ${NAME} \ + | sed -r "s,^((${TCAR_USER_WRKDIR}/)?(trunk|branches|tags)/)?.+$,\1,") + + # ... and remove them from the path information we do + # want to sanitate. + DIRS=$(dirname "${NAME}" \ + | sed -r "s!^${PREFIXDIR}!!" \ + | tr '/' ' ') + + else + + # At this point, there is not directory part in the + # information passed, so use the value passed as + # directory part as such. + DIRS=${NAME} + + fi + + for DIR in ${DIRS};do + + # Sanitate directory component. + if [[ ${DIR} =~ '^[a-z]' ]];then + DIR=$(echo ${DIR} \ + | tr -s ' ' '_' \ + | tr '[:upper:]' '[:lower:]' \ + | sed -r 's/^([[:alpha:]])/\u\1/') + fi + + # Rebuild path using sanitized values. + CLEANDIRS="${CLEANDIRS}/${DIR}" + + done + + # Redefine path using sanitized values. + NAME=$(echo ${CLEANDIRS} | sed -r "s!^/!!") + + # Add prefix directory information to sanitate path + # information. + if [[ "${PREFIXDIR}" != '' ]];then + NAME=${PREFIXDIR}${NAME} + fi + ;; + + esac + + # Print out the clean path string. + echo ${NAME} + +} diff --git a/Scripts/tcar_getTemporalFile.sh b/Scripts/tcar_getTemporalFile.sh new file mode 100755 index 0000000..557b46d --- /dev/null +++ b/Scripts/tcar_getTemporalFile.sh @@ -0,0 +1,52 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Output the absolute path you need to use to create temporal files to +# standard output. Use this function whenever you need to create new +# temporal files inside tcar.sh script. +function tcar_getTemporalFile { + + # Reset text domain locally, in order to prevent this function + # from using the last text domain definition. By default all + # common functions do use the same MO file. + local TEXTDOMAIN="${TCAR_SCRIPT_NAME}" + + # Define base name for temporal file. This is required when svg + # instances are created previous to be parsed by inkscape in order + # to be exported as png. In such cases .svg file extension is + # required in order to avoid complains from inkscape. + local FILENAME="${RANDOM}${RANDOM}-$(tcar_getRepoName ${1} -f)" + + # Check default base name for temporal file, it can't be an empty + # value. + if [[ -z "${FILENAME}" ]];then + tcar_printMessage "`gettext "The first argument cannot be empty."`" --as-error-line + fi + + # Define absolute path for temporal file and send it out to + # standard output. + echo "${TCAR_SCRIPT_TEMPDIR}/${FILENAME}" + +} diff --git a/Scripts/tcar_printCaller.sh b/Scripts/tcar_printCaller.sh new file mode 100755 index 0000000..7fd0c16 --- /dev/null +++ b/Scripts/tcar_printCaller.sh @@ -0,0 +1,55 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way caller information is retrieved. +function tcar_printCaller { + + local EXPR=${1} + local OPTS=${2} + + case ${OPTS} in + + --line ) + caller ${EXPR} | gawk '{ print $1 }' + ;; + + --name ) + caller ${EXPR} | gawk '{ print $2 }' + ;; + + --path ) + caller ${EXPR} | gawk '{ print $3 }' + ;; + + * ) + # Define where the error was originated inside the + # tcar.sh script. Print out the function name and + # line from the caller. + caller ${EXPR} | gawk '{ print $2 " L." $1 }' + ;; + + esac + +} diff --git a/Scripts/tcar_printCopyrightInfo.sh b/Scripts/tcar_printCopyrightInfo.sh new file mode 100755 index 0000000..54eb28e --- /dev/null +++ b/Scripts/tcar_printCopyrightInfo.sh @@ -0,0 +1,133 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the copyright information printed on content produced by +# tcar.sh script. +# +# As far as I understand, the copyright exists to make people create +# more. The copyright gives creators the legal power over their +# creations and so the freedom to distribute them under the ethical +# terms the creator considers better. At this moment I don't feel +# very confident about this legal affairs and their legal +# implications, but I need to decide what copyright information the +# tcar.sh script will print out when someone request information about +# it. So, in that sake, I am using The CentOS Artwork SIG as +# copyright holder and the GNU Public License, version 2 or any later, +# for software distribution. +function tcar_printCopyrightInfo { + + # Reset text domain locally, in order to prevent this function + # from using the last text domain definition. By default all + # common functions do use the same MO file. + local TEXTDOMAIN="${TCAR_SCRIPT_NAME}" + + case "${1}" in + + --license ) + + # Print the license name. + echo "`gettext "Creative Common Attribution-ShareAlike 3.0 License"`" + ;; + + --license-url ) + + # Print the url related to license name. + tcar_printUrl --cc-sharealike + ;; + + --first-year ) + + # The former year when I (as collaborator of The CentOS + # Project) started to consolidate The CentOS Project + # Corporate Visual Identity through the CentOS Artwork + # Repository. + echo '2009' + ;; + + --year|--last-year) + + # The software release year. + echo 2014 + ;; + + --years-range ) + + local FIRST_YEAR=$(tcar_printCopyrightInfo --first-year) + local LAST_YEAR=$(tcar_printCopyrightInfo --last-year) + echo "${FIRST_YEAR}-${LAST_YEAR}" + ;; + + --years-list ) + + local FIRST_YEAR=$(tcar_printCopyrightInfo --first-year) + local LAST_YEAR=$(tcar_printCopyrightInfo --last-year) + + # Define full copyright year string based on first and + # last year. + local FULL_YEAR=$(\ + while [[ ${FIRST_YEAR} -le ${LAST_YEAR} ]];do + echo -n "${FIRST_YEAR}, " + FIRST_YEAR=$((${FIRST_YEAR} + 1)) + done) + + # Prepare full copyright year string and print it out. + echo "${FULL_YEAR}" | sed 's!, *$!!' + ;; + + --holder ) + + # Print tcar.sh script default copyright holder. Be + # pragmatic about this information, please. The CentOS + # Project exists to produce The CentOS Distribution, not + # tcar.sh script. Nevertheless, The CentOS Artwork SIG is + # an organizational unit of The CentOS Project which is + # focused on producing The CentOS Project corporate visual + # identity, by means of The CentOS Artwork Repository. + # The tcar.sh script automates frequent tasks inside The + # CentOS Artwork Repository so, based on these + # considerations, the copyright holder of the tcar.sh + # script is "closer" to be The CentOS Artwork SIG than it + # would be The CentOS Project. These are the logical + # choosing ideas behind the copyright holder of tcar.sh + # script. + echo "`gettext "The CentOS Artwork SIG"`" + ;; + + --holder-predicate ) + + local HOLDER=$(tcar_printCopyrightInfo --holder) + echo "${HOLDER}. `gettext "All rights reserved."`" + ;; + + * ) + + local YEAR=$(tcar_printCopyrightInfo --last-year) + local HOLDER=$(tcar_printCopyrightInfo --holder) + echo "Copyright © ${YEAR} ${HOLDER}" + ;; + + esac + +} diff --git a/Scripts/tcar_printFile.sh b/Scripts/tcar_printFile.sh new file mode 100755 index 0000000..3502656 --- /dev/null +++ b/Scripts/tcar_printFile.sh @@ -0,0 +1,45 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way files are concatenated inside tcar.sh script. +function tcar_printFile { + + # Define absolute path to file you want to print. Take into + # consideration that this file might be out of the repository + # (e.g., it would be a temporal file stored under + # /tmp/tcar-XXXXXX/ directory). + local FILE="${1}" + + tcar_checkFiles -ef ${FILE} + + if [[ $(/usr/bin/file -b -i ${FILE}) =~ '^application/x-gzip$' ]];then + /bin/zcat ${FILE} + elif [[ $(/usr/bin/file -b -i ${FILE}) =~ '^application/x-bzip2$' ]];then + /bin/bzcat ${FILE} + else + /bin/cat ${FILE} + fi + +} diff --git a/Scripts/tcar_printHelp.sh b/Scripts/tcar_printHelp.sh new file mode 100755 index 0000000..3301eb5 --- /dev/null +++ b/Scripts/tcar_printHelp.sh @@ -0,0 +1,54 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way tcar.sh script prints help about itself. +function tcar_printHelp { + + # Retrieve the man page name. This is the file name you want to retrieve + # documentation for. This value is optional. When it is not passed, the + # module name is used. + local TCAR_MANPAGE_NAME="${1:-${TCAR_MODULE_NAME}}" + + # When the module name has not been set and the tcar_printHelp + # function is called from tcar.sh file, the page name come + # with with --help as opening string and probably as + # --help=filename.sh. In the first case it prints the script + # documentation. In the second case it prints documentation for + # the file specified. + if [[ -z ${TCAR_MODULE_NAME} ]];then + if [[ ${TCAR_MANPAGE_NAME} =~ '^--help=[[:alnum:]_-.]+' ]];then + TCAR_MANPAGE_NAME=$(echo ${TCAR_MANPAGE_NAME} | cut -d'=' -f2) + else + TCAR_MANPAGE_NAME=${TCAR_SCRIPT_NAME} + fi + fi + + # Print requested documentation. + /usr/bin/man -M ${TCAR_SCRIPT_DIR_MANUALS}:${TCAR_MODULE_DIR_MANUALS}/Final "${TCAR_MANPAGE_NAME}" + + # Finish script execution successfully. + exit 0 + +} diff --git a/Scripts/tcar_printMailingList.sh b/Scripts/tcar_printMailingList.sh new file mode 100755 index 0000000..59f6104 --- /dev/null +++ b/Scripts/tcar_printMailingList.sh @@ -0,0 +1,76 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way mailing list addresses are printed on content +# produced by tcar.sh script. +function tcar_printMailingList { + + local MAILADDRS='' + + # Define short options. + local ARGSS='' + + # Define long options. + local ARGSL='as-html-link:,docs' + + # Initialize arguments with an empty value and set it as local + # variable to this function scope. Doing this is very important to + # avoid any clash with higher execution environments. + local TCAR_MODULE_ARGUMENT='' + + # Process all arguments currently available in this function + # environment. If either ARGSS or ARGSL local variables have been + # defined, argument processing goes through getopt for validation. + tcar_setModuleArguments "${@}" + + # Redefine positional parameters using TCAR_MODULE_ARGUMENT variable. + eval set -- "${TCAR_MODULE_ARGUMENT}" + + # Look for options passed through command-line. + while true; do + case "${1}" in + + --docs ) + MAILADDRS="${TCAR_BRAND}-docs@$(tcar_printUrl --domain)" + shift 1 + ;; + + --as-html-link ) + MAILADDRS="${2}" + shift 2 + ;; + + -- ) + + shift 1 + break + ;; + esac + done + + # Print mail address. + echo "${MAILADDRS}" + +} diff --git a/Scripts/tcar_printMessage.sh b/Scripts/tcar_printMessage.sh new file mode 100755 index 0000000..c60bb98 --- /dev/null +++ b/Scripts/tcar_printMessage.sh @@ -0,0 +1,303 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way messages are printed by tcar.sh script. +function tcar_printMessage { + + # Reset text domain locally, in order to prevent this function + # from using the last text domain definition. By default all + # common functions do use the same MO file. + local TEXTDOMAIN="${TCAR_SCRIPT_NAME}" + + local MESSAGE="${1}" + local FORMAT="${2}" + + # Verify message variable, it cannot have an empty value. + if [[ -z ${MESSAGE} ]];then + tcar_printMessage "`gettext "The message cannot be empty."`" --as-error-line + fi + + # Define message horizontal width. This is the max number of + # horizontal characters the message will use to be displayed on + # the screen. + local MESSAGE_WIDTH=66 + + # Remove empty spaces from message. + #MESSAGE=$(printf %s "${MESSAGE}" | sed -r -e 's!^[[:space:]]+!!') + + # Print messages that will always be printed no matter what value + # the TCAR_FLAG_QUIET variable has. + case "${FORMAT}" in + + --as-stdout-line* ) + + local MARGIN_LEFT=15 + if [[ ${FORMAT} =~ '--as-stdout-line=[[:digit:]]+' ]];then + MARGIN_LEFT=$(echo ${FORMAT} | cut -d'=' -f2) + fi + + # Default printing format. This is the format used when no + # other specification is passed to this function. As + # convenience, we transform absolute paths into relative + # paths in order to free horizontal space on final output + # messages. + printf %s "${MESSAGE}" | sed -r \ + -e "s!${TCAR_BASEDIR}/!!g" \ + -e "s!> /!> !g" \ + -e "s!/{2,}!/!g" \ + | gawk 'BEGIN { FS=": " } + { + if ( $0 ~ /^-+$/ ) + print $0 + else + printf "%-'${MARGIN_LEFT}'s\t%s\n", $1, $2 + } + END {}' + ;; + + --as-error-line ) + + # Build the error trail. This is very useful for tracking + # the error down. + tcar_printMessage '-' --as-separator-line + tcar_printMessage "${FUNCNAME[*]}" --as-tree-line + + # Build the error message. + tcar_printMessage '-' --as-separator-line + tcar_printMessage "$(tcar_printCaller 1) ${MESSAGE}" --as-stderr-line + tcar_printMessage '-' --as-separator-line + + # Finish script execution with exit status 1 (SIGHUP) to + # imply the script finished because an error. We are + # using this as convention to finish the script execution. + # So, don't remove the following line, please. + exit 1 + ;; + + --as-debugger-line ) + if [[ ${TCAR_FLAG_DEBUG} == 'true' ]];then + tcar_printMessage "$(date +"%c") ${MESSAGE}" --as-stdout-line=60 + else + return + fi + ;; + + --as-tree-line ) + local NAME + local -a FN + for NAME in ${MESSAGE};do + FN[++((${#FN[*]}))]=${NAME} + done + local COUNT=$(( ${#FN[*]} - 2 )) + local SEPARATOR='`--' + local SPACES=0 + echo "${TCAR_SCRIPT_BASEDIR}/${TCAR_SCRIPT_NAME}" 1>&2 + while [[ ${COUNT} -gt 0 ]];do + if [[ ${COUNT} -eq $(( ${#FN[*]} - 2 )) ]];then + echo ${SEPARATOR} ${FN[${COUNT}]} 1>&2 + else + echo ${FN[${COUNT}]} \ + | gawk '{ printf "%'${SPACES}'s%s %s\n", "", "'${SEPARATOR}'", $1 }' 1>&2 + fi + COUNT=$((${COUNT} - 1)) + SPACES=$((${SPACES} + 4)) + done + ;; + + --as-toknowmore-line ) + tcar_printMessage "`gettext "To know more, run"` ${TCAR_SCRIPT_NAME} ${MESSAGE} --help" --as-stderr-line + ;; + + --as-yesornorequest-line ) + + # Define positive answer. + local Y="`gettext "yes"`" + + # Define negative answer. + local N="`gettext "no"`" + + # Define default answer. + local ANSWER=${N} + + if [[ ${TCAR_FLAG_YES} == 'true' ]];then + + ANSWER=${Y} + + else + + # Print the question to standard error. + tcar_printMessage "${MESSAGE} [${Y}/${N}]" --as-request-line + + # Redefine default answer based on user's input. + read ANSWER + + fi + + # Verify user's answer. Only positive answer let the + # script flow to continue. Otherwise, if something + # different from positive answer is passed, the script + # terminates its execution immediately. + if [[ ! ${ANSWER} =~ "^${Y}" ]];then + exit + fi + ;; + + --as-selection-line ) + # Create selection based on message. + local NAME='' + select NAME in ${MESSAGE};do + echo ${NAME} + break + done + ;; + + --as-response-line ) + tcar_printMessage "--> ${MESSAGE}" --as-stderr-line + ;; + + --as-request-line ) + tcar_printMessage "${MESSAGE}:\040" --as-notrailingnew-line + ;; + + --as-notrailingnew-line ) + echo -e -n "${MESSAGE}" | sed -r \ + -e "s!${TCAR_BASEDIR}/!!g" 1>&2 + ;; + + --as-stderr-line ) + echo "${MESSAGE}" | sed -r \ + -e "s!${TCAR_BASEDIR}/!!g" 1>&2 + ;; + + esac + + # Verify quiet option. The quiet option controls whether messages + # are printed or not. + if [[ "${TCAR_FLAG_QUIET}" == 'true' ]];then + return + fi + + # Print messages that will be printed only when the TCAR_FLAG_QUIET + # variable is provided to tcar.sh script. + case "${FORMAT}" in + + --as-separator-line ) + + # Build the separator line. + MESSAGE=$(\ + until [[ ${MESSAGE_WIDTH} -eq 0 ]];do + echo -n "$(echo ${MESSAGE} | sed -r 's!(.).*!\1!')" + MESSAGE_WIDTH=$((${MESSAGE_WIDTH} - 1)) + done) + + # Draw the separator line. + echo "${MESSAGE}" 1>&2 + ;; + + --as-banner-line ) + tcar_printMessage '-' --as-separator-line + tcar_printMessage "${MESSAGE}" --as-stdout-line + tcar_printMessage '-' --as-separator-line + ;; + + --as-processing-line ) + tcar_printMessage "`gettext "Processing"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-cropping-line ) + tcar_printMessage "`gettext "Cropping from"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-tuningup-line ) + tcar_printMessage "`gettext "Tuning-up"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-checking-line ) + tcar_printMessage "`gettext "Checking"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-combining-line ) + tcar_printMessage "`gettext "Combining"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-editing-line ) + tcar_printMessage "`gettext "Editing"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-creating-line | --as-updating-line ) + if [[ -a "${MESSAGE}" ]];then + tcar_printMessage "`gettext "Updating"`: ${MESSAGE}" --as-stdout-line + else + tcar_printMessage "`gettext "Creating"`: ${MESSAGE}" --as-stdout-line + fi + ;; + + --as-deleting-line ) + tcar_printMessage "`gettext "Deleting"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-reading-line ) + tcar_printMessage "`gettext "Reading"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-savedas-line ) + tcar_printMessage "`gettext "Saved as"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-linkto-line ) + tcar_printMessage "`gettext "Linked to"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-movedto-line ) + tcar_printMessage "`gettext "Moved to"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-translation-line ) + tcar_printMessage "`gettext "Translation"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-translating-line ) + tcar_printMessage "`gettext "Translating"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-validating-line ) + tcar_printMessage "`gettext "Validating"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-template-line ) + tcar_printMessage "`gettext "Template"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-configuration-line ) + tcar_printMessage "`gettext "Configuration"`: ${MESSAGE}" --as-stdout-line + ;; + + --as-palette-line ) + tcar_printMessage "`gettext "Palette"`: ${MESSAGE}" --as-stdout-line + ;; + + esac + +} diff --git a/Scripts/tcar_printUrl.sh b/Scripts/tcar_printUrl.sh new file mode 100755 index 0000000..c2abad4 --- /dev/null +++ b/Scripts/tcar_printUrl.sh @@ -0,0 +1,149 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way URLs are printed by tcar.sh script. This +# function describes the domain organization of The CentOS Project +# through its URLs and provides a way to print them out when needed. +function tcar_printUrl { + + local URL='' + + # Define short options. + local ARGSS='' + + # Define long options. + local ARGSL='domain,home,lists,wiki,forums,bugs,planet,docs,mirrors,projects,svn,trac,irc,cc-sharealike,with-locale,as-html-link' + + # Initialize arguments with an empty value and set it as local + # variable to this function scope. Doing this is very important to + # avoid any clash with higher execution environments. + local TCAR_MODULE_ARGUMENT='' + + # Process all arguments currently available in this function + # environment. If either ARGSS or ARGSL local variables have been + # defined, argument processing goes through getopt for validation. + tcar_setModuleArguments "${@}" + + # Redefine positional parameters using TCAR_MODULE_ARGUMENT variable. + eval set -- "${TCAR_MODULE_ARGUMENT}" + + # Look for options passed through command-line. + while true; do + case "${1}" in + + --domain ) + URL="centos.org" + shift 1 + ;; + + --home ) + URL="http://www.$(tcar_printUrl --domain)/" + shift 1 + ;; + + --lists ) + URL="http://lists.$(tcar_printUrl --domain)/" + shift 1 + ;; + + --wiki ) + URL="http://wiki.$(tcar_printUrl --domain)/" + shift 1 + ;; + + --forums ) + URL="http://forums.$(tcar_printUrl --domain)/" + shift 1 + ;; + + --bugs ) + URL="http://bugs.$(tcar_printUrl --domain)/" + shift 1 + ;; + + --projects ) + URL="https://projects.$(tcar_printUrl --domain)/" + shift 1 + ;; + + --svn ) + URL="$(tcar_printUrl --projects)svn/" + shift 1 + ;; + + --trac ) + URL="$(tcar_printUrl --projects)trac/" + shift 1 + ;; + + --planet ) + URL="http://planet.$(tcar_printUrl --domain)/" + shift 1 + ;; + + --docs ) + URL="http://docs.$(tcar_printUrl --domain)/" + shift 1 + ;; + + --mirrors ) + URL="http://mirrors.$(tcar_printUrl --domain)/" + shift 1 + ;; + + --irc ) + URL="http://$(tcar_printUrl --home)modules/tinycontent/index.php?id=8" + shift 1 + ;; + + --cc-sharealike ) + URL="http://creativecommons.org/licenses/by-sa/3.0/" + shift 1 + ;; + + --with-locale ) + if [[ ! ${LANG} =~ '^en' ]];then + URL="${URL}${TCAR_SCRIPT_LANG_LL}/" + fi + shift 1 + ;; + + --as-html-link ) + URL="${URL}" + shift 1 + ;; + + -- ) + + shift 1 + break + ;; + esac + done + + # Print Url. + echo "${URL}" + +} diff --git a/Scripts/tcar_printUsage.sh b/Scripts/tcar_printUsage.sh new file mode 100755 index 0000000..c35b1dd --- /dev/null +++ b/Scripts/tcar_printUsage.sh @@ -0,0 +1,44 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Describe options and most frequently used commands related to tcar +# script. +function tcar_printUsage { + + tcar_printMessage "`gettext "Usage"`: tcar [--version] [--help] [--filter=]" --as-stdout-line=5 + tcar_printMessage ": [--debug] [--yes] [--quiet] " --as-stdout-line=5 + echo + + tcar_printMessage "`gettext "The most commonly used tcar commands are:"`" --as-stdout-line + tcar_printMessage " prepare: `gettext "..."`" --as-stdout-line + tcar_printMessage " render: `gettext "..."`" --as-stdout-line + tcar_printMessage " locale: `gettext "..."`" --as-stdout-line + echo + + tcar_printMessage "See 'tcar help ' for more information on a specific command." --as-stdout-line + + exit 0 + +} diff --git a/Scripts/tcar_printVersion.sh b/Scripts/tcar_printVersion.sh new file mode 100755 index 0000000..db1896d --- /dev/null +++ b/Scripts/tcar_printVersion.sh @@ -0,0 +1,40 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Print tcar version and license information. +function tcar_printVersion { + + # Reset text domain locally, in order to prevent this function + # from using the last text domain definition. By default all + # common functions do use the same MO file. + local TEXTDOMAIN="${TCAR_SCRIPT_NAME}" + + tcar_printMessage "`eval_gettext "\\\$TCAR_SCRIPT_NAME version \\\$TCAR_SCRIPT_VERSION"`" --as-stdout-line + tcar_printCopyrightInfo + tcar_printMessage "`eval_gettext "\\\$TCAR_SCRIPT_NAME comes with NO WARRANTY, to the extent permitted by law. You may redistribute copies of \\\$TCAR_SCRIPT_NAME under the terms of the GNU General Public License. For more information about these matters, see the file named COPYING."`" --as-stdout-line | fold --width=66 --spaces + + exit 0 + +} diff --git a/Scripts/tcar_setModuleArguments.sh b/Scripts/tcar_setModuleArguments.sh new file mode 100755 index 0000000..02fffdb --- /dev/null +++ b/Scripts/tcar_setModuleArguments.sh @@ -0,0 +1,79 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Use getopt to process arguments passed to tcar.sh script. This +# function works with the following three environment variables: +# +# ARGSS +# Stores getopt short arguments definition. +# +# ARGSL +# Stores getopt long arguments definition. +# +# TCAR_MODULE_ARGUMENT +# Stores arguments passed to functions or command-line interface +# depending the context it is defined. +# +# These three variables are not defined in this function but the +# function environment you want to provide option parsing for, through +# getopt command. Using local definition for these three variables let +# you to nest option parsing inside different function-environment +# levels. +function tcar_setModuleArguments { + + # Reset text domain locally, in order to prevent this function + # from using the last text domain definition. By default all + # common functions do use the same MO file. + local TEXTDOMAIN="${TCAR_SCRIPT_NAME}" + + # Verify non-option arguments passed to command-line. If there + # isn't any or dot is provided, redefine the TCAR_MODULE_ARGUMENT + # variable to use the current location the tcar.sh script + # was called from. + if [[ -z "${TCAR_MODULE_ARGUMENT}" ]];then + TCAR_MODULE_ARGUMENT=${PWD} + fi + + # Verify presence of either short or long options in the + # environment. If they are present apply option validation through + # getopt. + if [[ ! -z ${ARGSS} ]] || [[ ! -z ${ARGSL} ]];then + + # Redefine positional parameters using TCAR_MODULE_ARGUMENT variable. + eval set -- "${TCAR_MODULE_ARGUMENT}" + + # Process positional parameters using getopt's option validation. + TCAR_MODULE_ARGUMENT=$(getopt -o "${ARGSS}" -l "${ARGSL}" \ + -n "${TCAR_SCRIPT_NAME} (${TCAR_MODULE_NAME})" -- "${@}") + + # Verify getopt's exit status and finish the script execution + # with an error message, if it failed. + if [[ $? -ne 0 ]];then + tcar_printMessage "`gettext "The argument verification failed."`" --as-error-line + fi + + fi + +} diff --git a/Scripts/tcar_setModuleEnvironment.sh b/Scripts/tcar_setModuleEnvironment.sh new file mode 100755 index 0000000..4bb49bb --- /dev/null +++ b/Scripts/tcar_setModuleEnvironment.sh @@ -0,0 +1,189 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Initiate module environments inside the tcar.sh script. +function tcar_setModuleEnvironment { + + local ARG_MODULE_NAME='' + local ARG_MODULE_TYPE='' + local ARG_MODULE_ARGS='' + + # Retrieve module's name and module's type from arguments passed + # through this function positional parameters. + OPTIND=1 + while getopts "m:,t:,g:" OPTION "${@}"; do + case "${OPTION}" in + m ) ARG_MODULE_NAME="${OPTARG}" ;; + t ) ARG_MODULE_TYPE="${OPTARG}" ;; + g ) ARG_MODULE_ARGS="${OPTARG} ${ARG_MODULE_ARGS}" ;; + esac + done + + # Clean up positional parameters to reflect the fact that options + # have been processed already. + shift $(( ${OPTIND} - 1 )) + + # Initialize module's global counter. + TCAR_MODULE_COUNT=${TCAR_MODULE_COUNT:-0} + + # When the last module in the chain of executed modules is the + # same module being currently executed, don't create a new + # position for it in the chain of modules. Instead, use the + # information it already has from its previous execution. In order + # for this to work, the current module must be executed as sibling + # module of other module or itself. + if [[ ${TCAR_MODULE_COUNT} -gt 0 ]];then + if [[ ${TCAR_MODULE_NAMES[((${TCAR_MODULE_COUNT} - 1))]} == ${ARG_MODULE_NAME} ]];then + if [[ ${ARG_MODULE_TYPE} == 'sibling' ]];then + tcar_printMessage '~~~~~~~~~~~~~~~~~~~~~~~~~> : '"${TCAR_MODULE_NAME} ${TCAR_MODULE_ARGUMENT}" --as-debugger-line + ${ARG_MODULE_NAME} ${ARG_MODULE_ARGS} ${@} + return + fi + fi + fi + + tcar_printMessage '=========================>: ['${TCAR_MODULE_COUNT}'] | '${FUNCNAME[1]} --as-debugger-line + + # Define module's base directory. This is the directory where the + # initialization script is stored in. + local TCAR_MODULE_BASEDIR=${TCAR_SCRIPT_MODULES_BASEDIR} + if [[ ${#TCAR_MODULE_BASEDIRS[*]} -gt 0 ]];then + if [[ ${ARG_MODULE_TYPE} == "parent" ]];then + TCAR_MODULE_BASEDIR=${TCAR_SCRIPT_MODULES_BASEDIR} + elif [[ ${ARG_MODULE_TYPE} == "sibling" ]];then + if [[ ${TCAR_MODULE_TYPES[((${TCAR_MODULE_COUNT} - 1 ))]} == 'sibling' ]];then + TCAR_MODULE_BASEDIR=${TCAR_MODULE_BASEDIRS[((${TCAR_MODULE_COUNT}-2))]} + else + TCAR_MODULE_BASEDIR=${TCAR_MODULE_BASEDIRS[((${TCAR_MODULE_COUNT}-1))]} + fi + else + TCAR_MODULE_BASEDIR=${TCAR_MODULE_BASEDIRS[${TCAR_MODULE_COUNT}]} + fi + fi + tcar_printMessage "TCAR_MODULE_BASEDIR : ${TCAR_MODULE_BASEDIR}" --as-debugger-line + + # Define module's name. + TCAR_MODULE_NAMES[${TCAR_MODULE_COUNT}]=$(tcar_getRepoName "${ARG_MODULE_NAME:-unknown}" "-f" | cut -d '-' -f1) + local TCAR_MODULE_NAME=${TCAR_MODULE_NAMES[${TCAR_MODULE_COUNT}]} + tcar_printMessage "TCAR_MODULE_NAME : [${TCAR_MODULE_COUNT}]=${TCAR_MODULE_NAME}" --as-debugger-line + + # Define module's type. + TCAR_MODULE_TYPES[${TCAR_MODULE_COUNT}]="${ARG_MODULE_TYPE:-parent}" + local TCAR_MODULE_TYPE=${TCAR_MODULE_TYPES[${TCAR_MODULE_COUNT}]} + tcar_printMessage "TCAR_MODULE_TYPE : ${TCAR_MODULE_TYPE}" --as-debugger-line + + # Define module's arguments. This variable is used in different + # module environments to pass positional parameters from one + # environment to another using local definitions. + TCAR_MODULE_ARGUMENTS[${TCAR_MODULE_COUNT}]="${ARG_MODULE_ARGS:-} ${@}" + local TCAR_MODULE_ARGUMENT=${TCAR_MODULE_ARGUMENTS[${TCAR_MODULE_COUNT}]} + tcar_printMessage "TCAR_MODULE_ARGUMENT : ${TCAR_MODULE_ARGUMENT}" --as-debugger-line + + # Check module's name possible values. + tcar_checkModuleName + + # Define module's directory. + TCAR_MODULE_DIRS[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_BASEDIR}/$(tcar_getRepoName "${TCAR_MODULE_NAME}" "-d") + local TCAR_MODULE_DIR=${TCAR_MODULE_DIRS[${TCAR_MODULE_COUNT}]} + tcar_printMessage "TCAR_MODULE_DIR : ${TCAR_MODULE_DIR}" --as-debugger-line + + # Define module's directories not reused from module's parent + # directory structure. + TCAR_MODULE_DIRS_MODULES[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIR}/Modules + local TCAR_MODULE_DIR_MODULES=${TCAR_MODULE_DIRS_MODULES[${TCAR_MODULE_COUNT}]} + tcar_printMessage "TCAR_MODULE_DIR_MODULES : ${TCAR_MODULE_DIR_MODULES}" --as-debugger-line + + TCAR_MODULE_DIRS_CONFIGS[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIR}/Configs + local TCAR_MODULE_DIR_CONFIGS=${TCAR_MODULE_DIRS_CONFIGS[${TCAR_MODULE_COUNT}]} + tcar_printMessage "TCAR_MODULE_DIR_CONFIGS : ${TCAR_MODULE_DIR_CONFIGS}" --as-debugger-line + + # Define module's directories reused from module's parent + # directory structure. + TCAR_MODULE_DIRS_MANUALS[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIRS[0]}/Manuals + local TCAR_MODULE_DIR_MANUALS=${TCAR_MODULE_DIRS_MANUALS[${TCAR_MODULE_COUNT}]} + tcar_printMessage "TCAR_MODULE_DIR_MANUALS : ${TCAR_MODULE_DIR_MANUALS}" --as-debugger-line + + TCAR_MODULE_DIRS_LOCALES[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIRS[0]}/Locales + local TCAR_MODULE_DIR_LOCALES=${TCAR_MODULE_DIRS_LOCALES[${TCAR_MODULE_COUNT}]} + tcar_printMessage "TCAR_MODULE_DIR_LOCALES : ${TCAR_MODULE_DIR_LOCALES}" --as-debugger-line + + # Define module's initialization file. + TCAR_MODULE_INIT_FILES[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIR}/${TCAR_MODULE_NAME}.sh + local TCAR_MODULE_INIT_FILE=${TCAR_MODULE_INIT_FILES[${TCAR_MODULE_COUNT}]} + tcar_printMessage "TCAR_MODULE_INIT_FILE : ${TCAR_MODULE_INIT_FILE}" --as-debugger-line + + # Define module's connection with their localization files. It is + # required that gettext-specific variables be defined locally, in + # order to implement per-module localization. + local TEXTDOMAIN=$(basename ${TCAR_MODULE_INIT_FILE}) + tcar_printMessage "TEXTDOMAIN: ${TEXTDOMAIN}" --as-debugger-line + + # Increment module's counter just before creating next module's + # base directory. + TCAR_MODULE_COUNT=$(( ${TCAR_MODULE_COUNT} + 1 )) + + # Define next module's base directory. + TCAR_MODULE_BASEDIRS[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIR_MODULES} + + # Check function script execution rights. + tcar_checkFiles -ex ${TCAR_MODULE_INIT_FILE} + + # Load module-specific (function) scripts into current execution + # environment. Keep the tcar_setModuleEnvironmentScripts function + # call after all variables and arguments definitions. + tcar_setModuleEnvironmentScripts + + # Execute module's initialization script with its arguments. + tcar_printMessage '-------------------------> : '"${TCAR_MODULE_NAME} ${TCAR_MODULE_ARGUMENT}" --as-debugger-line + ${TCAR_MODULE_NAME} ${TCAR_MODULE_ARGUMENT} + + # Unset module-specific environment. + tcar_printMessage '<------------------------- : '"${TCAR_MODULE_NAME} ${TCAR_MODULE_ARGUMENT}" --as-debugger-line + tcar_unsetModuleEnvironment + + # Decrement module counter just after unset unused module + # environments. + TCAR_MODULE_COUNT=$(( ${TCAR_MODULE_COUNT} - 1 )) + + # Unset array and non-array variables used in this function. + if [[ ${TCAR_MODULE_COUNT} -eq 0 ]];then + unset TCAR_MODULE_NAMES + unset TCAR_MODULE_BASEDIRS + unset TCAR_MODULE_DIRS + unset TCAR_MODULE_DIRS_MODULES + unset TCAR_MODULE_DIRS_MANUALS + unset TCAR_MODULE_DIRS_LOCALES + unset TCAR_MODULE_DIRS_CONFIGS + unset TCAR_MODULE_NAME + unset TCAR_MODULE_DIR + unset TCAR_MODULE_DIR_MODULES + unset TCAR_MODULE_DIR_MANUALS + unset TCAR_MODULE_DIR_LOCALES + unset TCAR_MODULE_DIR_CONFIGS + fi + + tcar_printMessage '<=========================: ['${TCAR_MODULE_COUNT}'] | '${FUNCNAME[1]} --as-debugger-line + +} diff --git a/Scripts/tcar_setModuleEnvironmentScripts.sh b/Scripts/tcar_setModuleEnvironmentScripts.sh new file mode 100755 index 0000000..550755e --- /dev/null +++ b/Scripts/tcar_setModuleEnvironmentScripts.sh @@ -0,0 +1,91 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the way specific functionalities are exported to tcar.sh +# script environment. +function tcar_setModuleEnvironmentScripts { + + # Reset text domain locally, in order to prevent this function + # from using the last text domain definition. By default all + # common functions do use the same MO file. + local TEXTDOMAIN="${TCAR_SCRIPT_NAME}" + + # Define the pattern used to retrieve function names from function + # files. + local FUNCTION_PATTERN="^function[[:space:]]+${TCAR_MODULE_NAME}(_[[:alnum:]]+)?[[:space:]]+{[[:space:]]*$" + + # Define the list of files. + local TCAR_MODULE_SCRIPT='' + local TCAR_MODULE_SCRIPTS="${TCAR_MODULE_INIT_FILE}" + if [[ -d ${TCAR_MODULE_DIR} ]];then + TCAR_MODULE_SCRIPTS="${TCAR_MODULE_SCRIPTS} + $(tcar_getFilesList \ + -p "${TCAR_MODULE_DIR}/${TCAR_MODULE_NAME}_[[:alnum:]]+\.sh$" \ + -t 'f' ${TCAR_MODULE_DIR})" + fi + + # Verify the list of files. If no function file exists for the + # location specified stop the script execution. Otherwise the + # script will surely try to execute a function that haven't been + # exported yet and report an error about it. + if [[ -z ${TCAR_MODULE_SCRIPTS} ]];then + tcar_printMessage "${FUNCNAME}: `gettext "No function file was found."`" --as-error-line + fi + + # Process the list of files. + for TCAR_MODULE_SCRIPT in ${TCAR_MODULE_SCRIPTS};do + + # Verify the execution rights for function file. + tcar_checkFiles -ex ${TCAR_MODULE_SCRIPT} + + # Retrieve the function's name from function's file. + local TCAR_MODULE_SCRIPT_FN=$(egrep "${FUNCTION_PATTERN}" ${TCAR_MODULE_SCRIPT} \ + | gawk '{ print $2 }') + + # Verify function's name. It cannot be an empty value. + if [[ -z "${TCAR_MODULE_SCRIPT_FN}" ]];then + tcar_printMessage "`gettext "No function definition found."`" --as-error-line + fi + + # Verify that function files have not been already exported. + # If they have been already exported don't export them again. + # Instead, continue with the next function file in the list. + declare -F | gawk '{ print $3 }' | egrep "^${TCAR_MODULE_SCRIPT}$" > /dev/null + if [[ $? -eq 0 ]];then + continue + fi + + # Initialize the function file. + . ${TCAR_MODULE_SCRIPT} + + # Export the function names inside the file to current shell + # script environment. + export -f ${TCAR_MODULE_SCRIPT_FN} + + tcar_printMessage "export -f : ${TCAR_MODULE_SCRIPT_FN}" --as-debugger-line + + done + +} diff --git a/Scripts/tcar_setTranslationMarkers.sh b/Scripts/tcar_setTranslationMarkers.sh new file mode 100755 index 0000000..fff45ce --- /dev/null +++ b/Scripts/tcar_setTranslationMarkers.sh @@ -0,0 +1,184 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize construction of translation markers and their related +# expansion. As convention, translation markers must be set inside +# source files (e.g., Docbook, Svg, etc.) and expanded inside temporal +# instances used to produce final contents. +function tcar_setTranslationMarkers { + + # Initialize variables. + local -a SRC + local -a DST + local COUNT=0 + local COUNTSRC=0 + local COUNTDST=0 + + # Define source location on which sed replacements take place. + local LOCATION="${1}" + + # Verify that source location does exist. + tcar_checkFiles -ef ${LOCATION} + + # Define copyright translation markers. + SRC[((++${#SRC[*]}))]='=COPYRIGHT_YEAR_FIRST=' + DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --first-year)" + SRC[((++${#SRC[*]}))]='=COPYRIGHT_YEAR(_LAST)?=' + DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --year)" + SRC[((++${#SRC[*]}))]='=COPYRIGHT_YEAR(S)?_LIST=' + DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --years-list)" + SRC[((++${#SRC[*]}))]='=COPYRIGHT_HOLDER=' + DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --holder)" + SRC[((++${#SRC[*]}))]='=COPYRIGHT_HOLDER_PREDICATE=' + DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --holder-predicate)" + + # Define license translation markers. + SRC[((++${#SRC[*]}))]='=LICENSE=' + DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --license)" + SRC[((++${#SRC[*]}))]='=LICENSE_URL=' + DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --license-url)" + + # Define theme translation markers. + SRC[((++${#SRC[*]}))]='=THEME=' + DST[((++${#DST[*]}))]="$(tcar_getPathComponent ${RENDER_TARGET} --motif)" + SRC[((++${#SRC[*]}))]='=THEMENAME=' + DST[((++${#DST[*]}))]="$(tcar_getPathComponent ${RENDER_TARGET} --motif-name)" + SRC[((++${#SRC[*]}))]='=THEMERELEASE=' + DST[((++${#DST[*]}))]="$(tcar_getPathComponent ${RENDER_TARGET} --motif-version)" + + # Define url translation markers. + SRC[((++${#SRC[*]}))]='=URL=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--home' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_WIKI=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--wiki' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_LISTS=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--lists' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_FORUMS=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--forums' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_MIRRORS=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--mirrors' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_DOCS=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--docs' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_PROJECTS=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--projects' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_BUGS=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--bugs' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_SVN=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--svn' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_TRAC=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--trac' '--with-locale') + SRC[((++${#SRC[*]}))]='=URL_PLANET=' + DST[((++${#DST[*]}))]=$(tcar_printUrl '--planet' '--with-locale') + + # Define release translation markers. + SRC[((++${#SRC[*]}))]='=RELEASE=' + DST[((++${#DST[*]}))]=${RELEASE} + SRC[((++${#SRC[*]}))]='=MAJOR_RELEASE=' + DST[((++${#DST[*]}))]=${MAJOR_RELEASE} + + # Define emails translation markers. + SRC[((++${#SRC[*]}))]='=MAIL_DOCS=' + DST[((++${#DST[*]}))]="$(tcar_printMailingList --docs)" + + # Define locale translation markers. + SRC[((++${#SRC[*]}))]='=LOCALE=' + DST[((++${#DST[*]}))]="${TCAR_SCRIPT_LANG_LC}" + SRC[((++${#SRC[*]}))]='=LOCALE_LL=' + DST[((++${#DST[*]}))]="${TCAR_SCRIPT_LANG_LL}" + SRC[((++${#SRC[*]}))]='=LOCALE_CC=' + DST[((++${#DST[*]}))]="${TCAR_SCRIPT_LANG_CC}" + + # Define domain translation markers for domains. + SRC[((++${#SRC[*]}))]='=DOMAIN_LL=' + if [[ ! ${TCAR_SCRIPT_LANG_LL} =~ '^en' ]];then + DST[((++${#DST[*]}))]="${TCAR_SCRIPT_LANG_LL}" + else + DST[((++${#DST[*]}))]="" + fi + + # Define repository translation markers. + SRC[((++${#SRC[*]}))]='=(REPO_TLDIR|REPO_HOME|TCAR_BASEDIR)=' + DST[((++${#DST[*]}))]="${TCAR_BASEDIR}" + + # Do replacement of nested translation markers. + while [[ ${COUNTDST} -lt ${#DST[@]} ]];do + + # Verify existence of translation markers. If there is no + # translation marker on replacement, continue with the next + # one in the list. + if [[ ! ${DST[${COUNTDST}]} =~ '=[A-Z_]+=' ]];then + # Increment destination counter. + COUNTDST=$((${COUNTDST} + 1)) + # The current replacement value doesn't have translation + # marker inside, so skip it and evaluate the next + # replacement value in the list. + continue + fi + + while [[ ${COUNTSRC} -lt ${#SRC[*]} ]];do + + # Update replacements. + DST[${COUNTDST}]=$(echo ${DST[${COUNTDST}]} \ + | sed -r "s!${SRC[${COUNTSRC}]}!${DST[${COUNTSRC}]}!g") + + # Increment source counter. + COUNTSRC=$((${COUNTSRC} + 1)) + + done + + # Reset source counter + COUNTSRC=0 + + # Increment destination counter. + COUNTDST=$((${COUNTDST} + 1)) + + done + + # Apply replacements for translation markers. + while [[ ${COUNT} -lt ${#SRC[*]} ]];do + + # Use sed to replace translation markers inside the design + # model instance. + sed -r -i "s!${SRC[${COUNT}]}!${DST[${COUNT}]}!g" ${LOCATION} + + # Increment counter. + COUNT=$((${COUNT} + 1)) + + done + + # Remove escaped character from translation markers. This is one + # of the reasons why translation marker should be expanded in + # source files instances not the source files themselves. + # Escaping translation markers provides a way of talking about + # them without expanding them. + sed -r -i 's/(=)\\([A-Z_]+=)/\1\2/g' ${LOCATION} + + # Unset specific translation markers and specific replacement + # variables in order to clean them up. Otherwise, undesired values + # may remain from one file to another. + unset SRC + unset DST + +} diff --git a/Scripts/tcar_terminateScriptExecution.sh b/Scripts/tcar_terminateScriptExecution.sh new file mode 100755 index 0000000..e0334a9 --- /dev/null +++ b/Scripts/tcar_terminateScriptExecution.sh @@ -0,0 +1,39 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Standardize the actions that must be realized just before leaving +# the script execution (e.g., cleaning temporal files). This function +# is the one called when interruption signals like EXIT, SIGHUP, +# SIGINT and SIGTERM are detected. +function tcar_terminateScriptExecution { + + # Remove temporal directory. + rm -r ${TCAR_SCRIPT_TEMPDIR} + + # NOTE: Don't specify an exit status here. As convenction we do + # this when error messages are triggerd. See `--as-error-line' + # option from `tcar_printMessage' functionality. + +} diff --git a/Scripts/tcar_unsetModuleEnvironment.sh b/Scripts/tcar_unsetModuleEnvironment.sh new file mode 100755 index 0000000..682944e --- /dev/null +++ b/Scripts/tcar_unsetModuleEnvironment.sh @@ -0,0 +1,52 @@ +#!/bin/bash +###################################################################### +# +# tcar - The CentOS Artwork Repository automation tool. +# Copyright © 2014 The CentOS Artwork SIG +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Alain Reguera Delgado +# 39 Street No. 4426 Cienfuegos, Cuba. +# +###################################################################### + +# Unset functions exported to tcar.sh script execution environment. +function tcar_unsetModuleEnvironment { + + # Reset text domain locally, in order to prevent this function + # from using the last text domain definition. By default all + # common functions do use the same MO file. + local TEXTDOMAIN="${TCAR_SCRIPT_NAME}" + + # Verify suffix value used to retrieve function files. + if [[ -z ${TCAR_MODULE_NAME} ]];then + tcar_printMessage "`gettext "The export id was not provided."`" --as-error-line + fi + + # Define list of format-specific functionalities. This is the list + # of function definitions previously exported by + # `tcar_setModuleEnvironmentScripts'. Be sure to limit the list + # to function names that start with the suffix specified only. + local TCAR_MODULE_SCRIPT_FN='' + local TCAR_MODULE_SCRIPT_FNS=$(declare -F | gawk '{ print $3 }' | egrep "^${TCAR_MODULE_NAME}") + + # Unset function names from current execution environment. + for TCAR_MODULE_SCRIPT_FN in ${TCAR_MODULE_SCRIPT_FNS};do + unset -f ${TCAR_MODULE_SCRIPT_FN} + tcar_printMessage "unset -f : ${TCAR_MODULE_SCRIPT_FN}" --as-debugger-line + done + +} diff --git a/tcar-scripts/tcar.sh b/tcar-scripts/tcar.sh deleted file mode 100755 index 217fd19..0000000 --- a/tcar-scripts/tcar.sh +++ /dev/null @@ -1,264 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar.sh -- The CentOS Artwork Repository automation tool. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -###################################################################### -# Identity -###################################################################### - -declare -xr TCAR_SCRIPT_PACKAGE="tcar" -declare -xr TCAR_SCRIPT_VERSION="$(rpm -q --qf "%{VERSION}" ${TCAR_SCRIPT_PACKAGE})" - -###################################################################### -# Paths -###################################################################### - -# Base directory where repository files are installed in. -declare -xr TCAR_BASEDIR=/usr/share/tcar - -# Base directory where final content is produced in. This value is -# also known as the "workplace" and should be customized later by the -# user, using the prepare module of tcar script. -declare -x TCAR_WORKDIR=/tmp - -# Base directory where automation scripts are installed in. -declare -xr TCAR_SCRIPT_BASEDIR=${TCAR_BASEDIR}/Scripts - -# Directory to store temporal files. -declare -xr TCAR_SCRIPT_TEMPDIR=$(mktemp -p /tmp -d ${TCAR_SCRIPT_PACKAGE}-XXXXXX) - -# Configuration files in order of reading preference. The last file in -# the list overlaps options set in previous files in the list. Use -# colon character to separate files in the list. -declare -xr TCAR_SCRIPT_CONFIG=${HOME}/.tcar.conf - -# Base directory where man pages are searched at. -declare -xr TCAR_SCRIPT_MANUALS=/usr/share/man - -# Base directory where automation script modules are installed in. -declare -xr TCAR_SCRIPT_MODULES_BASEDIR=${TCAR_SCRIPT_BASEDIR}/Modules - -# Default text editor. -declare -x TCAR_SCRIPT_EDITOR=/usr/bin/vim - -###################################################################### -# Internationalization -###################################################################### - -# Set the script language information using the LC format. This format -# shows both language and country information (e.g., `es_ES'). -declare -xr TCAR_SCRIPT_LANG_LC=$(echo ${LANG} | cut -d'.' -f1) - -# Set the script language information using the LL format. This format -# shows only the language information (e.g., `es'). -declare -xr TCAR_SCRIPT_LANG_LL=$(echo ${TCAR_SCRIPT_LANG_LC} | cut -d'_' -f1) - -# Set the script language information using the CC format. This format -# shows only the country information (e.g., `ES'). -declare -xr TCAR_SCRIPT_LANG_CC=$(echo ${TCAR_SCRIPT_LANG_LC} | cut -d'_' -f2) - -# Set function environments required by GNU gettext system. -. gettext.sh - -# Set the script text domain. This information is used by gettext -# system to retrieve translated strings from machine object (MO) files -# with this name. This variable is reset each time a new module is -# loaded, so the correct files can be used. -declare -x TEXTDOMAIN="${TCAR_SCRIPT_PACKAGE}" - -# Set the script text domain directory. This information is used by -# gettext system to know where the machine objects are stored in. This -# variable is reset each time a new module is loaded, so the correct -# files can be used. -declare -xr TEXTDOMAINDIR=/usr/share/locale - -###################################################################### -# Global Flags -###################################################################### - -# Set filter flag (-f|--filter). This flag is mainly used to reduce -# the number of files to process and is interpreted as egrep-posix -# regular expression. By default, when this flag is not provided, all -# paths in the working copy will match, except files inside hidden -# directories like `.svn' and `.git' that will be omitted. -declare -x TCAR_FLAG_FILTER='[[:alnum:]_/-]+' - -# Set verbosity flag (-q|--quiet). This flag controls whether -# tcar.sh script prints messages or not. By default, all -# messages are suppressed except those directed to standard error. -declare -x TCAR_FLAG_QUIET='false' - -# Set affirmative flag (-y|--yes). This flag controls whether -# tcar.sh script does or does not pass confirmation request -# points. By default, it doesn't. -declare -x TCAR_FLAG_YES='false' - -# Set debugger flag (-d|--debug). This flag controls whether -# tcar.sh script does or does not print debugging information. -# The tcar.sh script prints debug information to standard -# output. -declare -x TCAR_FLAG_DEBUG='false' - -###################################################################### -# Global Functions -###################################################################### - -# Export script's environment functions. -for SCRIPT_FILE in $(ls ${TCAR_SCRIPT_BASEDIR}/tcar_*.sh);do - if [[ -x ${SCRIPT_FILE} ]];then - . ${SCRIPT_FILE} - export -f $(grep '^function ' ${SCRIPT_FILE} | cut -d' ' -f2) - else - echo "${SCRIPT_FILE} `gettext "has not execution rights."`" - exit 1 - fi -done - -###################################################################### -# Signals -###################################################################### - -# Trap signals in order to terminate the script execution correctly -# (e.g., removing all temporal files before leaving). Trapping the -# exit signal seems to be enough by now, since it is always present as -# part of the script execution flow. Each time the tcar.sh -# script is executed it will inevitably end with an EXIT signal at -# some point of its execution, even if it is interrupted in the middle -# of its execution (e.g., through `Ctrl+C'). -trap tcar_terminateScriptExecution 0 - -###################################################################### -# Parse Command-line Arguments -###################################################################### - -declare -x TCAR_MODULE_NAME='' -declare -x TCAR_MODULE_ARGUMENT='' -declare -x TCAR_SCRIPT_ARGUMENT='' - -# Retrieve module's name using the first argument of tcar.sh -# script as reference. -if [[ ! ${1} =~ '^-' ]];then - TCAR_MODULE_NAME="${1}"; shift 1 -else - TCAR_MODULE_NAME="" -fi - -# Initialize tcar.sh script specific options. The way tcar.sh script -# retrieves its options isn't as sophisticated (e.g., it doesn't -# provide valid-option verifications) as it is provided by getopt -# command. I cannot use getopt here because it is already used when -# loading module-specific options. Using more than one invocation of -# getopt in the same script is not possible (e.g., one of the -# invocations may enter in conflict with the other one when different -# option definitions are expected in the command-line.) -while true; do - - # Store non-option arguments passed to tcar.sh script. - if [[ ! ${1} =~ '^-' ]];then - TCAR_SCRIPT_ARGUMENT="${1} ${TCAR_SCRIPT_ARGUMENT}" - shift 1 - if [[ $# -gt 0 ]];then - continue - else - break - fi - fi - - case "${1}" in - - --help* ) - - if [[ -z ${TCAR_MODULE_NAME} ]];then - # Print tcar.sh script's help. Consider that the - # --help option can receive an argument by using the - # equal sign (e.g., - # --help=tcar_setModuleEnvironment.sh). However, it - # is not possible to use spaces instead of equal sign - # because that would confuse other options from being - # parsed. - tcar_printHelp "${1}" - exit 0 - else - # Store the argument for further processing inside the - # module environment that will be executed later. - TCAR_MODULE_ARGUMENT="-g ${1} ${TCAR_MODULE_ARGUMENT}" - shift 1 - fi - ;; - - --version ) - - # Print tcar.sh script's version. - if [[ -z ${TCAR_MODULE_NAME} ]];then - tcar_printVersion - exit 0 - else - TCAR_MODULE_ARGUMENT="-g ${1} ${TCAR_MODULE_ARGUMENT}" - shift 1 - fi - ;; - - --quiet ) - - TCAR_FLAG_QUIET='true' - shift 1 - ;; - - --yes ) - - TCAR_FLAG_YES='true' - shift 1 - ;; - - --debug ) - - TCAR_FLAG_DEBUG='true' - shift 1 - ;; - - * ) - - # Store module-specific option arguments. This is, all - # arguments not considered part of tcar.sh script - # itself. The module-specific option arguments are passed, - # later, to getopt for option processing, inside the - # module-specific environments. - TCAR_MODULE_ARGUMENT="-g ${1} ${TCAR_MODULE_ARGUMENT}" - shift 1 - if [[ $# -gt 0 ]];then - continue - else - break - fi - ;; - esac -done - -# Initiate module-specific environment. -tcar_setModuleEnvironment -m "${TCAR_MODULE_NAME}" ${TCAR_MODULE_ARGUMENT} ${TCAR_SCRIPT_ARGUMENT} - -# At this point everything has been done without errors. So, exit -# tcar.sh script successfully. -exit 0 diff --git a/tcar-scripts/tcar_checkFiles.sh b/tcar-scripts/tcar_checkFiles.sh deleted file mode 100755 index 5a16a64..0000000 --- a/tcar-scripts/tcar_checkFiles.sh +++ /dev/null @@ -1,157 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_checkFiles.sh -- This function standardizes the way file -# conditional expressions are applied to files. Here is where -# tcar.sh script answers questions like: is the file a regular -# file or a directory? Or, is it a symbolic link? Or even, does it -# have execution rights, etc. If the verification fails somehow at -# any point, an error message is output and tcar.sh script -# finishes its execution. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_checkFiles { - - # Reset text domain locally, in order to prevent this function - # from using the last text domain definition. By default all - # common functions do use the same MO file. - local TEXTDOMAIN="${TCAR_SCRIPT_PACKAGE}" - - # Initialize local array variables. - local -a CONDITION_COMMAND - local -a CONDITION_PATTERN - local -a CONDITION_MESSAGE - - # Initialize local counter. - local COUNTER=0 - - OPTIND=1 - while getopts "i:,r,m:,n,d,e,f,h,x" OPTION "${@}"; do - - case "${OPTION}" in - - d ) - CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' - CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-d' - CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't a directory."`" - ;; - - e ) - CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' - CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-e' - CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "doesn't exist."`" - ;; - - f ) - CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' - CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-f' - CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't a regular file."`" - ;; - - h ) - CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' - CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-h' - CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't a symbolic link."`" - ;; - - x ) - CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/test' - CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-x' - CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't an executable file."`" - ;; - - i ) - local MIME=${OPTARG} - CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='/usr/bin/file' - CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]='-bi' - CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`eval_gettext "isn't a \\\"\\\$MIME\\\" file."`" - ;; - - m ) - CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]='match' - CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]="${OPTARG}" - CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "doesn't match its pattern."`" - ;; - - n ) - CONDITION_COMMAND[((++${#CONDITION_COMMAND[*]}))]="/bin/rpm" - CONDITION_PATTERN[((++${#CONDITION_PATTERN[*]}))]="-q --quiet" - CONDITION_MESSAGE[((++${#CONDITION_MESSAGE[*]}))]="`gettext "isn't installed in the system."`" - ;; - - esac - done - - # Clean up positional parameters to reflect the fact that options - # have been processed already. - shift $(( ${OPTIND} - 1 )) - - # Define list of files we want to apply verifications to, now that - # all option-like arguments have been removed from positional - # parameters list so we are free to go with the verifications. - local FILE='' - local FILES=${@} - - # Verify existence of files to prevent tcar.sh script from - # using the current location in cases when it shouldn't (e.g., - # here it is expecting a list of files to process.). - if [[ -z ${FILES} ]];then - tcar_printMessage "`gettext "No file for processing found."`" --as-error-line - fi - - for FILE in ${FILES};do - - until [[ ${COUNTER} -eq ${#CONDITION_PATTERN[*]} ]];do - - case ${CONDITION_COMMAND[${COUNTER}]} in - - "/usr/bin/test" | "/bin/rpm" ) - ${CONDITION_COMMAND[${COUNTER}]} ${CONDITION_PATTERN[${COUNTER}]} ${FILE} \ - || tcar_printMessage "${FILE} ${CONDITION_MESSAGE[${COUNTER}]}" --as-error-line - ;; - - "/usr/bin/file" ) - if [[ ! $(${CONDITION_COMMAND[${COUNTER}]} ${CONDITION_PATTERN[${COUNTER}]} ${FILE}) =~ "^${MIME}" ]];then - tcar_printMessage "${FILE} ${CONDITION_MESSAGE[${COUNTER}]}" --as-error-line - fi - ;; - - "match" ) - if [[ ! ${FILE} =~ "${CONDITION_PATTERN[${COUNTER}]}" ]];then - tcar_printMessage "${FILE} ${CONDITION_MESSAGE[${COUNTER}]}" --as-error-line - fi - ;; - - * ) - tcar_printMessage "`gettext "The condition command provided isn't supported."`" --as-error-line - ;; - - esac - - COUNTER=$((${COUNTER} + 1)) - - done - - done - -} diff --git a/tcar-scripts/tcar_checkModuleName.sh b/tcar-scripts/tcar_checkModuleName.sh deleted file mode 100755 index 1b73e2f..0000000 --- a/tcar-scripts/tcar_checkModuleName.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_checkModuleName.sh -- This function uses the module's based -# directory to verify whether child and sibling modules do exist or -# not. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_checkModuleName { - - local TCAR_MODULE_LIST=$(ls ${TCAR_MODULE_BASEDIR} | tr '\n' '|' \ - | sed -r 's/\|$//' | tr '[[:upper:]]' '[[:lower:]]') - - tcar_printMessage "TCAR_MODULE_LIST : ${TCAR_MODULE_LIST}" --as-debugger-line - - tcar_checkFiles -m "^(${TCAR_MODULE_LIST})$" "${TCAR_MODULE_NAME}" - -} diff --git a/tcar-scripts/tcar_checkRepoDirSource.sh b/tcar-scripts/tcar_checkRepoDirSource.sh deleted file mode 100755 index c04379d..0000000 --- a/tcar-scripts/tcar_checkRepoDirSource.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_checkRepoDirSource.sh -- This function standardizes the path -# construction of directories inside the working copy, using -# absolute paths. This function transforms relative paths passed as -# non-option arguments to tcar.sh script command-line into -# absolute paths inside the working copy, based on whether you are -# using Subversion or Git as version control system. Further -# verifications, (e.g., whether they really exist as directories -# inside the working copy or not) should be realized outside this -# function. -# -# Use this function whenever you want to be sure non-option -# arguments passed to tcar.sh script command-line do always -# point to directories inside the working copy. Transforming -# relative paths into absolute paths, before processing them, is -# very useful when you need to execute the tcar.sh script as -# command (e.g., `tcar') anywhere on your workstation. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_checkRepoDirSource { - - local LOCATION=${1} - - # Remove any dot from arguments passed to tcar.sh script. - # This way it is possible to use a single dot to reflect the - # current location from which tcar.sh was executed. Notice - # that using a dot as argument is optional (e.g.: when you pass no - # argument to tcar command-line, the current location is - # used as default location). However, it might be useful to use a - # dot as argument when you want to include the current location in - # a list of arguments to process. Don't forget that dot slash can - # be used to refer locations relatively. - LOCATION=$(echo "${LOCATION}" | sed -r "s,^\.(/([[:alnum:]_/.-]+)?)?$,$(pwd)\1,g") - - # Remove the path to repository's base directory from location in - # order to avoid path duplications here. - LOCATION=$(echo "${LOCATION}" | sed "s,${TCAR_BASEDIR}/,,g") - - # When we use Git as version control system, there isn't a need of - # using the `trunk', `branches', `tags' convention we were using - # for Subversion. The working copy begins directly with the - # content of our repository (e.g., Documentation, Scripts, - # Identity and Locales). - # - # When we use Subversion as version control system, we follow the - # `trunk', `branches', `tags' convention to organize files inside - # the repository and need to redefine the source path in order to - # build the repository absolute path from the repository top level - # on. As convention, when you prepare your working copy through - # tcar.sh script, the absolute path to the `trunk/' - # directory is used as working copy. This is, path arguments - # provided to tcar.sh script will be interpreted from trunk/ - # directory level on. For example, the following command should - # work correctly in both Subversion and Git repositories: - # - # tcar render Documentation/Manuals/Docbook/Tcar-ug - # - # There isn't a need of verifying the paths built here. This is - # something we do later, using the tcar_checkFiles function. We - # don't do the file verification here to avoid malformed error - # messages when we reassign variable values using this function as - # reference (e.g., in order to prevent error messages from being - # stored inside variables.). - LOCATION=${TCAR_BASEDIR}/${LOCATION} - - # Remove trailing slashes passed as argument. The single slash - # form is used to refer the repository's root directory. The - # single slash form passed as argument of tcar.sh script is - # useful to execute commands over the - # entire repository tree. - echo "${LOCATION}" | sed -r -e 's,/+,/,g' -e 's,/+$,,g' - -} diff --git a/tcar-scripts/tcar_checkWorkDirSource.sh b/tcar-scripts/tcar_checkWorkDirSource.sh deleted file mode 100755 index 19a88a7..0000000 --- a/tcar-scripts/tcar_checkWorkDirSource.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_checkWorkDirSource.sh -- This function prepares non-option -# arguments passed through the command-line for further processing. -# When the argument provided is not an absolute path this function -# transforms it into an absolute path using the current working -# directory. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_checkWorkDirSource { - - local LOCATION=${1} - - # Append the current working directory when the location provided - # isn't absolute. - if [[ ! ${LOCATION} =~ '^/' ]];then - LOCATION=${PWD}/${LOCATION} - fi - - # Remove both consecutive slashes and trailing slashes from final - # location. - echo "${LOCATION}" | sed -r -e 's,/+,/,g' -e 's,/+$,,g' - - # The single slash form doesn't point to repository's root - # directory anymore. Instead, when a single slash is passed - # as argument through the command-line, it preserves its regular - # meaning which is pointing the workstation's file system. - - # The path verification isn't appropriate here because this - # function is commonly used inside variable assignments and flow - # control doesn't take place in such situation. In case path - # verification fails here, the script wouldn't end its execution - # which contradicts the expected behaviour. - -} diff --git a/tcar-scripts/tcar_getConfigLines.sh b/tcar-scripts/tcar_getConfigLines.sh deleted file mode 100755 index 6c52553..0000000 --- a/tcar-scripts/tcar_getConfigLines.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_getConfigLines.sh -- This function standardizes the way -# configuration lines are retrieved form configuration files. As -# arguments, the configuration file absolute path, the configuration -# section name, and the configuration option name must be provided. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_getConfigLines { - - # Initialize absolute path to configuration file. - local CONFIGURATION_FILE="${1}" - - # Initialize configuration section name where the variable value - # we want to to retrieve is set in. - local CONFIGURATION_SECTION="${2}" - - # Initialize variable name we want to retrieve value from. - local CONFIGURATION_OPTION="${3}" - - # Verify configuration variable name. When no variable name is - # provided print all configuration lines that can be considered as - # well-formed paths. Be sure configuration variable name starts - # just at the beginning of the line. - if [[ ! ${CONFIGURATION_OPTION} =~ '^[[:alnum:]_./-]+$' ]];then - CONFIGURATION_OPTION='[[:alnum:]_./-]+[[:space:]]*=' - fi - - # Retrieve configuration lines from configuration file. Don't sort - # the value of this value so as to preserve the order given in the - # configuration file. This is important because configuration - # files are being used for setting render-from priorities. - local CONFIGURATION_LINES=$(cat ${CONFIGURATION_FILE} \ - | egrep -v '^#' \ - | egrep -v '^[[:space:]]*$' \ - | sed -r -n "/^\[${CONFIGURATION_SECTION}\][[:space:]]*$/,/^\[/p" \ - | egrep -v '^\[' \ - | egrep "^${CONFIGURATION_OPTION}") - - # Output value related to variable name. - echo "${CONFIGURATION_LINES}" - -} diff --git a/tcar-scripts/tcar_getConfigSectionNames.sh b/tcar-scripts/tcar_getConfigSectionNames.sh deleted file mode 100755 index 8da1206..0000000 --- a/tcar-scripts/tcar_getConfigSectionNames.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_getConfigSectionNames.sh -- This function standardizes the way -# section names are retrieved from configuration files. Once section -# names are retrieved they are printed to standard output for -# further processing. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_getConfigSectionNames { - - # Define absolute path to configuration file we want to retrieve - # section names from. - local CONFIGURATION_FILE=${1} - - # Verify existence of configuration file. - tcar_checkFiles -ef ${CONFIGURATION_FILE} - - # Define regular expression pattern used to retrieve section names - # from configuration files. Don't permit any regular expression - # meta-character either. - local CONFIGURATION_SECTION_REGEX='^\[[[:alnum:]_.-]+\][[:space:]]*$' - - # Output all section names without brackets, one per line. Don't - # permit any kind of expansion here. Section names are used as - # reference to retrieve information from configuration file, - # expanding them would create different points of verifications. - egrep ${CONFIGURATION_SECTION_REGEX} ${CONFIGURATION_FILE} \ - | sed -r 's,\[(.+)\],\1,' - -} diff --git a/tcar-scripts/tcar_getConfigValue.sh b/tcar-scripts/tcar_getConfigValue.sh deleted file mode 100755 index 9b2f32f..0000000 --- a/tcar-scripts/tcar_getConfigValue.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_getConfigValue.sh -- This function standardizes the way -# configuration values are retrieved from configuration files. As -# arguments, the configuration file absolute path, the configuration -# section name, and the configuration option name must be provided. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_getConfigValue { - - local CONFIGURATION_FILE="${1}" - - local CONFIGURATION_SECTION="${2}" - - local CONFIGURATION_OPTION="${3}" - - local CONFIGURATION_LINES=$(tcar_getConfigLines \ - "${CONFIGURATION_FILE}" "${CONFIGURATION_SECTION}" "${CONFIGURATION_OPTION}") - - for CONFIGURATION_LINE in "${CONFIGURATION_LINES}";do - - local CONFIGURATION_VALUE=$(echo "${CONFIGURATION_LINE}" \ - | cut -d= -f2- | sed -r -e 's/"//g' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') - - eval echo ${CONFIGURATION_VALUE} - - done - - -} diff --git a/tcar-scripts/tcar_getFileExtension.sh b/tcar-scripts/tcar_getFileExtension.sh deleted file mode 100755 index b00cb26..0000000 --- a/tcar-scripts/tcar_getFileExtension.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_getFileExtension.sh -- This function retrieves the extension -# of a file. -# -# Written by: -# * Alain Reguera Delgado , 2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_getFileExtension { - - basename ${1} | sed -r 's/.+\.([[:alnum:]]+)$/\1/' - -} diff --git a/tcar-scripts/tcar_getFileName.sh b/tcar-scripts/tcar_getFileName.sh deleted file mode 100755 index 99bfb76..0000000 --- a/tcar-scripts/tcar_getFileName.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_getFileName.sh -- This function retrieves the name of a file. -# -# Written by: -# * Alain Reguera Delgado , 2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_getFileName { - - basename ${1} | sed -r 's/\.([[:alnum:]]+)$//' - -} diff --git a/tcar-scripts/tcar_getFilesList.sh b/tcar-scripts/tcar_getFilesList.sh deleted file mode 100755 index 1a1fad9..0000000 --- a/tcar-scripts/tcar_getFilesList.sh +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_getFilesList.sh -- This function standardizes the way list of -# files are built inside tcar.sh script. This function outputs -# a sorted and unique list of files based on the options and -# locations passed as argument. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_getFilesList { - - # Initialize pattern used to reduce the find output. - local PATTERN="${TCAR_FLAG_FILTER}" - - # Initialize options used with find command. - local OPTIONS='' - - OPTIND=1 - while getopts "p:,a:,i:,t:,u:" OPTION "${@}"; do - - case "${OPTION}" in - p ) - PATTERN="${OPTARG}" - ;; - a ) - OPTIONS="${OPTIONS} -maxdepth ${OPTARG}" - ;; - i ) - OPTIONS="${OPTIONS} -mindepth ${OPTARG}" - ;; - t ) - OPTIONS="${OPTIONS} -type ${OPTARG}" - ;; - u ) - OPTIONS="${OPTIONS} -uid ${OPTARG}" - ;; - esac - - done - - # Clean up positional parameters to reflect the fact that options - # have been processed already. - shift $(( ${OPTIND} - 1 )) - - # At this point all options arguments have been processed and - # removed from positional parameters. Only non-option arguments - # remain so we use them as source location for find command to - # look files for. - - # Verify that locations does exist. - tcar_checkFiles -e ${@} - - # Redefine pattern as regular expression. When we use regular - # expressions with find, regular expressions are evaluated against - # the whole file path. This way, when the regular expression is - # specified, we need to build it in a way that matches the whole - # path we are using. Doing so, every time we pass the `--filter' - # option in the command-line could be a tedious task. Instead, in - # the sake of reducing some typing, we prepare the regular - # expression here to match the whole path using the regular - # expression provided by the user as pattern. Do not use locations - # as part of regular expression so it could be possible to use - # path expansion. Using path expansion reduce the amount of - # places to find out things and so the time required to finish the - # task. - # - # Don't do such path expansion here. Instead, do it when you call - # this function. Otherwise you would be prohibiting the - # application of exact patterns. - #PATTERN="^/.*${PATTERN}$" - - # Define list of files to process. At this point we cannot verify - # whether the location is a directory or a file since path - # expansion could be introduced to it. The best we can do is - # verifying exit status and go on. - find ${@} -regextype posix-egrep ${OPTIONS} -regex "${PATTERN}" | sort | uniq - -} diff --git a/tcar-scripts/tcar_getPathComponent.sh b/tcar-scripts/tcar_getPathComponent.sh deleted file mode 100755 index a87dbf8..0000000 --- a/tcar-scripts/tcar_getPathComponent.sh +++ /dev/null @@ -1,126 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_getPathComponent.sh -- This function standardizes the way -# directory structures are organized inside the working copy of -# CentOS Artwork Repository. You can use this function to retrieve -# information from paths (e.g., releases, architectures and theme -# artistic motifs) or the patterns used to build the paths. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_getPathComponent { - - # Define release pattern. - local VERSION="(([[:digit:]]+)(\.([[:digit:]]+))?)" - - # Define architecture pattern. Make it match the architectures the - # CentOS distribution is able to be installed on. - local ARCHITECTURE="(i386|x86_64)" - - # Define regular expression pattern that match the theme artistic - # motif component inside the path strings. - local THEME_MOTIF="Themes/Motifs/(([[:alnum:]]+)/(${VERSION}))" - - # Define location we want to apply verifications to. - local LOCATION=${1} - - # Remove location from positional parameters, so only the option - # remain. - shift 1 - - # Look for options passed through positional parameters. - while true;do - - case "${1}" in - - --release ) - echo "${LOCATION}" | egrep "${VERSION}" | sed -r "s!.*/${VERSION}/.*!\1!" - shift 1 - break - ;; - - --release-major ) - echo "${LOCATION}" | egrep "${VERSION}" | sed -r "s!.*/${VERSION}/.*!\2!" - shift 1 - break - ;; - - --release-minor ) - echo "${LOCATION}" | egrep "${VERSION}" | sed -r "s!.*/${VERSION}/.*!\4!" - shift 1 - break - ;; - - --release-pattern ) - echo "${VERSION}" - shift 1 - break - ;; - - --architecture ) - echo "${LOCATION}" | egrep "${ARCHITECTURE}" | sed -r "s!${ARCHITECTURE}!\1!" - shift 1 - break - ;; - - --architecture-pattern ) - echo "${ARCHITECTURE}" - shift 1 - break - ;; - - --motif ) - echo "${LOCATION}" | egrep "${THEME_MOTIF}" | sed -r "s!.*${THEME_MOTIF}.*!\1!" - shift 1 - break - ;; - - --motif-name ) - echo "${LOCATION}" | egrep "${THEME_MOTIF}" | sed -r "s!.*${THEME_MOTIF}.*!\2!" - shift 1 - break - ;; - - --motif-version ) - echo "${LOCATION}" | egrep "${THEME_MOTIF}" | sed -r "s!.*${THEME_MOTIF}.*!\3!" - shift 1 - break - ;; - - --motif-pattern ) - echo "${THEME_MOTIF}" - shift 1 - break - ;; - - --repo-dir ) - echo "${LOCATION}" | sed "s,${TCAR_USER_WRKDIR}/,," - shift 1 - break - ;; - - esac - - done - -} diff --git a/tcar-scripts/tcar_getRepoName.sh b/tcar-scripts/tcar_getRepoName.sh deleted file mode 100755 index b572bf0..0000000 --- a/tcar-scripts/tcar_getRepoName.sh +++ /dev/null @@ -1,135 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_getRepoName.sh -- This function standardizes files and -# directories name convection inside the working copy of CentOS -# Artowrk Repository. As convection, regular files are written in -# lower-case and directories are written capitalized. Use this -# function to sanitate the name of regular files and directories on -# paths you work with. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_getRepoName { - - # Define the name we want to apply verifications to. - local NAME="${1}" - - # Avoid using options as it were names. When name value is empty - # but an option is provided, the option becomes the first - # positional argument and is evaluated as it were a name which is - # something we need to prevent from happening. - if [[ ${NAME} =~ '^-' ]];then - return - fi - - # Look for options passed through positional parameters. - case "${2}" in - - -f|--basename ) - - # Reduce the path passed to use just the non-directory - # part of it (i.e., the last component in the path; _not_ - # the last "real" directory in the path). - NAME=$(basename ${NAME}) - - # Clean value. - NAME=$(echo ${NAME} \ - | tr -s ' ' '_' \ - | tr '[:upper:]' '[:lower:]') - ;; - - -d|--dirname ) - - local DIR='' - local DIRS='' - local CLEANDIRS='' - local PREFIXDIR='' - - # In order to sanitate each directory in a path, it is - # required to break off the path string so each component - # can be worked out individually and later combine them - # back to create a clean path string. - - # Reduce path information passed to use the directory part - # of it only. Of course, this is applied if there is a - # directory part in the path. Assuming there is no - # directory part but a non-empty value in the path, use - # that value as directory part and clean it up. - if [[ ${NAME} =~ '.+/.+' ]];then - - # When path information is reduced, we need to - # consider that absolute paths contain some - # directories outside the working copy directory - # structure that shouldn't be sanitized (e.g., /home, - # /home/centos, /home/centos/artwork, - # /home/centos/artwork/turnk, trunk, etc.) So, we keep - # them unchanged for later use. - PREFIXDIR=$(echo ${NAME} \ - | sed -r "s,^((${TCAR_USER_WRKDIR}/)?(trunk|branches|tags)/)?.+$,\1,") - - # ... and remove them from the path information we do - # want to sanitate. - DIRS=$(dirname "${NAME}" \ - | sed -r "s!^${PREFIXDIR}!!" \ - | tr '/' ' ') - - else - - # At this point, there is not directory part in the - # information passed, so use the value passed as - # directory part as such. - DIRS=${NAME} - - fi - - for DIR in ${DIRS};do - - # Sanitate directory component. - if [[ ${DIR} =~ '^[a-z]' ]];then - DIR=$(echo ${DIR} \ - | tr -s ' ' '_' \ - | tr '[:upper:]' '[:lower:]' \ - | sed -r 's/^([[:alpha:]])/\u\1/') - fi - - # Rebuild path using sanitized values. - CLEANDIRS="${CLEANDIRS}/${DIR}" - - done - - # Redefine path using sanitized values. - NAME=$(echo ${CLEANDIRS} | sed -r "s!^/!!") - - # Add prefix directory information to sanitate path - # information. - if [[ "${PREFIXDIR}" != '' ]];then - NAME=${PREFIXDIR}${NAME} - fi - ;; - - esac - - # Print out the clean path string. - echo ${NAME} - -} diff --git a/tcar-scripts/tcar_getTemporalFile.sh b/tcar-scripts/tcar_getTemporalFile.sh deleted file mode 100755 index 7a7e61b..0000000 --- a/tcar-scripts/tcar_getTemporalFile.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_getTemporalFile.sh -- This function returns the absolute path -# you need to use to create temporal files. Use this function -# whenever you need to create temporal files inside tcar.sh -# script. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_getTemporalFile { - - # Reset text domain locally, in order to prevent this function - # from using the last text domain definition. By default all - # common functions do use the same MO file. - local TEXTDOMAIN="${TCAR_SCRIPT_PACKAGE}" - - # Define base name for temporal file. This is required when svg - # instances are created previous to be parsed by inkscape in order - # to be exported as png. In such cases .svg file extension is - # required in order to avoid complains from inkscape. - local FILENAME="${RANDOM}${RANDOM}-$(tcar_getRepoName ${1} -f)" - - # Check default base name for temporal file, it can't be an empty - # value. - if [[ -z "${FILENAME}" ]];then - tcar_printMessage "`gettext "The first argument cannot be empty."`" --as-error-line - fi - - # Define absolute path for temporal file and send it out to - # standard output. - echo "${TCAR_SCRIPT_TEMPDIR}/${FILENAME}" - -} diff --git a/tcar-scripts/tcar_printCaller.sh b/tcar-scripts/tcar_printCaller.sh deleted file mode 100755 index cb537a4..0000000 --- a/tcar-scripts/tcar_printCaller.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_printCaller.sh -- This function standardizes the way caller -# information is retrieved. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_printCaller { - - local EXPR=${1} - local OPTS=${2} - - case ${OPTS} in - - --line ) - caller ${EXPR} | gawk '{ print $1 }' - ;; - - --name ) - caller ${EXPR} | gawk '{ print $2 }' - ;; - - --path ) - caller ${EXPR} | gawk '{ print $3 }' - ;; - - * ) - # Define where the error was originated inside the - # tcar.sh script. Print out the function name and - # line from the caller. - caller ${EXPR} | gawk '{ print $2 " L." $1 }' - ;; - - esac - -} diff --git a/tcar-scripts/tcar_printCopyrightInfo.sh b/tcar-scripts/tcar_printCopyrightInfo.sh deleted file mode 100755 index a5f8d58..0000000 --- a/tcar-scripts/tcar_printCopyrightInfo.sh +++ /dev/null @@ -1,136 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_printCopyrightInfo.sh -- This function standardizes the -# copyright information printed on content produced by tcar.sh -# script. -# -# As far as I understand, the copyright exists to make people create -# more. The copyright gives creators the legal power over their -# creations and so the freedom to distribute them under the ethical -# terms the creator considers better. At this moment I don't feel -# very confident about this legal affairs and their legal -# implications, but I need to decide what copyright information the -# tcar.sh script will print out when someone request -# information about it. So, in that sake, I am using The CentOS -# Artwork SIG as copyright holder and the GNU Public License, -# version 2 or any later, for software distribution. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_printCopyrightInfo { - - # Reset text domain locally, in order to prevent this function - # from using the last text domain definition. By default all - # common functions do use the same MO file. - local TEXTDOMAIN="${TCAR_SCRIPT_PACKAGE}" - - case "${1}" in - - --license ) - - # Print the license name. - echo "`gettext "Creative Common Attribution-ShareAlike 3.0 License"`" - ;; - - --license-url ) - - # Print the url related to license name. - tcar_printUrl --cc-sharealike - ;; - - --first-year ) - - # The former year when I (as collaborator of The CentOS - # Project) started to consolidate The CentOS Project - # Corporate Visual Identity through the CentOS Artwork - # Repository. - echo '2009' - ;; - - --year|--last-year) - - # The software release year. This information should never - # be the current year. Instead, to make this information - # maintainable, relay on tcar package build-time. - rpm -q --qf "%{BUILDTIME:date}" tcar | gawk '{ print $4 }' - ;; - - --years-range ) - - local FIRST_YEAR=$(tcar_printCopyrightInfo --first-year) - local LAST_YEAR=$(tcar_printCopyrightInfo --last-year) - echo "${FIRST_YEAR}-${LAST_YEAR}" - ;; - - --years-list ) - - local FIRST_YEAR=$(tcar_printCopyrightInfo --first-year) - local LAST_YEAR=$(tcar_printCopyrightInfo --last-year) - - # Define full copyright year string based on first and - # last year. - local FULL_YEAR=$(\ - while [[ ${FIRST_YEAR} -le ${LAST_YEAR} ]];do - echo -n "${FIRST_YEAR}, " - FIRST_YEAR=$((${FIRST_YEAR} + 1)) - done) - - # Prepare full copyright year string and print it out. - echo "${FULL_YEAR}" | sed 's!, *$!!' - ;; - - --holder ) - - # Print tcar.sh script default copyright holder. Be - # pragmatic about this information, please. The CentOS - # Project exists to produce The CentOS Distribution, not - # tcar.sh script. Nevertheless, The CentOS Artwork SIG is - # an organizational unit of The CentOS Project which is - # focused on producing The CentOS Project corporate visual - # identity, by means of The CentOS Artwork Repository. - # The tcar.sh script automates frequent tasks inside The - # CentOS Artwork Repository so, based on these - # considerations, the copyright holder of the tcar.sh - # script is "closer" to be The CentOS Artwork SIG than it - # would be The CentOS Project. These are the logical - # choosing ideas behind the copyright holder of tcar.sh - # script. - echo "`gettext "The CentOS Artwork SIG"`" - ;; - - --holder-predicate ) - - local HOLDER=$(tcar_printCopyrightInfo --holder) - echo "${HOLDER}. `gettext "All rights reserved."`" - ;; - - * ) - - local YEAR=$(tcar_printCopyrightInfo --last-year) - local HOLDER=$(tcar_printCopyrightInfo --holder) - echo "Copyright © ${YEAR} ${HOLDER}" - ;; - - esac - -} diff --git a/tcar-scripts/tcar_printFile.sh b/tcar-scripts/tcar_printFile.sh deleted file mode 100755 index 5ef5047..0000000 --- a/tcar-scripts/tcar_printFile.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_printFile.sh -- This function standardizes the way files are -# concatenated inside tcar.sh script. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_printFile { - - # Define absolute path to file you want to print. Take into - # consideration that this file might be out of the repository - # (e.g., it would be a temporal file stored under - # /tmp/tcar-XXXXXX/ directory). - local FILE="${1}" - - tcar_checkFiles -ef ${FILE} - - if [[ $(/usr/bin/file -b -i ${FILE}) =~ '^application/x-gzip$' ]];then - /bin/zcat ${FILE} - elif [[ $(/usr/bin/file -b -i ${FILE}) =~ '^application/x-bzip2$' ]];then - /bin/bzcat ${FILE} - else - /bin/cat ${FILE} - fi - -} diff --git a/tcar-scripts/tcar_printHelp.sh b/tcar-scripts/tcar_printHelp.sh deleted file mode 100755 index b48eef9..0000000 --- a/tcar-scripts/tcar_printHelp.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_printHelp.sh -- This function standardizes the way -# tcar.sh script prints help about itself. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_printHelp { - - # Retrieve the man page name. This is the file name you want to retrieve - # documentation for. This value is optional. When it is not passed, the - # module name is used. - local TCAR_MANPAGE_NAME="${1:-${TCAR_MODULE_NAME}}" - - # When the module name has not been set and the tcar_printHelp - # function is called from tcar.sh file, the page name come - # with with --help as opening string and probably as - # --help=filename.sh. In the first case it prints the script - # documentation. In the second case it prints documentation for - # the file specified. - if [[ -z ${TCAR_MODULE_NAME} ]];then - if [[ ${TCAR_MANPAGE_NAME} =~ '^--help=[[:alnum:]_-.]+' ]];then - TCAR_MANPAGE_NAME=$(echo ${TCAR_MANPAGE_NAME} | cut -d'=' -f2) - else - TCAR_MANPAGE_NAME=${TCAR_SCRIPT_PACKAGE} - fi - fi - - # Print requested documentation. - /usr/bin/man -M ${TCAR_SCRIPT_DIR_MANUALS}:${TCAR_MODULE_DIR_MANUALS}/Final "${TCAR_MANPAGE_NAME}" - - # Finish script execution successfully. - exit 0 - -} diff --git a/tcar-scripts/tcar_printMailingList.sh b/tcar-scripts/tcar_printMailingList.sh deleted file mode 100755 index 662aea7..0000000 --- a/tcar-scripts/tcar_printMailingList.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_printMailingList.sh -- This function standardizes the way -# mailing list addresses are printed on content produced by -# tcar.sh script. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_printMailingList { - - local MAILADDRS='' - - # Define short options. - local ARGSS='' - - # Define long options. - local ARGSL='as-html-link:,docs' - - # Initialize arguments with an empty value and set it as local - # variable to this function scope. Doing this is very important to - # avoid any clash with higher execution environments. - local TCAR_MODULE_ARGUMENT='' - - # Process all arguments currently available in this function - # environment. If either ARGSS or ARGSL local variables have been - # defined, argument processing goes through getopt for validation. - tcar_setModuleArguments "${@}" - - # Redefine positional parameters using TCAR_MODULE_ARGUMENT variable. - eval set -- "${TCAR_MODULE_ARGUMENT}" - - # Look for options passed through command-line. - while true; do - case "${1}" in - - --docs ) - MAILADDRS="${TCAR_BRAND}-docs@$(tcar_printUrl --domain)" - shift 1 - ;; - - --as-html-link ) - MAILADDRS="${2}" - shift 2 - ;; - - -- ) - - shift 1 - break - ;; - esac - done - - # Print mail address. - echo "${MAILADDRS}" - -} diff --git a/tcar-scripts/tcar_printMessage.sh b/tcar-scripts/tcar_printMessage.sh deleted file mode 100755 index cc1b324..0000000 --- a/tcar-scripts/tcar_printMessage.sh +++ /dev/null @@ -1,304 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_printMessage.sh -- This function standardizes the way messages -# are printed by tcar.sh script. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_printMessage { - - # Reset text domain locally, in order to prevent this function - # from using the last text domain definition. By default all - # common functions do use the same MO file. - local TEXTDOMAIN="${TCAR_SCRIPT_PACKAGE}" - - local MESSAGE="${1}" - local FORMAT="${2}" - - # Verify message variable, it cannot have an empty value. - if [[ -z ${MESSAGE} ]];then - tcar_printMessage "`gettext "The message cannot be empty."`" --as-error-line - fi - - # Define message horizontal width. This is the max number of - # horizontal characters the message will use to be displayed on - # the screen. - local MESSAGE_WIDTH=66 - - # Remove empty spaces from message. - MESSAGE=$(printf %s "${MESSAGE}" | sed -r -e 's!^[[:space:]]+!!') - - # Print messages that will always be printed no matter what value - # the TCAR_FLAG_QUIET variable has. - case "${FORMAT}" in - - --as-stdout-line* ) - - local MARGIN_LEFT=15 - if [[ ${FORMAT} =~ '--as-stdout-line=[[:digit:]]+' ]];then - MARGIN_LEFT=$(echo ${FORMAT} | cut -d'=' -f2) - fi - - # Default printing format. This is the format used when no - # other specification is passed to this function. As - # convenience, we transform absolute paths into relative - # paths in order to free horizontal space on final output - # messages. - printf %s "${MESSAGE}" | sed -r \ - -e "s!${TCAR_BASEDIR}/!!g" \ - -e "s!> /!> !g" \ - -e "s!/{2,}!/!g" \ - | gawk 'BEGIN { FS=": " } - { - if ( $0 ~ /^-+$/ ) - print $0 - else - printf "%-'${MARGIN_LEFT}'s\t%s\n", $1, $2 - } - END {}' - ;; - - --as-error-line ) - - # Build the error trail. This is very useful for tracking - # the error down. - tcar_printMessage '-' --as-separator-line - tcar_printMessage "${FUNCNAME[*]}" --as-tree-line - - # Build the error message. - tcar_printMessage '-' --as-separator-line - tcar_printMessage "$(tcar_printCaller 1) ${MESSAGE}" --as-stderr-line - tcar_printMessage '-' --as-separator-line - - # Finish script execution with exit status 1 (SIGHUP) to - # imply the script finished because an error. We are - # using this as convention to finish the script execution. - # So, don't remove the following line, please. - exit 1 - ;; - - --as-debugger-line ) - if [[ ${TCAR_FLAG_DEBUG} == 'true' ]];then - tcar_printMessage "$(date +"%c") ${MESSAGE}" --as-stdout-line=60 - else - return - fi - ;; - - --as-tree-line ) - local NAME - local -a FN - for NAME in ${MESSAGE};do - FN[++((${#FN[*]}))]=${NAME} - done - local COUNT=$(( ${#FN[*]} - 2 )) - local SEPARATOR='`--' - local SPACES=0 - echo "${TCAR_SCRIPT_BASEDIR}/${TCAR_SCRIPT_PACKAGE}" 1>&2 - while [[ ${COUNT} -gt 0 ]];do - if [[ ${COUNT} -eq $(( ${#FN[*]} - 2 )) ]];then - echo ${SEPARATOR} ${FN[${COUNT}]} 1>&2 - else - echo ${FN[${COUNT}]} \ - | gawk '{ printf "%'${SPACES}'s%s %s\n", "", "'${SEPARATOR}'", $1 }' 1>&2 - fi - COUNT=$((${COUNT} - 1)) - SPACES=$((${SPACES} + 4)) - done - ;; - - --as-toknowmore-line ) - tcar_printMessage "`gettext "To know more, run"` ${TCAR_SCRIPT_PACKAGE} ${MESSAGE} --help" --as-stderr-line - ;; - - --as-yesornorequest-line ) - - # Define positive answer. - local Y="`gettext "yes"`" - - # Define negative answer. - local N="`gettext "no"`" - - # Define default answer. - local ANSWER=${N} - - if [[ ${TCAR_FLAG_YES} == 'true' ]];then - - ANSWER=${Y} - - else - - # Print the question to standard error. - tcar_printMessage "${MESSAGE} [${Y}/${N}]" --as-request-line - - # Redefine default answer based on user's input. - read ANSWER - - fi - - # Verify user's answer. Only positive answer let the - # script flow to continue. Otherwise, if something - # different from positive answer is passed, the script - # terminates its execution immediately. - if [[ ! ${ANSWER} =~ "^${Y}" ]];then - exit - fi - ;; - - --as-selection-line ) - # Create selection based on message. - local NAME='' - select NAME in ${MESSAGE};do - echo ${NAME} - break - done - ;; - - --as-response-line ) - tcar_printMessage "--> ${MESSAGE}" --as-stderr-line - ;; - - --as-request-line ) - tcar_printMessage "${MESSAGE}:\040" --as-notrailingnew-line - ;; - - --as-notrailingnew-line ) - echo -e -n "${MESSAGE}" | sed -r \ - -e "s!${TCAR_BASEDIR}/!!g" 1>&2 - ;; - - --as-stderr-line ) - echo "${MESSAGE}" | sed -r \ - -e "s!${TCAR_BASEDIR}/!!g" 1>&2 - ;; - - esac - - # Verify quiet option. The quiet option controls whether messages - # are printed or not. - if [[ "${TCAR_FLAG_QUIET}" == 'true' ]];then - return - fi - - # Print messages that will be printed only when the TCAR_FLAG_QUIET - # variable is provided to tcar.sh script. - case "${FORMAT}" in - - --as-separator-line ) - - # Build the separator line. - MESSAGE=$(\ - until [[ ${MESSAGE_WIDTH} -eq 0 ]];do - echo -n "$(echo ${MESSAGE} | sed -r 's!(.).*!\1!')" - MESSAGE_WIDTH=$((${MESSAGE_WIDTH} - 1)) - done) - - # Draw the separator line. - echo "${MESSAGE}" 1>&2 - ;; - - --as-banner-line ) - tcar_printMessage '-' --as-separator-line - tcar_printMessage "${MESSAGE}" --as-stdout-line - tcar_printMessage '-' --as-separator-line - ;; - - --as-processing-line ) - tcar_printMessage "`gettext "Processing"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-cropping-line ) - tcar_printMessage "`gettext "Cropping from"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-tuningup-line ) - tcar_printMessage "`gettext "Tuning-up"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-checking-line ) - tcar_printMessage "`gettext "Checking"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-combining-line ) - tcar_printMessage "`gettext "Combining"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-editing-line ) - tcar_printMessage "`gettext "Editing"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-creating-line | --as-updating-line ) - if [[ -a "${MESSAGE}" ]];then - tcar_printMessage "`gettext "Updating"`: ${MESSAGE}" --as-stdout-line - else - tcar_printMessage "`gettext "Creating"`: ${MESSAGE}" --as-stdout-line - fi - ;; - - --as-deleting-line ) - tcar_printMessage "`gettext "Deleting"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-reading-line ) - tcar_printMessage "`gettext "Reading"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-savedas-line ) - tcar_printMessage "`gettext "Saved as"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-linkto-line ) - tcar_printMessage "`gettext "Linked to"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-movedto-line ) - tcar_printMessage "`gettext "Moved to"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-translation-line ) - tcar_printMessage "`gettext "Translation"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-translating-line ) - tcar_printMessage "`gettext "Translating"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-validating-line ) - tcar_printMessage "`gettext "Validating"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-template-line ) - tcar_printMessage "`gettext "Template"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-configuration-line ) - tcar_printMessage "`gettext "Configuration"`: ${MESSAGE}" --as-stdout-line - ;; - - --as-palette-line ) - tcar_printMessage "`gettext "Palette"`: ${MESSAGE}" --as-stdout-line - ;; - - esac - -} diff --git a/tcar-scripts/tcar_printUrl.sh b/tcar-scripts/tcar_printUrl.sh deleted file mode 100755 index a7f3992..0000000 --- a/tcar-scripts/tcar_printUrl.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_printUrl.sh -- This function standardizes the way URLs are -# printed by tcar.sh script. This function describes the -# domain organization of The CentOS Project through its URLs and -# provides a way to print them out when needed. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_printUrl { - - local URL='' - - # Define short options. - local ARGSS='' - - # Define long options. - local ARGSL='domain,home,lists,wiki,forums,bugs,planet,docs,mirrors,projects,svn,trac,irc,cc-sharealike,with-locale,as-html-link' - - # Initialize arguments with an empty value and set it as local - # variable to this function scope. Doing this is very important to - # avoid any clash with higher execution environments. - local TCAR_MODULE_ARGUMENT='' - - # Process all arguments currently available in this function - # environment. If either ARGSS or ARGSL local variables have been - # defined, argument processing goes through getopt for validation. - tcar_setModuleArguments "${@}" - - # Redefine positional parameters using TCAR_MODULE_ARGUMENT variable. - eval set -- "${TCAR_MODULE_ARGUMENT}" - - # Look for options passed through command-line. - while true; do - case "${1}" in - - --domain ) - URL="centos.org" - shift 1 - ;; - - --home ) - URL="http://www.$(tcar_printUrl --domain)/" - shift 1 - ;; - - --lists ) - URL="http://lists.$(tcar_printUrl --domain)/" - shift 1 - ;; - - --wiki ) - URL="http://wiki.$(tcar_printUrl --domain)/" - shift 1 - ;; - - --forums ) - URL="http://forums.$(tcar_printUrl --domain)/" - shift 1 - ;; - - --bugs ) - URL="http://bugs.$(tcar_printUrl --domain)/" - shift 1 - ;; - - --projects ) - URL="https://projects.$(tcar_printUrl --domain)/" - shift 1 - ;; - - --svn ) - URL="$(tcar_printUrl --projects)svn/" - shift 1 - ;; - - --trac ) - URL="$(tcar_printUrl --projects)trac/" - shift 1 - ;; - - --planet ) - URL="http://planet.$(tcar_printUrl --domain)/" - shift 1 - ;; - - --docs ) - URL="http://docs.$(tcar_printUrl --domain)/" - shift 1 - ;; - - --mirrors ) - URL="http://mirrors.$(tcar_printUrl --domain)/" - shift 1 - ;; - - --irc ) - URL="http://$(tcar_printUrl --home)modules/tinycontent/index.php?id=8" - shift 1 - ;; - - --cc-sharealike ) - URL="http://creativecommons.org/licenses/by-sa/3.0/" - shift 1 - ;; - - --with-locale ) - if [[ ! ${LANG} =~ '^en' ]];then - URL="${URL}${TCAR_SCRIPT_LANG_LL}/" - fi - shift 1 - ;; - - --as-html-link ) - URL="${URL}" - shift 1 - ;; - - -- ) - - shift 1 - break - ;; - esac - done - - # Print Url. - echo "${URL}" - -} diff --git a/tcar-scripts/tcar_printVersion.sh b/tcar-scripts/tcar_printVersion.sh deleted file mode 100755 index efebabc..0000000 --- a/tcar-scripts/tcar_printVersion.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_printVersion.sh -- This function standardizes the way -# tcar.sh script prints version about itself. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_printVersion { - - # Reset text domain locally, in order to prevent this function - # from using the last text domain definition. By default all - # common functions do use the same MO file. - local TEXTDOMAIN="${TCAR_SCRIPT_PACKAGE}" - - local PROGRAM_NAME=${1:-${TCAR_SCRIPT_PACKAGE}} - local YEAR=$(tcar_printCopyrightInfo --year) - local HOLDER=$(tcar_printCopyrightInfo --holder) - - if [[ ${PROGRAM_NAME} == ${TCAR_SCRIPT_PACKAGE} ]];then - tcar_printMessage "${TCAR_SCRIPT_PACKAGE} ${TCAR_SCRIPT_VERSION}" --as-stdout-line - else - tcar_printMessage "${PROGRAM_NAME} (${TCAR_SCRIPT_PACKAGE}) ${TCAR_SCRIPT_VERSION}" --as-stdout-line - fi - tcar_printMessage "Copyright (C) ${YEAR} ${HOLDER}" --as-stdout-line - tcar_printMessage "`eval_gettext "\\\$PROGRAM_NAME comes with NO WARRANTY, to the extent permitted by law. You may redistribute copies of \\\$PROGRAM_NAME under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING."`" --as-stdout-line | fold --width=66 --spaces - - exit 0 - -} diff --git a/tcar-scripts/tcar_setModuleArguments.sh b/tcar-scripts/tcar_setModuleArguments.sh deleted file mode 100755 index 5d32e96..0000000 --- a/tcar-scripts/tcar_setModuleArguments.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_setModuleArguments.sh -- This function uses getopt to process -# arguments passed to tcar.sh script. -# -# This function works with the following three variables: -# -# ARGSS -# Stores getopt short arguments definition. -# -# ARGSL -# Stores getopt long arguments definition. -# -# TCAR_MODULE_ARGUMENT -# Stores arguments passed to functions or command-line -# interface depending the context it is defined. -# -# These three variables are not defined in this function but the -# function environment you want to provide option parsing for, -# through getopt command. Using local definition for these three -# variables let you to nest option parsing inside different -# function-environment levels. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_setModuleArguments { - - # Reset text domain locally, in order to prevent this function - # from using the last text domain definition. By default all - # common functions do use the same MO file. - local TEXTDOMAIN="${TCAR_SCRIPT_PACKAGE}" - - # Verify non-option arguments passed to command-line. If there - # isn't any or dot is provided, redefine the TCAR_MODULE_ARGUMENT - # variable to use the current location the tcar.sh script - # was called from. - if [[ -z "${TCAR_MODULE_ARGUMENT}" ]];then - TCAR_MODULE_ARGUMENT=${PWD} - fi - - # Verify presence of either short or long options in the - # environment. If they are present apply option validation through - # getopt. - if [[ ! -z ${ARGSS} ]] || [[ ! -z ${ARGSL} ]];then - - # Redefine positional parameters using TCAR_MODULE_ARGUMENT variable. - eval set -- "${TCAR_MODULE_ARGUMENT}" - - # Process positional parameters using getopt's option validation. - TCAR_MODULE_ARGUMENT=$(getopt -o "${ARGSS}" -l "${ARGSL}" \ - -n "${TCAR_SCRIPT_PACKAGE} (${TCAR_MODULE_NAME})" -- "${@}") - - # Verify getopt's exit status and finish the script execution - # with an error message, if it failed. - if [[ $? -ne 0 ]];then - tcar_printMessage "`gettext "The argument verification failed."`" --as-error-line - fi - - fi - -} diff --git a/tcar-scripts/tcar_setModuleEnvironment.sh b/tcar-scripts/tcar_setModuleEnvironment.sh deleted file mode 100755 index 12af7a6..0000000 --- a/tcar-scripts/tcar_setModuleEnvironment.sh +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_setModuleEnvironment.sh -- This function initiates module -# environments inside the tcar.sh script. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_setModuleEnvironment { - - local ARG_MODULE_NAME='' - local ARG_MODULE_TYPE='' - local ARG_MODULE_ARGS='' - - # Retrieve module's name and module's type from arguments passed - # through this function positional parameters. - OPTIND=1 - while getopts "m:,t:,g:" OPTION "${@}"; do - case "${OPTION}" in - m ) ARG_MODULE_NAME="${OPTARG}" ;; - t ) ARG_MODULE_TYPE="${OPTARG}" ;; - g ) ARG_MODULE_ARGS="${OPTARG} ${ARG_MODULE_ARGS}" ;; - esac - done - - # Clean up positional parameters to reflect the fact that options - # have been processed already. - shift $(( ${OPTIND} - 1 )) - - # Initialize module's global counter. - TCAR_MODULE_COUNT=${TCAR_MODULE_COUNT:-0} - - # When the last module in the chain of executed modules is the - # same module being currently executed, don't create a new - # position for it in the chain of modules. Instead, use the - # information it already has from its previous execution. In order - # for this to work, the current module must be executed as sibling - # module of other module or itself. - if [[ ${TCAR_MODULE_COUNT} -gt 0 ]];then - if [[ ${TCAR_MODULE_NAMES[((${TCAR_MODULE_COUNT} - 1))]} == ${ARG_MODULE_NAME} ]];then - if [[ ${ARG_MODULE_TYPE} == 'sibling' ]];then - tcar_printMessage '~~~~~~~~~~~~~~~~~~~~~~~~~> : '"${TCAR_MODULE_NAME} ${TCAR_MODULE_ARGUMENT}" --as-debugger-line - ${ARG_MODULE_NAME} ${ARG_MODULE_ARGS} ${@} - return - fi - fi - fi - - tcar_printMessage '=========================>: ['${TCAR_MODULE_COUNT}'] | '${FUNCNAME[1]} --as-debugger-line - - # Define module's base directory. This is the directory where the - # initialization script is stored in. - local TCAR_MODULE_BASEDIR=${TCAR_SCRIPT_MODULES_BASEDIR} - if [[ ${#TCAR_MODULE_BASEDIRS[*]} -gt 0 ]];then - if [[ ${ARG_MODULE_TYPE} == "parent" ]];then - TCAR_MODULE_BASEDIR=${TCAR_SCRIPT_MODULES_BASEDIR} - elif [[ ${ARG_MODULE_TYPE} == "sibling" ]];then - if [[ ${TCAR_MODULE_TYPES[((${TCAR_MODULE_COUNT} - 1 ))]} == 'sibling' ]];then - TCAR_MODULE_BASEDIR=${TCAR_MODULE_BASEDIRS[((${TCAR_MODULE_COUNT}-2))]} - else - TCAR_MODULE_BASEDIR=${TCAR_MODULE_BASEDIRS[((${TCAR_MODULE_COUNT}-1))]} - fi - else - TCAR_MODULE_BASEDIR=${TCAR_MODULE_BASEDIRS[${TCAR_MODULE_COUNT}]} - fi - fi - tcar_printMessage "TCAR_MODULE_BASEDIR : ${TCAR_MODULE_BASEDIR}" --as-debugger-line - - # Define module's name. - TCAR_MODULE_NAMES[${TCAR_MODULE_COUNT}]=$(tcar_getRepoName "${ARG_MODULE_NAME:-unknown}" "-f" | cut -d '-' -f1) - local TCAR_MODULE_NAME=${TCAR_MODULE_NAMES[${TCAR_MODULE_COUNT}]} - tcar_printMessage "TCAR_MODULE_NAME : [${TCAR_MODULE_COUNT}]=${TCAR_MODULE_NAME}" --as-debugger-line - - # Define module's type. - TCAR_MODULE_TYPES[${TCAR_MODULE_COUNT}]="${ARG_MODULE_TYPE:-parent}" - local TCAR_MODULE_TYPE=${TCAR_MODULE_TYPES[${TCAR_MODULE_COUNT}]} - tcar_printMessage "TCAR_MODULE_TYPE : ${TCAR_MODULE_TYPE}" --as-debugger-line - - # Define module's arguments. This variable is used in different - # module environments to pass positional parameters from one - # environment to another using local definitions. - TCAR_MODULE_ARGUMENTS[${TCAR_MODULE_COUNT}]="${ARG_MODULE_ARGS:-} ${@}" - local TCAR_MODULE_ARGUMENT=${TCAR_MODULE_ARGUMENTS[${TCAR_MODULE_COUNT}]} - tcar_printMessage "TCAR_MODULE_ARGUMENT : ${TCAR_MODULE_ARGUMENT}" --as-debugger-line - - # Check module's name possible values. - tcar_checkModuleName - - # Define module's directory. - TCAR_MODULE_DIRS[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_BASEDIR}/$(tcar_getRepoName "${TCAR_MODULE_NAME}" "-d") - local TCAR_MODULE_DIR=${TCAR_MODULE_DIRS[${TCAR_MODULE_COUNT}]} - tcar_printMessage "TCAR_MODULE_DIR : ${TCAR_MODULE_DIR}" --as-debugger-line - - # Define module's directories not reused from module's parent - # directory structure. - TCAR_MODULE_DIRS_MODULES[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIR}/Modules - local TCAR_MODULE_DIR_MODULES=${TCAR_MODULE_DIRS_MODULES[${TCAR_MODULE_COUNT}]} - tcar_printMessage "TCAR_MODULE_DIR_MODULES : ${TCAR_MODULE_DIR_MODULES}" --as-debugger-line - - TCAR_MODULE_DIRS_CONFIGS[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIR}/Configs - local TCAR_MODULE_DIR_CONFIGS=${TCAR_MODULE_DIRS_CONFIGS[${TCAR_MODULE_COUNT}]} - tcar_printMessage "TCAR_MODULE_DIR_CONFIGS : ${TCAR_MODULE_DIR_CONFIGS}" --as-debugger-line - - # Define module's directories reused from module's parent - # directory structure. - TCAR_MODULE_DIRS_MANUALS[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIRS[0]}/Manuals - local TCAR_MODULE_DIR_MANUALS=${TCAR_MODULE_DIRS_MANUALS[${TCAR_MODULE_COUNT}]} - tcar_printMessage "TCAR_MODULE_DIR_MANUALS : ${TCAR_MODULE_DIR_MANUALS}" --as-debugger-line - - TCAR_MODULE_DIRS_LOCALES[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIRS[0]}/Locales - local TCAR_MODULE_DIR_LOCALES=${TCAR_MODULE_DIRS_LOCALES[${TCAR_MODULE_COUNT}]} - tcar_printMessage "TCAR_MODULE_DIR_LOCALES : ${TCAR_MODULE_DIR_LOCALES}" --as-debugger-line - - # Define module's initialization file. - TCAR_MODULE_INIT_FILES[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIR}/${TCAR_MODULE_NAME}.sh - local TCAR_MODULE_INIT_FILE=${TCAR_MODULE_INIT_FILES[${TCAR_MODULE_COUNT}]} - tcar_printMessage "TCAR_MODULE_INIT_FILE : ${TCAR_MODULE_INIT_FILE}" --as-debugger-line - - # Define module's connection with their localization files. It is - # required that gettext-specific variables be defined locally, in - # order to implement per-module localization. - local TEXTDOMAIN=$(basename ${TCAR_MODULE_INIT_FILE}) - tcar_printMessage "TEXTDOMAIN: ${TEXTDOMAIN}" --as-debugger-line - - # Increment module's counter just before creating next module's - # base directory. - TCAR_MODULE_COUNT=$(( ${TCAR_MODULE_COUNT} + 1 )) - - # Define next module's base directory. - TCAR_MODULE_BASEDIRS[${TCAR_MODULE_COUNT}]=${TCAR_MODULE_DIR_MODULES} - - # Check function script execution rights. - tcar_checkFiles -ex ${TCAR_MODULE_INIT_FILE} - - # Load module-specific (function) scripts into current execution - # environment. Keep the tcar_setModuleEnvironmentScripts function - # call after all variables and arguments definitions. - tcar_setModuleEnvironmentScripts - - # Execute module's initialization script with its arguments. - tcar_printMessage '-------------------------> : '"${TCAR_MODULE_NAME} ${TCAR_MODULE_ARGUMENT}" --as-debugger-line - ${TCAR_MODULE_NAME} ${TCAR_MODULE_ARGUMENT} - - # Unset module-specific environment. - tcar_printMessage '<------------------------- : '"${TCAR_MODULE_NAME} ${TCAR_MODULE_ARGUMENT}" --as-debugger-line - tcar_unsetModuleEnvironment - - # Decrement module counter just after unset unused module - # environments. - TCAR_MODULE_COUNT=$(( ${TCAR_MODULE_COUNT} - 1 )) - - # Unset array and non-array variables used in this function. - if [[ ${TCAR_MODULE_COUNT} -eq 0 ]];then - unset TCAR_MODULE_NAMES - unset TCAR_MODULE_BASEDIRS - unset TCAR_MODULE_DIRS - unset TCAR_MODULE_DIRS_MODULES - unset TCAR_MODULE_DIRS_MANUALS - unset TCAR_MODULE_DIRS_LOCALES - unset TCAR_MODULE_DIRS_CONFIGS - unset TCAR_MODULE_NAME - unset TCAR_MODULE_DIR - unset TCAR_MODULE_DIR_MODULES - unset TCAR_MODULE_DIR_MANUALS - unset TCAR_MODULE_DIR_LOCALES - unset TCAR_MODULE_DIR_CONFIGS - fi - - tcar_printMessage '<=========================: ['${TCAR_MODULE_COUNT}'] | '${FUNCNAME[1]} --as-debugger-line - -} diff --git a/tcar-scripts/tcar_setModuleEnvironmentScripts.sh b/tcar-scripts/tcar_setModuleEnvironmentScripts.sh deleted file mode 100755 index 5d81439..0000000 --- a/tcar-scripts/tcar_setModuleEnvironmentScripts.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_setModuleEnvironmentScripts.sh -- This function standardizes -# the way specific functionalities are exported to tcar.sh -# script environment. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_setModuleEnvironmentScripts { - - # Reset text domain locally, in order to prevent this function - # from using the last text domain definition. By default all - # common functions do use the same MO file. - local TEXTDOMAIN="${TCAR_SCRIPT_PACKAGE}" - - # Define the pattern used to retrieve function names from function - # files. - local FUNCTION_PATTERN="^function[[:space:]]+${TCAR_MODULE_NAME}(_[[:alnum:]]+)?[[:space:]]+{[[:space:]]*$" - - # Define the list of files. - local TCAR_MODULE_SCRIPT='' - local TCAR_MODULE_SCRIPTS="${TCAR_MODULE_INIT_FILE}" - if [[ -d ${TCAR_MODULE_DIR} ]];then - TCAR_MODULE_SCRIPTS="${TCAR_MODULE_SCRIPTS} - $(tcar_getFilesList \ - -p "${TCAR_MODULE_DIR}/${TCAR_MODULE_NAME}_[[:alnum:]]+\.sh$" \ - -t 'f' ${TCAR_MODULE_DIR})" - fi - - # Verify the list of files. If no function file exists for the - # location specified stop the script execution. Otherwise the - # script will surely try to execute a function that haven't been - # exported yet and report an error about it. - if [[ -z ${TCAR_MODULE_SCRIPTS} ]];then - tcar_printMessage "${FUNCNAME}: `gettext "No function file was found."`" --as-error-line - fi - - # Process the list of files. - for TCAR_MODULE_SCRIPT in ${TCAR_MODULE_SCRIPTS};do - - # Verify the execution rights for function file. - tcar_checkFiles -ex ${TCAR_MODULE_SCRIPT} - - # Retrieve the function's name from function's file. - local TCAR_MODULE_SCRIPT_FN=$(egrep "${FUNCTION_PATTERN}" ${TCAR_MODULE_SCRIPT} \ - | gawk '{ print $2 }') - - # Verify function's name. It cannot be an empty value. - if [[ -z "${TCAR_MODULE_SCRIPT_FN}" ]];then - tcar_printMessage "`gettext "No function definition found."`" --as-error-line - fi - - # Verify that function files have not been already exported. - # If they have been already exported don't export them again. - # Instead, continue with the next function file in the list. - declare -F | gawk '{ print $3 }' | egrep "^${TCAR_MODULE_SCRIPT}$" > /dev/null - if [[ $? -eq 0 ]];then - continue - fi - - # Initialize the function file. - . ${TCAR_MODULE_SCRIPT} - - # Export the function names inside the file to current shell - # script environment. - export -f ${TCAR_MODULE_SCRIPT_FN} - - tcar_printMessage "export -f : ${TCAR_MODULE_SCRIPT_FN}" --as-debugger-line - - done - -} diff --git a/tcar-scripts/tcar_setTranslationMarkers.sh b/tcar-scripts/tcar_setTranslationMarkers.sh deleted file mode 100755 index 43d61bc..0000000 --- a/tcar-scripts/tcar_setTranslationMarkers.sh +++ /dev/null @@ -1,185 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_setTranslationMarkers.sh -- This function standardizes construction -# of translation markers and their related expansion. As convention, -# translation markers must be set inside source files (e.g., -# Docbook, Svg, etc.) and expanded inside temporal instances used to -# produce final contents. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_setTranslationMarkers { - - # Initialize variables. - local -a SRC - local -a DST - local COUNT=0 - local COUNTSRC=0 - local COUNTDST=0 - - # Define source location on which sed replacements take place. - local LOCATION="${1}" - - # Verify that source location does exist. - tcar_checkFiles -ef ${LOCATION} - - # Define copyright translation markers. - SRC[((++${#SRC[*]}))]='=COPYRIGHT_YEAR_FIRST=' - DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --first-year)" - SRC[((++${#SRC[*]}))]='=COPYRIGHT_YEAR(_LAST)?=' - DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --year)" - SRC[((++${#SRC[*]}))]='=COPYRIGHT_YEAR(S)?_LIST=' - DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --years-list)" - SRC[((++${#SRC[*]}))]='=COPYRIGHT_HOLDER=' - DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --holder)" - SRC[((++${#SRC[*]}))]='=COPYRIGHT_HOLDER_PREDICATE=' - DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --holder-predicate)" - - # Define license translation markers. - SRC[((++${#SRC[*]}))]='=LICENSE=' - DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --license)" - SRC[((++${#SRC[*]}))]='=LICENSE_URL=' - DST[((++${#DST[*]}))]="$(tcar_printCopyrightInfo --license-url)" - - # Define theme translation markers. - SRC[((++${#SRC[*]}))]='=THEME=' - DST[((++${#DST[*]}))]="$(tcar_getPathComponent ${RENDER_TARGET} --motif)" - SRC[((++${#SRC[*]}))]='=THEMENAME=' - DST[((++${#DST[*]}))]="$(tcar_getPathComponent ${RENDER_TARGET} --motif-name)" - SRC[((++${#SRC[*]}))]='=THEMERELEASE=' - DST[((++${#DST[*]}))]="$(tcar_getPathComponent ${RENDER_TARGET} --motif-version)" - - # Define url translation markers. - SRC[((++${#SRC[*]}))]='=URL=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--home' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_WIKI=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--wiki' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_LISTS=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--lists' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_FORUMS=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--forums' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_MIRRORS=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--mirrors' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_DOCS=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--docs' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_PROJECTS=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--projects' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_BUGS=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--bugs' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_SVN=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--svn' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_TRAC=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--trac' '--with-locale') - SRC[((++${#SRC[*]}))]='=URL_PLANET=' - DST[((++${#DST[*]}))]=$(tcar_printUrl '--planet' '--with-locale') - - # Define release translation markers. - SRC[((++${#SRC[*]}))]='=RELEASE=' - DST[((++${#DST[*]}))]=${RELEASE} - SRC[((++${#SRC[*]}))]='=MAJOR_RELEASE=' - DST[((++${#DST[*]}))]=${MAJOR_RELEASE} - - # Define emails translation markers. - SRC[((++${#SRC[*]}))]='=MAIL_DOCS=' - DST[((++${#DST[*]}))]="$(tcar_printMailingList --docs)" - - # Define locale translation markers. - SRC[((++${#SRC[*]}))]='=LOCALE=' - DST[((++${#DST[*]}))]="${TCAR_SCRIPT_LANG_LC}" - SRC[((++${#SRC[*]}))]='=LOCALE_LL=' - DST[((++${#DST[*]}))]="${TCAR_SCRIPT_LANG_LL}" - SRC[((++${#SRC[*]}))]='=LOCALE_CC=' - DST[((++${#DST[*]}))]="${TCAR_SCRIPT_LANG_CC}" - - # Define domain translation markers for domains. - SRC[((++${#SRC[*]}))]='=DOMAIN_LL=' - if [[ ! ${TCAR_SCRIPT_LANG_LL} =~ '^en' ]];then - DST[((++${#DST[*]}))]="${TCAR_SCRIPT_LANG_LL}" - else - DST[((++${#DST[*]}))]="" - fi - - # Define repository translation markers. - SRC[((++${#SRC[*]}))]='=(REPO_TLDIR|REPO_HOME|TCAR_BASEDIR)=' - DST[((++${#DST[*]}))]="${TCAR_BASEDIR}" - - # Do replacement of nested translation markers. - while [[ ${COUNTDST} -lt ${#DST[@]} ]];do - - # Verify existence of translation markers. If there is no - # translation marker on replacement, continue with the next - # one in the list. - if [[ ! ${DST[${COUNTDST}]} =~ '=[A-Z_]+=' ]];then - # Increment destination counter. - COUNTDST=$((${COUNTDST} + 1)) - # The current replacement value doesn't have translation - # marker inside, so skip it and evaluate the next - # replacement value in the list. - continue - fi - - while [[ ${COUNTSRC} -lt ${#SRC[*]} ]];do - - # Update replacements. - DST[${COUNTDST}]=$(echo ${DST[${COUNTDST}]} \ - | sed -r "s!${SRC[${COUNTSRC}]}!${DST[${COUNTSRC}]}!g") - - # Increment source counter. - COUNTSRC=$((${COUNTSRC} + 1)) - - done - - # Reset source counter - COUNTSRC=0 - - # Increment destination counter. - COUNTDST=$((${COUNTDST} + 1)) - - done - - # Apply replacements for translation markers. - while [[ ${COUNT} -lt ${#SRC[*]} ]];do - - # Use sed to replace translation markers inside the design - # model instance. - sed -r -i "s!${SRC[${COUNT}]}!${DST[${COUNT}]}!g" ${LOCATION} - - # Increment counter. - COUNT=$((${COUNT} + 1)) - - done - - # Remove escaped character from translation markers. This is one - # of the reasons why translation marker should be expanded in - # source files instances not the source files themselves. - # Escaping translation markers provides a way of talking about - # them without expanding them. - sed -r -i 's/(=)\\([A-Z_]+=)/\1\2/g' ${LOCATION} - - # Unset specific translation markers and specific replacement - # variables in order to clean them up. Otherwise, undesired values - # may remain from one file to another. - unset SRC - unset DST - -} diff --git a/tcar-scripts/tcar_terminateScriptExecution.sh b/tcar-scripts/tcar_terminateScriptExecution.sh deleted file mode 100755 index 0f95ace..0000000 --- a/tcar-scripts/tcar_terminateScriptExecution.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_terminateScriptExecution.sh -- This function standardizes the -# actions that must be realized just before leaving the script -# execution (e.g., cleaning temporal files). This function is the -# one called when interruption signals like EXIT, SIGHUP, SIGINT and -# SIGTERM are detected. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_terminateScriptExecution { - - # Remove temporal directory. - rm -r ${TCAR_SCRIPT_TEMPDIR} - - # NOTE: Don't specify an exit status here. As convenction we do - # this when error messages are triggerd. See `--as-error-line' - # option from `tcar_printMessage' functionality. - -} diff --git a/tcar-scripts/tcar_unsetModuleEnvironment.sh b/tcar-scripts/tcar_unsetModuleEnvironment.sh deleted file mode 100755 index 188edaa..0000000 --- a/tcar-scripts/tcar_unsetModuleEnvironment.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -###################################################################### -# -# tcar_unsetModuleEnvironment.sh -- This function unsets -# functionalities from tcar.sh script execution environment. -# -# Written by: -# * Alain Reguera Delgado , 2009-2013 -# -# Copyright (C) 2009-2013 The CentOS Artwork SIG -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -###################################################################### - -function tcar_unsetModuleEnvironment { - - # Reset text domain locally, in order to prevent this function - # from using the last text domain definition. By default all - # common functions do use the same MO file. - local TEXTDOMAIN="${TCAR_SCRIPT_PACKAGE}" - - # Verify suffix value used to retrieve function files. - if [[ -z ${TCAR_MODULE_NAME} ]];then - tcar_printMessage "`gettext "The export id was not provided."`" --as-error-line - fi - - # Define list of format-specific functionalities. This is the list - # of function definitions previously exported by - # `tcar_setModuleEnvironmentScripts'. Be sure to limit the list - # to function names that start with the suffix specified only. - local TCAR_MODULE_SCRIPT_FN='' - local TCAR_MODULE_SCRIPT_FNS=$(declare -F | gawk '{ print $3 }' | egrep "^${TCAR_MODULE_NAME}") - - # Unset function names from current execution environment. - for TCAR_MODULE_SCRIPT_FN in ${TCAR_MODULE_SCRIPT_FNS};do - unset -f ${TCAR_MODULE_SCRIPT_FN} - tcar_printMessage "unset -f : ${TCAR_MODULE_SCRIPT_FN}" --as-debugger-line - done - -}