-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJWe8BwAAoJEBu5sftaTG2tewIP/jT8RemihLiFmDmJpqkuIU6Q
 OuGaX8nODr+ay+LD0QCb/PCpVty+hUO3SMladaNpwEpWwAlcC1rt1MGdLJQAD2Aq
 tsZ3EeBmm3UnxWHQ8/qe6GzzyqFcIHwwrutvjDputBKd6Qjq5Bc96AvRBfgSJe52
 twP/xvdMj9Wjnd3R0+ndrve08TEo5fZI578eCcNHHTD9GT50CRBEcMGeB20rbJ2V
 l2viWPO2VXAGkrzkhOTi/L2YiyioG79kK64ZNnpemL7t+E5VQJ81l7W9GC17RVIu
 gLElf1nINI6LKbmtfL5xnrN2DwDH+pZVjYj4Isnxh6KyI8EoLDsyZwBax7BNNu/v
 AOUFI8b0uf41DzO0EVcY5jQHC9vzsJ7l7yCUlQdL8skJFaZZVZS1XEGlL+Yft8UT
 L9l0rdDn0i2Hohu7Nxo4cm3MQqJFn14gzHneWeSb8R6s7vpMmfAn1D9QN5AYdXoB
 Wti3zu+UZoeTU0L9ihFj62g/qkA6/FlK+oUULlcJKvEAxOenaMsj06QZhPw1pIUR
 l5/nXKYnf//AO2Cy0QciLPJVXrEI7LHI7jzEpJqhqk0O11QW6z/rcHs2MQYShDWN
 BZcT1xbZlLViJVI0pW1yOhhG6mKc3rM6SfPXJxWuoqoLFmV4m/ZcsLU4iXcjH3ZR
 ra6FVQAi38tS539HR/Z5
 =A88k
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABCAAGBQJWfYWyAAoJEAY5OLpCz6ckDCAP+wZVPCTCwxCTqMg1KK8rggdH
 gS0sD37zbDwV0LhWRCPhnSKV/OON+1mgy6d2EDsaQqKLQ9TqskJ7gQS3g1s3QNzL
 zPl96sJOxeQ0dc758lBPT6vzLdcZvVBM5A6AcKDZfD2p3Wv/imczL7goD/+UvL2x
 AlzehTDBHWxh05Nd+9iu+lljKf8JCxwbsxJItDCRrYy/OEY/y7THjPU16Y7fqUbE
 MQNVTKDbWNvfCpsBpjaje3R65KuM9axT+UzUHWE8bEnsy/ndWJ6uuj58YKbP8v8s
 qyL39QEhXbnTU6+NRfKs4tvKBfwfqeEXNz17HkJGoGtMcleojyythp7QBf4cRUqt
 9kSD4dAptrGHEWI3nKREQI9wxcEtReoZD4X8zEKNlGgXNOlLjkGKZEqgbkQ4I6+x
 tGLEh+RjR3TP/rA8f78jgqtv6VL2lGUjhaYubCdpgPGOBfFmDoenMLxGZGYC591U
 qWOv9OvffgOBZElOm09zRyGmzuqpvhrxLnDyihKGkmFCZkpz1xtLfv72mjQ/zg5c
 vonYzvjnsR/ZdyCnNQV0lTDFrC400I9bgDfR6aDfF+JzQ4pt3+wPVRqhPH+emjJa
 iOtHTI44Ddj9kQnkn+n9PVz0ivqLWukb1PyssaTbjqAdQ9DtLX0iQKaBoPAn0mjG
 Ffp7NmFaj1FJlZcn2wZg
 =VdWX
 -----END PGP SIGNATURE-----

Merge tag 'jm_09af4b94'

Tag for commit 09af4b9433

# gpg: Signature made Thu 24 Dec 2015 10:52:48 AM CET using RSA key ID 5A4C6DAD
# gpg: Good signature from "Jason Mehring (Qubes OS Signing Key) <nrgaway@gmail.com>"
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: E0E3 2283 FDCA C1A5 1007  8F27 1BB9 B1FB 5A4C 6DAD

