From b33753bb5a09a118265f8cb3f02c3a83cf3b2890 Mon Sep 17 00:00:00 2001 From: Alain Reguera Delgado Date: Jan 09 2014 20:17:17 +0000 Subject: Update tcar directory structure and files. - Previously, automation scripts were stored in tcar-scripts directory. This update moves automation scripts from tcar-scripts to Scripts directory. - Previously, function top comments included the function's purpose, a written by section, a copyright line and the license section, in this order. This update removes the written by section and rearranges the function's purpose, copyright line and license section. Now, the function purpose is out of the top comment and placed on top of function definition. The top comment includes the script name (not the function name) and a description of what it does, all in one line. Later, it is the copyright line and the license section, and my personal contact information both electronic and paper, in this order. The distinctive comment block is surrounded by one line made of 70 number characters (#). The distinctive comment block is separated from non-distinctive block explaining the function's purpose using a white line. - Previously, environment variables definitions related to paths were set inside the tcar.sh file. This made difficult to customize the source files location required to execute automation scripts in its pristine state without installing it using RPM (see bug #152). This actualization moves the environment variables definitions from tcar.sh file to tcar.conf file. The tcar.sh script reads the tcar.conf file from /etc/tcar/tcar.conf and ~/.tcar.conf locations. By default, only the first one is installed in the system and provides the default values tcar.sh script needs to work with The CentOS Artwork Repository installed through RPM under /usr/share/tcar directory. However, if you are a developer and want to make changes to tcar automation scripts and also test them quickly, you must not use the source files installed at /usr/share/tcar, which are installed as read-only files for regular users. You must not use root user for such things either. Instead, to make changes and quick tests over automation scripts, download The CentOS Artwork Repository in its pristine state, store it somewhere in your workstation where you have write access (e.g., your home directory), make changes and tests there and, when you have something functional, copy the files you changed to the appropriate development branch for further committing and pushing them to the central repository. In order for all this to work, you must copy the tcar.conf file to ~/.tcar.conf and change the path values inside it to point to the writable location you have The CentOS Artwork Repository pristine state. - Previously, when the tcar.sh script was executed without any argument or option, there was no default actions for it. This update adds tcar_printUsage function and sets tcar.sh script to use it as default action when no argument or option is provided to tcar command-line. - Previously, the 'tcar --help' was conceived to print the tcar manual page. This is too much information to digest at first time. Specially in situations when just a usage message would be enough. This update changes tcar.sh file to make the 'tcar --help' command to print tcar usage, instead of its manual page. - Previously, TEXTDOMAIN environment variable was set to TCAR_SCRIPT_PACKAGE value. The TCAR_SCRIPT_PACKAGE variable is no longer defined and make TEXTDOMAIN environment variable to have an empty value. This update changes TEXTDOMAIN value from TCAR_SCRIPT_PACKAGE to TCAR_SCRIPT_NAME. - Previously, the release year was set using rpm. This made tcar script to print no release year in situations where the automation scripts were executed directly from its pristine state without being installed through rpm first. This update changes tcar_printCopyrightInfo function to use 2014 as the last release year. - Optimize tcar_printVersion function. There is not need to define copyright year and copyright holder here. Use the tcar_printCopyrightInfo function without argument to print the copyright sentence using the default year and holder. --- 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 - -}