summaryrefslogtreecommitdiff
path: root/src/bin/xbs
diff options
context:
space:
mode:
authorcoadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu>2015-08-29 08:22:51 -0300
committercoadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu>2015-08-29 08:22:51 -0300
commitbd16b61a2be9d158778244c3e2b184a65a496e5d (patch)
treec8c31f7fead3dccbb7b6ca49838c3ec627b922f2 /src/bin/xbs
parentc7f15e3d643c6ab4537b7355b7544b84aabf6039 (diff)
replace all db-* exec with xbs, create all db-* compability, and add DISTRO_TYPE on all platform configs
Diffstat (limited to 'src/bin/xbs')
-rw-r--r--src/bin/xbs206
1 files changed, 206 insertions, 0 deletions
diff --git a/src/bin/xbs b/src/bin/xbs
new file mode 100644
index 0000000..7b5bea6
--- /dev/null
+++ b/src/bin/xbs
@@ -0,0 +1,206 @@
+#!/bin/bash
+# X Build System
+# 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/>.
+
+##############################################################
+
+xbs_error_platform-not-found() {
+ die "This %s plataform doesn't exist" "${plataform}"
+}
+
+xbs_rename-variable_platform-config() {
+ # Rename ("${_plataform}") to easily script usage
+ _platform="${_platform/\//+}"
+ _platform="${_platforms,,}"
+}
+
+xbs_source_platform-config() {
+ source "${PLATAFORM_CONFIG}"
+}
+
+xbs_variable_platform-config() {
+ PLATAFORM_CONFIG="${CONFIG_DIR}/xbs.d/${_platform}.cfg"
+}
+
+xbs-add() {
+ xbs-add_check-permission
+ xbs-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
+}
+
+xbs-add_check-permission() {
+ if ! check_repo_permission "${repo}"; then
+ die "You don't have permission to add packages to %s" "${repo}"
+ fi
+}
+
+xbs-init() {
+ mkdir -p -- "${PKG_MAIN_POOLS}" "${SRC_MAIN_POOLS}" "${CLEANUP_DESTDIR}" "${SOURCE_CLEANUP_DESTDIR}" "${STAGING}"
+ # "${BIN_DIR}/db-repo-add" "${_platform}" "${PKG_REPOS[@]}"
+}
+
+xbs-pkg() {
+ repo_path="${REPO_DIR}/${repo}/os"
+ if [ "${arch}" == "{any}" ]; then
+ tarches=("${ARCHES[@]}")
+ else
+ tarches=("${arch}")
+ fi
+ for 'tarch' in "${tarches[@]}"; do
+ if [[ ! -d "${repo_path} ]]; then
+ die "This [%s] doesn't exist" "${repo}"
+ elif [[ ! -d "${repo_path}/${tarch}" ]]; then
+ die "This [%s] doesn't support %s archictecture" "${repo}" "${arch}"
+ else
+ repo_lock "${repo}" "${tarch}" || exit 1
+ fi
+ done
+}
+
+xbs-rm() {
+ xbs-rm_check-permission
+ xbs-pkg
+ for 'tarch' in "${tarches[@]}"; do
+ for 'pkg_name' in "${pkg_names[@]}"; do
+ msg "Removing %s from [%s]..." "${pkg_name}" "${repo}"
+ done
+ pkg_repo_rm "${repo}" "${tarch}" "${pkgnames[@]}"
+ repo_unlock "${repo}" "${tarch}"
+ done
+}
+
+xbs-rm_check-permission() {
+ if ! check_repo_permission "${repo}"; then
+ die "You don't have permission to remove packages to %s" "${repo}"
+ fi
+}
+
+
+xbs-sync() {
+
+}
+
+##############################################################
+
+CONFIG_DIR="$(dirname "$(readlink -e "$0")")/etc"
+
+source "${CONFIG_DIR}/xbs.cfg"
+source "${SHARE_DIR}/xbs-functions"
+
+if [ "${#}" -eq '0' ]; then
+ msg "usage: %s {add,init,rm,sync} <value> ..." "${0##*/}"
+fi
+
+rules=${1}
+
+case "${rules}" in
+ add)
+ # Add package to repository defined in config
+ if [ "${#}" -lt '5' ]; then
+ msg "usage: %s add <platform> <repo> <arch> <pkg_file> ..." "${0##*/}"
+ exit 1
+ }
+ platform="${2}"
+ repo="${3}"
+ arch="${4}"
+ pkg_files=("${@:5}")
+ for '_platform' in "${platforms[@]}"; do
+ xbs_rename-variable_platform-config
+ xbs_variable_platform-config
+ if [ -f "${PLATAFORM_CONFIG}" ]; then
+ xbs_source_platform-config
+ xbs-add
+ else
+ xbs_error_platform-not-found
+ fi
+ done
+ ;;
+ init)
+ # Creates the repository structure defined in config
+ platforms=("${@:2}")
+ if [ "${#}" -lt '2' ]; then
+ for '_platform' in "${PLATFORMS[@]}"; do
+ xbs_variable_platform-config
+ xbs_source_platform-config
+ xbs-init
+ done
+ else
+ for '_platform' in "${platforms[@]}"; do
+ xbs_rename-variable_platform-config
+ xbs_variable_platform-config
+ if [ -f "${PLATAFORM_CONFIG}" ]; then
+ xbs_source_platform-config
+ xbs-init
+ else
+ xbs_error_platform-not-found
+ fi
+ done
+ fi
+ ;;
+ rm|remove)
+ # Remove package to repository defined in config
+ if [ "${#}" -lt '5' ]; then
+ msg "usage: %s rm <platform> <repo> <arch> <pkg_name> ..." "${0##*/}"
+ exit 1
+ fi
+ platform="${2}"
+ repo="${3}"
+ arch="${4}"
+ pkg_names=("${@:5}")
+ for '_platform' in "${platforms[@]}"; do
+ xbs_rename-variable_platform-config
+ xbs_variable_platform-config
+ if [ -f "${PLATAFORM_CONFIG}" ]; then
+ xbs_source_platform-config
+ xbs-rm
+ else
+ xbs_error_platform-not-found
+ fi
+ done
+ ;;
+ sync|import)
+ # Import and sync the derivated repositories based on info contained in repo.db files
+ platforms=("${@:2}")
+ if [ "${#}" -lt '2' ]; then
+ for '_platform' in "${DD_PLATFORMS[@]}"; do
+ xbs_variable_platform-config
+ xbs_source_platform-config
+ xbs-sync
+ done
+ else
+ for '_platform' in "${platforms[@]}"; do
+ xbs_rename-variable_platform-config
+ xbs_variable_platform-config
+ if [ -f "${PLATAFORM_CONFIG}" && "${DISTRO_TYPE}" == 'derivated' ]; then
+ xbs_source_platform-config
+ xbs-sync
+ else
+ xbs_error_platform-not-found
+ fi
+ done
+ fi
+ ;;
+esac