* tag 'jm_09af4b94':
  functions.sh: Allow generic TEMPLATE_FLAVOR_DIR that matches all flavors, or even no flavors
  functions.sh: unset "build_step_files" var to prevent loading same files if no files found on another run
  function.sh:  Allow multiple template directories to be searched
This commit is contained in:
Marek Marczykowski-Górecki 2015-12-25 19:06:41 +01:00
commit f7a3ce03e3

View File

@ -189,8 +189,9 @@ splitPath() {
setArrayAsGlobal PARTS $return_global_var
}
templateDir() {
templateDirs() {
local template_flavor=${1-${TEMPLATE_FLAVOR}}
local match=0
# If TEMPLATE_FLAVOR_DIR is not already an array, make it one
if ! [[ "$(declare -p TEMPLATE_FLAVOR_DIR 2>/dev/null)" =~ ^declare\ -a.* ]] ; then
@ -202,14 +203,24 @@ templateDir() {
# (wheezy+whonix-gateway / wheezy+whonix-gateway+gnome[+++] / wheezy+gnome )
if [ "${element%:*}" == "$(templateName ${template_flavor})" ]; then
eval echo -e "${element#*:}"
return
match=1
# Very short name compare (+proxy)
elif [ "${element:0:1}" == "+" -a "${element%:*}" == "+${template_flavor}" ]; then
eval echo -e "${element#*:}"
return
match=1
# Generic template directory that matches all flavors, or even no flavors
elif [ "${element:0:1}" == "*" ]; then
eval echo -e "${element#*:}"
match=1
fi
done
if [ "${match}" -eq 1 ]; then
return
fi
local template_flavor_prefix="$(templateFlavorPrefix ${template_flavor})"
if [ -n "${template_flavor}" -a "${template_flavor}" == "+" ]; then
local dir="${SCRIPTSDIR}/${template_flavor_prefix}"
@ -241,55 +252,57 @@ templateFile() {
local file="$1"
local suffix="$2"
local template_flavor="$3"
local template_dir="$(templateDir "${template_flavor}")"
local template_dirs="$(templateDirs "${template_flavor}")"
splitPath "${file}" path_parts
# No template flavor
if [ -z "${template_flavor}" ]; then
if [ "${suffix}" ]; then
exists "${SCRIPTSDIR}/${path_parts[base]}_${suffix}${path_parts[dotext]}" || true
else
exists "${SCRIPTSDIR}/${path_parts[base]}${path_parts[dotext]}" || true
for template_dir in ${template_dirs[@]}; do
# No template flavor
if [ -z "${template_flavor}" ]; then
if [ "${suffix}" ]; then
exists "${SCRIPTSDIR}/${path_parts[base]}_${suffix}${path_parts[dotext]}" || true
else
exists "${SCRIPTSDIR}/${path_parts[base]}${path_parts[dotext]}" || true
fi
return
fi
return
fi
# Locate file in directory named after flavor
if [ "${suffix}" ]; then
# Append suffix to filename (before extension)
# `minimal` is the template_flavor being used in comment example
# Locate file in directory named after flavor
if [ "${suffix}" ]; then
# Append suffix to filename (before extension)
# `minimal` is the template_flavor being used in comment example
# (TEMPLATE_FLAVOR_DIR/minimal/packages_qubes_suffix.list)
exists "${template_dir}/${template_flavor}/${path_parts[base]}_${suffix}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/minimal/packages_qubes_suffix.list)
exists "${template_dir}/${template_flavor}/${path_parts[base]}_${suffix}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/minimal/packages_qubes_suffix.list)
exists "${template_dir}/${template_flavor}/${path_parts[base]}_${suffix}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/minimal/packages_qubes_suffix.list)
exists "${template_dir}/${template_flavor}/${path_parts[base]}_${suffix}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/packages_qubes_suffix.list)
exists "${template_dir}/${path_parts[base]}_${suffix}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/packages_qubes_suffix.list)
exists "${template_dir}/${path_parts[base]}_${suffix}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/packages_qubes_minimal_suffix.list)
exists "${template_dir}/${path_parts[base]}_${suffix}_${template_flavor}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/packages_qubes_minimal_suffix.list)
exists "${template_dir}/${path_parts[base]}_${suffix}_${template_flavor}${path_parts[dotext]}" || true
# (SCRIPTSDIR/packages_qubes_minimal_suffix.list)
exists "${SCRIPTSDIR}/${path_parts[base]}_${suffix}_${template_flavor}${path_parts[dotext]}" || true
else
# (TEMPLATE_FLAVOR_DIR/minimal/packages_qubes.list)
exists "${template_dir}/${template_flavor}/${path_parts[base]}${path_parts[dotext]}" || true
# (SCRIPTSDIR/packages_qubes_minimal_suffix.list)
exists "${SCRIPTSDIR}/${path_parts[base]}_${suffix}_${template_flavor}${path_parts[dotext]}" || true
else
# (TEMPLATE_FLAVOR_DIR/minimal/packages_qubes.list)
exists "${template_dir}/${template_flavor}/${path_parts[base]}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/minimal/packages_qubes_minimal.list)
exists "${template_dir}/${template_flavor}/${path_parts[base]}_${template_flavor}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/minimal/packages_qubes_minimal.list)
exists "${template_dir}/${template_flavor}/${path_parts[base]}_${template_flavor}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/packages_qubes.list)
exists "${template_dir}/${path_parts[base]}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/packages_qubes.list)
exists "${template_dir}/${path_parts[base]}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/packages_qubes_minimal.list)
exists "${template_dir}/${path_parts[base]}_${template_flavor}${path_parts[dotext]}" || true
# (TEMPLATE_FLAVOR_DIR/packages_qubes_minimal.list)
exists "${template_dir}/${path_parts[base]}_${template_flavor}${path_parts[dotext]}" || true
# (SCRIPTSDIR/packages_qubes_minimal.list)
exists "${SCRIPTSDIR}/${path_parts[base]}_${template_flavor}${path_parts[dotext]}" || true
fi
# (SCRIPTSDIR/packages_qubes_minimal.list)
exists "${SCRIPTSDIR}/${path_parts[base]}_${template_flavor}${path_parts[dotext]}" || true
fi
done
}
copyTreeExec() {
@ -298,27 +311,30 @@ copyTreeExec() {
local template_flavor="$3"
local target_dir="$4"
local template_dir="$(templateDir ${template_flavor})"
local source_dir="$(readlink -m ${source_dir:-${template_dir}}/${dir})"
local target_dir="$(readlink -m ${target_dir:-${INSTALLDIR}})"
local template_dirs="$(templateDirs ${template_flavor})"
if ! [ -d "${source_dir}" ]; then
debug "No extra files to copy for ${dir}"
return 0
fi
for template_dir in ${template_dirs[@]}; do
local source_dir="$(readlink -m ${source_dir:-${template_dir}}/${dir})"
local target_dir="$(readlink -m ${target_dir:-${INSTALLDIR}})"
debug "Copying ${source_dir}/* ${target_dir}"
cp -rp "${source_dir}/." "${target_dir}"
if ! [ -d "${source_dir}" ]; then
debug "No extra files to copy for ${dir}"
return 0
fi
if [ -f "${source_dir}/.facl" ]; then
debug "Restoring file permissions..."
pushd "${target_dir}"
{
setfacl --restore="${source_dir}/.facl" 2>/dev/null ||:
rm -f .facl
}
popd
fi
debug "Copying ${source_dir}/* ${target_dir}"
cp -rp "${source_dir}/." "${target_dir}"
if [ -f "${source_dir}/.facl" ]; then
debug "Restoring file permissions..."
pushd "${target_dir}"
{
setfacl --restore="${source_dir}/.facl" 2>/dev/null ||:
rm -f .facl
}
popd
fi
done
}
callTemplateFunction() {
@ -408,6 +424,7 @@ getFileLocations() {
buildStep() {
local filename="$1"
local suffix="$2"
unset build_step_files
info "Locating buildStep files: ${filename##*/} suffix: ${suffix}"
getFileLocations "build_step_files" "${filename}" "${suffix}"