From 00d4d5eea76c8dbc67a129606f1e1aba5b37502e Mon Sep 17 00:00:00 2001 From: speedie Date: Sun, 9 Jul 2023 02:36:56 +0200 Subject: [PATCH] Get basic cloning working --- src/packr | 6 +----- src/packr_cfhandler | 31 ++++++++++++++++++++++++++++--- src/packr_handler | 11 ++++------- src/packr_repohandler | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 15 deletions(-) create mode 100755 src/packr_repohandler diff --git a/src/packr b/src/packr index bbda8ab..006fd35 100755 --- a/src/packr +++ b/src/packr @@ -33,11 +33,6 @@ load_x() { . "$v" && return 0 } -load_f() { - [ ! -f "$1" ] && return 1 - . "$v" && return 0 -} - die() { printf "%s: %s\n" "packr" "$*" > /dev/stderr exit 1 @@ -45,6 +40,7 @@ die() { main() { load_x "packr_handler" || die "Failed to load handler" + packr_read_args "$@" packr_check_action } diff --git a/src/packr_cfhandler b/src/packr_cfhandler index c9aba83..a0d64c6 100755 --- a/src/packr_cfhandler +++ b/src/packr_cfhandler @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -packr_check_exist() { [ -z "$1" ] || [ ! -f "$1" ] && return 1; } +packr_check_exist() { [ ! -f "$1" ] && return 1; } packr_create_dir() { [ -z "$1" ] && die "packr_create_dir() failed: No directory was specified" @@ -31,14 +31,39 @@ cat << EOF > "$PACKR_CONFIG_FILE" || die "packr_create_conf(): Failed to create # packr.conf # This is the default configuration file for packr. # See packr(1) and packr.conf(1) for more information. + +PACKR_ALLOW_LICENSES="FREE" # Packages under this group will be allowed (FREE/OPENSOURCE/NONFREE/ANY) + +# Package options +PACKR_BIN_PRIORITY="true" # Install primarily from binaries if possible (true/false) +PACKR_BIN_ENABLE="true" # Enable installation using binaries (true/false) +PACKR_SRC_ENABLE="true" # Enable installation from source (true/false) +PACKR_REQUIRE_SIGNING="true" # Require packages to be signed using a PGP key (true/false) +PACKR_GIT_CLONE_DEPTH="1" # Clone depth. 1 means no commit history. 0 means full commit history. Most users do not need commit history anyway. + +# Directories +PACKR_CACHE_DIR="/var/cache/packr" +PACKR_REPO_DIR="/etc/packr/repos" + +# Add repositories that should be used +add_repository "packr-main" "https://git.speedie.site/speedie/packr-main/raw/branch/master/.PACKR_REPO" EOF } packr_conf_init() { + load_x "packr_repohandler" || die "Failed to load repository handler" packr_check_exist "$PACKR_CONFIG_FILE" || packr_create_conf "$PACKR_CONFIG_FILE" - load_f "$PACKR_CONFIG_FILE" || die "packr_conf_init(): Failed to load configuration file $PACKR_CONFIG_FILE" + . "$PACKR_CONFIG_FILE" } packr_check_vars() { - : + [ -z "$PACKR_ALLOW_LICENSES" ] && die "packr_check_vars(): \$PACKR_ALLOW_LICENSES is not set. Incomplete config file." + [ -z "$PACKR_BIN_PRIORITY" ] && die "packr_check_vars(): \$PACKR_BIN_PRIORITY is not set. Incomplete config file." + [ -z "$PACKR_BIN_ENABLE" ] && die "packr_check_vars(): \$PACKR_BIN_ENABLE is not set. Incomplete config file." + [ -z "$PACKR_SRC_ENABLE" ] && die "packr_check_vars(): \$PACKR_SRC_ENABLE is not set. Incomplete config file." + [ -z "$PACKR_REQUIRE_SIGNING" ] && die "packr_check_vars(): \$PACKR_REQUIRE_SIGNING is not set. Incomplete config file." + [ -z "$PACKR_GIT_CLONE_DEPTH" ] && die "packr_check_vars(): \$PACKR_GIT_CLONE_DEPTH is not set. Incomplete config file." + [ -z "$PACKR_CACHE_DIR" ] && die "packr_check_vars(): \$PACKR_CACHE_DIR is not set. Incomplete config file." + [ -z "$PACKR_REPO_DIR" ] && die "packr_check_vars(): \$PACKR_REPO_DIR is not set. Incomplete config file." + return 0 } diff --git a/src/packr_handler b/src/packr_handler index c4e2679..4547b5e 100755 --- a/src/packr_handler +++ b/src/packr_handler @@ -81,15 +81,12 @@ EOF exit "$exitcode" } -packr_load_core() { - load_x "packr_cfhandler" || die "Failed to load config handler" - packr_conf_init || die "Failed to create configuration file" - packr_check_vars || die "Configuration file is not proper." -} - packr_setup_install() { - packr_load_core + load_x "packr_cfhandler" || die "Failed to load config handler" load_x "packr_inst" || die "Failed to load packr_inst" + + packr_conf_init + packr_check_vars } packr_check_action() { diff --git a/src/packr_repohandler b/src/packr_repohandler new file mode 100755 index 0000000..62d8532 --- /dev/null +++ b/src/packr_repohandler @@ -0,0 +1,41 @@ +#!/bin/sh +# packr-repohandler +# +# Copyright (C) 2023 speedie +# +# 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 . + +packr_create_repository_dir() { mkdir -p "$1" || die "packr_create_repository_dir(): Failed to create repository directory $1"; } + +packr_clone_repository() { + [ "$PACKR_GIT_CLONE_DEPTH" = "1" ] && git_arg_depth="--depth 1" + git clone -q $git_arg_depth "${2}" "${PACKR_REPO_DIR}/${1}" || die "packr_clone_repository(): Failed to clone repository ${2} to ${PACKR_REPO_DIR}/${1}" +} + +packr_get_repository() { + [ ! -d "$PACKR_REPO_DIR" ] && packr_create_repository_dir "$PACKR_REPO_DIR" + curl -so "/tmp/packr-temp-repo-file" "$2" || die "packr_get_repository(): Failed to get repository file $2 for repository $1" + [ ! -f "/tmp/packr-temp-repo-file" ] && die "packr_get_repository(): Could not find repository file" + . "/tmp/packr-temp-repo-file" || die "packr_get_repository(): Failed to load repository file" + + [ -z "$PACKR_REPO_NAME" ] && die "packr_get_repository(): Repository $1 does not specify PACKR_REPO_NAME." + [ -z "$PACKR_REPO_CLONE" ] && die "packr_get_repository(): Repository $1 does not specify PACKR_REPO_CLONE." + + packr_clone_repository "$1" "$PACKR_REPO_CLONE" + mv /tmp/packr-temp-repo-file "${PACKR_REPO_DIR}/${1}/.PACKR_REPO" || die "packr_get_repository(): Failed to move .PACKR_REPO file" +} + +add_repository() { + [ ! -d "${PACKR_REPO_DIR}/${1}" ] && packr_get_repository "$@" +}