From 23696b383bc1d164392531bb9a5adf070440d035 Mon Sep 17 00:00:00 2001 From: Marcel Saegebarth Date: Mon, 19 Jun 2017 11:33:29 +0200 Subject: [PATCH] Alternative custom queue file implementation Signed-off-by: Marcel Saegebarth Signed-off-by: Willy Sudiarto Raharjo --- src/usr/libexec/sbopkg/sqg/functions | 51 +++++++++++-------- .../libexec/sbopkg/sqg/sqg-build-queuefile | 6 +-- src/usr/sbin/sqg | 12 ++--- tools/ChangeLog-latest.txt | 5 +- 4 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/usr/libexec/sbopkg/sqg/functions b/src/usr/libexec/sbopkg/sqg/functions index 2e5dbd2..e73d90d 100644 --- a/src/usr/libexec/sbopkg/sqg/functions +++ b/src/usr/libexec/sbopkg/sqg/functions @@ -61,16 +61,16 @@ Options are: -p package(s) Creates queuefile(s) for individual package(s). Multiple packages can be passed with quotes, e.g. -p "pkg1 pkg2". - Packages with an empty REQUIRES= line will be skipped unless - SKIP_EMPTY is uncommented in sqg script. Package names are case-sensitive. -a Builds queuefiles for all packages. -j Number of concurrent queuefile generation processes. This could heavily raise disk I/O so use with care. Requires: GNU parallel Default: 1 - -o Save QUEUE(s) to custom.sqf. + -o User-defined queue output filename (without .sqf extension). This could be useful to create custom queue file. + Multiple packages can be passed with quotes, + eg. -p "qt5-webkit sshblock letsencrypt" -o myqueue This script will overwrite existing queuefiles in \$QUEUEDIR so back up any existing queuefile(s) or local modifications. Check the top of the script for @@ -153,7 +153,7 @@ parse_queuefile_requires () { read -s -p ' Do you want to continue? [y/N]' RESPONSE RESPONSE=$(echo "$RESPONSE" | awk '{print tolower($0)}') - if [ "$RESPONSE" =~ ^\(yes|y\)$ ]; then + if [[ "$RESPONSE" =~ ^\(yes|y\)$ ]]; then continue else exit 1 @@ -168,7 +168,7 @@ build_queuefile () { local REPO_DIR="$1" local QUEUEDIR="$2" local PRGNAM="$3" - local CUSTOM_QUEUE="$4" + local OLDFILE=$QUEUEDIR/$PRGNAM.sqf local QUEUEFILE=$QUEUEDIR/$PRGNAM.sqf.tmp local CATFILE=$QUEUEDIR/$PRGNAM.tmp.sqf @@ -178,21 +178,31 @@ build_queuefile () { parse_queuefile_requires "$REPO_DIR" "$PRGNAM" "$QUEUEFILE" tac $QUEUEFILE > $CATFILE if cmp -s "$CATFILE" "$OLDFILE"; then - if [ ! -z $CUSTOM_QUEUE ]; then - cat $CATFILE >> $QUEUEDIR/$CUSTOM_QUEUE.sqf - fi rm $QUEUEFILE $CATFILE else - if [ ! -z $CUSTOM_QUEUE ]; then - cat $CATFILE >> $QUEUEDIR/$CUSTOM_QUEUE.sqf - rm $CATFILE - else - mv $CATFILE $OLDFILE - fi + mv $CATFILE $OLDFILE rm $QUEUEFILE fi } +# +# `cat` all given packages into one custom queue file. +# +build_queuefile_custom () { + local QUEUEDIR=$1 + local QUEUENAME=$2 + local PACKAGES=$3 + + $( + cd "$QUEUEDIR" + rm -f "$QUEUEDIR/$QUEUENAME.sqf" + + for PKG in ${PACKAGES[@]}; do + cat "$PKG.sqf" >> "$QUEUENAME.sqf" + done + ) +} + # # Processes all or given packages depending on option. # @@ -207,9 +217,6 @@ execute_build () { local VERBOSE="no" local PKG INFOPATH - # make sure the custom queue is empty - rm -f $QUEUEDIR/custom.sqf - if [ "$ALL" == "yes" ]; then printf "Processing all SlackBuilds in the $REPO_SUBPATH repository..." PKGSNEW=($(find "$REPO_DIR" -name *.info -print0 | xargs -r0)) @@ -233,13 +240,15 @@ execute_build () { printf '%s\n' "${PKGSNEW[@]}" | \ parallel --eta --will-cite --jobs $JOBS \ /usr/libexec/sbopkg/sqg/sqg-build-queuefile \ - "$REPO_DIR" "$QUEUEDIR" {} "$SKIP_EMPTY" "$VERBOSE" \ - "$CUSTOM_QUEUE" "custom" + "$REPO_DIR" "$QUEUEDIR" {} "$SKIP_EMPTY" "$VERBOSE" else for PKG in "${PKGSNEW[@]}"; do /usr/libexec/sbopkg/sqg/sqg-build-queuefile \ - "$REPO_DIR" "$QUEUEDIR" "$PKG" "$SKIP_EMPTY" "$VERBOSE" \ - "$CUSTOM_QUEUE" "custom" + "$REPO_DIR" "$QUEUEDIR" "$PKG" "$SKIP_EMPTY" "$VERBOSE" done fi + + if [ ! -z $CUSTOM_QUEUE ]; then + build_queuefile_custom "$QUEUEDIR" "$CUSTOM_QUEUE" "$PKGS" + fi } diff --git a/src/usr/libexec/sbopkg/sqg/sqg-build-queuefile b/src/usr/libexec/sbopkg/sqg/sqg-build-queuefile index 66aa77c..2d2b336 100755 --- a/src/usr/libexec/sbopkg/sqg/sqg-build-queuefile +++ b/src/usr/libexec/sbopkg/sqg/sqg-build-queuefile @@ -8,14 +8,14 @@ QUEUEDIR="$2" INFO="$3" SKIP_EMPTY="${4:-}" VERBOSE="${5:-no}" -CUSTOM_QUEUE="${6}" +CUSTOM_QUEUE="${6:-}" . $INFO if [ "$VERBOSE" == "yes" ]; then INFO_BASENAME=$(basename $INFO .info) - if [[ -z $REQUIRES && $SKIP_EMPTY == "" ]]; then + if [[ -z $REQUIRES && $SKIP_EMPTY == "yes" ]]; then echo "$INFO_BASENAME: No dep(s) defined for this package." echo "No queuefile generated." echo "Uncomment SKIP_EMPTY variable in sqg to change this behavior." @@ -24,6 +24,6 @@ if [ "$VERBOSE" == "yes" ]; then echo "Processing $INFO_BASENAME." fi -if [[ ! -z $REQUIRES || $SKIP_EMPTY == "NO" ]]; then +if [[ ! -z $REQUIRES || $SKIP_EMPTY == "no" ]]; then build_queuefile "$REPO_DIR" "$QUEUEDIR" "$PRGNAM" "$CUSTOM_QUEUE" fi diff --git a/src/usr/sbin/sqg b/src/usr/sbin/sqg index dd5b0a8..4bab27e 100755 --- a/src/usr/sbin/sqg +++ b/src/usr/sbin/sqg @@ -43,7 +43,7 @@ SBOPKG_CONF=${SBOPKG_CONF:-/etc/sbopkg/sbopkg.conf} #QUEUEDIR=${QUEUEDIR:-/var/lib/sbopkg/queues} REPO_BRANCH=${REPO_BRANCH:-$(cat /etc/slackware-version | awk '{print $2}')} -#SKIP_EMPTY=${SKIP_EMPTY:-NO} +SKIP_EMPTY=${SKIP_EMPTY:-yes} ### NO CHANGES SHOULD BE NECESSARY BELOW THIS LINE ### @@ -58,12 +58,12 @@ OPT_OUTPUT="" sanity_checks -while getopts "ap:j:ho" OPT; do +while getopts "ap:j:ho:" OPT; do case $OPT in a ) OPT_ALL="yes" ;; p ) OPT_PACKAGES=$OPTARG ;; j ) get_jobs "$OPTARG"; OPT_JOBS=$?; ;; - o ) OPT_OUTPUT=1 ;; + o ) OPT_OUTPUT="$OPTARG" ;; h ) usage $SCRIPT; exit 0; ;; ? ) exit 1; ;; esac @@ -75,11 +75,7 @@ if [ $OPTIND -eq 1 ]; then exit 1 fi -if [ -z $OPT_OUTPUT ]; then - execute_build "$REPO_DIR" "$QUEUEDIR" "$OPT_PACKAGES" "$OPT_ALL" $OPT_JOBS -else - execute_build "$REPO_DIR" "$QUEUEDIR" "$OPT_PACKAGES" "$OPT_ALL" $OPT_JOBS "$OPT_OUTPUT" -fi +execute_build "$REPO_DIR" "$QUEUEDIR" "$OPT_PACKAGES" "$OPT_ALL" $OPT_JOBS "$OPT_OUTPUT" echo "Done." exit 0 diff --git a/tools/ChangeLog-latest.txt b/tools/ChangeLog-latest.txt index 8e26ff4..3efc680 100644 --- a/tools/ChangeLog-latest.txt +++ b/tools/ChangeLog-latest.txt @@ -10,9 +10,10 @@ sbopkg-dev (2017-06-18 01:40:00 UTC) invoked with -j N+1 (N: Number of cores) Patch by Marcel Saegebarth. * sqg: Generate one queue file for multiple programs by option -o. - The output is fixed as custom.sqf. - You can then run sbopkg -i custom to install all packages+deps. + The output queue filename is user-defined. + You can then run sbopkg -i to install all packages+deps. Feature Request by Jeremy/bassmadrigal (Fixed #13). + Implement contributions from Marcel Saegebarth. MODIFICATIONS * bash-completion: Complete -i and -b when git repo is used