diff options
Diffstat (limited to 'db')
-rw-r--r-- | db | 109 |
1 files changed, 109 insertions, 0 deletions
@@ -0,0 +1,109 @@ +#!/bin/bash + +# DB script +# Copyright (C) 2012-2015 Parabola Hackers <https://www.parabola.nu> +# +# 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 3 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, see <http://www.gnu.org/licenses/>. + +############################################################## + +prefix_dir="$(dirname "$(readlink -e "${0}")")" +bin_dir="${prefix_dir}" +etc_dir="${prefix_dir}"/etc +share_dir="${prefix_dir}"/share + +############################################################## + +source "${etc_dir}/dbscripts.cfg" +source "${share_dir}/db-libremessages" +source "${share_dir}/db-functions" + +############################################################## + +db_error_distro-not-found() { + die "This %s distribution doesn't exist" "${distro}" +} + +db_rename-variable_distro-config() { + # Rename ("${_distro}") to easily script usage + _distro="${_distro/\//+}" + _distro="${_distros,,}" +} + +db_source_distro-config() { + source "${distro_config}" +} + +db_variable_distro-config() { + distro_config="${etc_dir}/dbscripts.d/${_distro}.cfg" +} + +db-add() { + db-add_check-permission + db-pkg + for 'tarch' in "${tarches[@]}"; do + for 'pkg_file' in "${pkg_files[@]}"; do + if [[ ! -f "${repo_path}/${arch}/${pkg_file##*/}" ]]; then + die "Package file %s not found in %s" "${pkg_file##*/}" "${repo_path}/${arch}/" + else + msg "Adding %s to [%s]..." "${pkg_file}" "${repo}" + fi + done + pkg_repo_add "${repo}" "${tarch}" "${pkg_files[@]}" + repo_unlock "${repo}" "${tarch}" + done +} + +db-add_check-permission() { + if ! check_repo_permission "${repo}"; then + die "You don't have permission to add packages to %s" "${repo}" + fi +} + +db-init() { + mkdir -p -- "${root_dir}"/{"${native_packages_pool}","${native_sources_pool}"} "${cleanup_destination_directory}" "${source_cleanup_destination_directory}" "${staging_directory}" +} + +############################################################## + +distributions=("${native_distributions[@]}" "${derivative_distributions[@]}") +rules="${1}" +case "${rules}" in + add|remove|rm) + # Add or remove package to repository defined in config + + if [ "${#}" -lt '4' ]; then + msg "usage: %s <add || rm> <distro> <repo> <arch> <pkg_file> ..." "${0##*/}" + exit 1 + } + distro="${2}" + repo="${3}" + arch="${4}" + pkg_files=("${@:5}") + for '_distro' in "${distributions[@]}"; do + db_rename-variable_distro-config + db_variable_distro-config + if [ -f "${distro_config}" ]; then + db_source_distro-config + if [ "${rules}" == 'add' ]; then + db-add + elif [ "${rules}" == 'rm' || "${rules}" == 'remove' ]; then + db-rm + fi + else + db_error_distro-not-found + fi + done + ;; +esac |