From 8449f67db6b4a56727cda55eb33ac5b90e2340e0 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Sat, 29 May 2021 19:26:36 -0400 Subject: wip - meld-src-pkgbuilds --- src/maintenance-tools/meld-src-pkgbuilds | 161 +++++++++++++++++++------------ 1 file changed, 97 insertions(+), 64 deletions(-) diff --git a/src/maintenance-tools/meld-src-pkgbuilds b/src/maintenance-tools/meld-src-pkgbuilds index 32802a3..df08c9f 100755 --- a/src/maintenance-tools/meld-src-pkgbuilds +++ b/src/maintenance-tools/meld-src-pkgbuilds @@ -1,12 +1,18 @@ #!/bin/bash -# readonly PKGS_DIR=/packages - echo "$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|^WORKDIR="\([^"]*\)"|\1|') IN" - echo "$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|^WORKDIR=||' | tr '"' ' ') IN" +# echo "$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|^WORKDIR="\([^"]*\)"|\1|') IN" +# echo "$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|^WORKDIR=||' | tr '"' ' ') IN" + + readonly PKGS_DIR="$(source /etc/libretools.conf ; echo "${WORKDIR}" ;)" + + # readonly PKGS_DIR="$(source "$(grep 'WORKDIR=' /etc/libretools.conf)" ; echo "${WORKDIR}")" -echo "PKGS_DIR=$PKGS_DIR" -[[ ! -d "$PKGS_DIR" ]] && echo "no such dir" && exit 1 +echo "PKGS_DIR=${PKGS_DIR:-/packages}" + + +[[ ! -d "${PKGS_DIR:-/packages}" ]] && echo "no such dir" && exit 1 + # readonly PKGS_DIR=$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|.*WORKDIR="\([^"]*\)*"|\1|') @@ -22,18 +28,18 @@ OPTIONS: EXAMPLES: -# # local srcpkg_a='icecat' -# # local srcpkg_a="$(SelectSrcpkg "${pkgname}")" -# # local srcpkg_=/packages/abslibre/libre/icecat/PKGBUILD -# # local srcpkg_=/packages/abslibre/libre/icecat/icecat-78.10.0_pre2-1-x86_64.src.tar.gz + # local srcpkg_a='icecat' + # local srcpkg_a="$(SelectSrcpkg "${pkgname}")" + # local srcpkg_=/packages/abslibre/libre/icecat/PKGBUILD + # local srcpkg_=/packages/abslibre/libre/icecat/icecat-78.10.0_pre2-1-x86_64.src.tar.gz USAGE_MSG -exit + readonly UseAbs=0 readonly UseGui=0 + + SelectSrcpkg() # (pkgname) { -echo "SelectSrcpkg() OUT"; return - # echo back parameter, if not a valid pkgname local pkgname=$1 local pkgname_rx='^[0-9a-z][0-9a-zA-Z_-]*$' @@ -54,17 +60,20 @@ echo "SelectSrcpkg() OUT"; return (( ${#pkgs[@]} )) && [[ -n "${pkgs[@]}" ]] || return 1 select pkg in "${pkgs[@]}" ; do echo "${pkg}" ; break ; done -echo "SelectSrcpkg() OUT" } GitPkgbuilds() { -echo "GitPkgbuilds() IN" ; return - local pkgname_rx='^[-@\._\+0-9a-z]+$' +# echo "GitPkgbuilds() pkgname='$1' $( [[ "$1" =~ '^[-@\._\+0-9a-z]+$' ]] && echo t || echo f )" >&2 +# local pkgbuild=$( [[ "$1" =~ /PKGBUILD$ ]] && echo "$1" ) + + +# local pkgname_rx='^[-@\._\+0-9a-z]+$' + local pkgname_rx='^[0-9a-z][0-9a-zA-Z_-]*$' local pkgname=$( [[ "$1" =~ ${pkgname_rx} ]] && echo "$1" ) local sort_order=$( [[ "$2" == '--reverse' ]] && echo '--reverse' ) - [[ -z "${pkgname}" ]] && echo "invalid pkgname: '$1'" && return 1 -echo "GitPkgbuilds() 2" +# [[ -z "${pkgname}" ]] && echo "invalid pkgname: '$1'" >&2 && return 1 + [[ -z "${pkgname}" ]] && return 1 local arch_dirs="$( find -L $ABS_DIR/ -maxdepth 2 -type d -name $pkgname | sort $sort_order)" local abs_dirs="$( find $ABSLIBRE_DIR/ -maxdepth 2 -type d -name $pkgname | sort $sort_order)" @@ -72,72 +81,84 @@ echo "GitPkgbuilds() 2" local abs_dir="$( head -n 1 <<<${abs_dirs} )" local is_writable=$(touch ${abs_dir}/PKGBUILD &> /dev/null ; echo $(( ! $? )) ; ) - [[ -z "$arch_dir" ]] && echo "no such arch PKGBUILD" && return 1 - [[ -z "$abs_dir" ]] && echo "no such parabola PKGBUILD" && return 1 + [[ -z "$arch_dir" ]] && echo "no such arch PKGBUILD" >&2 && return 1 + [[ -z "$abs_dir" ]] && echo "no such parabola PKGBUILD" >&2 && return 1 [[ "$arch_dir" =~ $ABS_DIR.+$ABS_DIR ]] && echo "multiple arch PKGBUILDs found (try --reverse)" [[ "$abs_dir" =~ $ABSLIBRE_DIR.+$ABSLIBRE_DIR ]] && echo "multiple abslibre PKGBUILDs found (try --reverse)" (( ! ${is_writable} )) && echo "fixing 'dev' group perms on ABS dir" && mkdev ${abs_dir}/ ls --color=auto --group-directories-first -F -l ${arch_dir}/trunk/ ${abs_dir}/ - -echo "GitPkgbuilds() OUT" # ( set -x ; echo ${arch_dir}/trunk/ ${abs_dir}/ ) } DoDiff() { - local a="$1$( (( UseAbs )) || echo '/PKGBUILD')" - local b="$2$( (( UseAbs )) || echo '/PKGBUILD')" + local pkgbuild_a="$1" + local pkgbuild_b="$2" + local srcpkg_a="$3" + local srcpkg_b="$4" local sed_rx='s|(\-\-\-\|\+\+\+) /dev/fd/[0-9]*\s*(.*)|\1 /PKGBUILD \2|' local patch_file=srcpkgbuild.patch +echo "DoDiff() pkgbuild_a=$pkgbuild_a pkgbuild_b=$pkgbuild_b" + [[ -n "${pkgbuild_a}" && -n "${pkgbuild_b}" ]] || return 1 - if diff ${srcpkg_a} ${srcpkg_b} &> /dev/null - then echo "source packages identical" - else echo "source packages differ" - if diff <("${pkgbuild_a}") <("${pkgbuild_b}") &> /dev/null - then echo "PKGBUILDs identical" - else echo "PKGBUILDs differ" - if (( UseGui )) - then echo "launching meld" - meld <("${a}") <("${b}") - elif diff -u -r <("${a}") <("${b}") | sed -E "${diff_sed_rx}" | tee ${patch_file} - fi + if [[ -n "${srcpkg_a}" && -n "${srcpkg_b}" ]] + then if diff "${srcpkg_a}" "${srcpkg_b}" &> /dev/null + then echo "source packages identical" ; return ; + else echo "source packages differ" + fi + fi + + if diff "${pkgbuild_a}" "${pkgbuild_b}" &> /dev/null + then echo "PKGBUILDs identical" + else echo "PKGBUILDs differ" + if (( UseGui )) + then echo "launching meld" + meld "${pkgbuild_a}" "${pkgbuild_b}" + else diff -u -r "${pkgbuild_a}" "${pkgbuild_b}" | sed -E "${sed_rx}" | tee ${patch_file} fi fi } main() { -echo "meld-src-pkgbuilds() IN" # $# $@" >&2 ; local in=$# ; +echo -e "meld-src-pkgbuilds() IN\n n_args$#\n 1=$1\n 2=$2\n GitPkgbuilds='$(GitPkgbuilds "$1")'" ; # $# $@" >&2 ; local in=$# ; -# local UseGui=$( [[ "$1" == '--gui' ]] ; echo ! $(($?)) ) ; (( UseGui )) && shift ; -# local UseGui=$( while getopts 'g' opt ; do [[ "${opt}" == 'g' ]] ; echo $(( ! $? )) ; done ; shift $(( OPTIND - 1 )) ; ) - while getopts 'ag' opt - do case "$opt" in - a) UseAbs=1 ;; - g) UseGui=1 ;; - *) echo "invalid option: '%s'" "${opt}\n${USAGE}" ; return 1 ;; - esac - done ; shift $(( OPTIND - 1 )) ; - - local srcpkg_a="$( (( UseAbs )) && $(GitPkgbuilds "$1" || echo "$1" ) || \ - $(SelectSrcpkg "$1" || GitPkgbuilds "$1" || echo "$1" ) )" - local srcpkg_b="$( (( UseAbs )) && $(GitPkgbuilds "$2" || echo "$2" ) || \ - $(SelectSrcpkg "$1" || GitPkgbuilds "$2" || echo "$2" ) )" - local is_src_pkg=$( [[ "${srcpkg_a}" =~ src\.tar\.gz$ && \ - "${srcpkg_b}" =~ src\.tar\.gz$ ]] ; echo $(( ! $? )) ) - local is_abs_dir=$( (( UseAbs )) && [[ -d "${srcpkg_a}" && \ - -d "${srcpkg_b}" ]] ; echo $(( ! $? )) ) - local is_pkgbuild=$( [[ "${srcpkg_a}" =~ /PKGBUILD$ && -f "${srcpkg_a}" && \ - "${srcpkg_b}" =~ /PKGBUILD$ && -f "${srcpkg_b}" ]] ; echo $(( ! $? )) ) - -echo -e "meld-src-pkgbuilds()\n srcpkg_a=${srcpkg_a}\n srcpkg_b=${srcpkg_b}" >&2 - - if [[ -n "${srcpkg_a}" && -n "${srcpkg_b}" && "${srcpkg_a}" != "${srcpkg_b}" ]] + local pkgname_rx='^[0-9a-z][0-9a-zA-Z_-]*$' + local is_pkg_name=$( [[ "$1" =~ ${pkgname_rx} ]] ; echo $(( ! $? )) ) + local is_src_pkg_a=$( [[ "$1" =~ src\.tar\.gz$ ]] ; echo $(( ! $? )) ) + local is_src_pkg_b=$( [[ "$2" =~ src\.tar\.gz$ ]] ; echo $(( ! $? )) ) + local is_pkgbuild_a=$( [[ "$1" =~ /PKGBUILD$ ]] ; echo $(( ! $? )) ) + local is_pkgbuild_b=$( [[ "$2" =~ /PKGBUILD$ ]] ; echo $(( ! $? )) ) + local srcpkg_a + local srcpkg_b + + if (( is_pkg_name )) + then if (( UseAbs )) + then srcpkgs=( "$(GitPkgbuilds "$1")" ) + srcpkg_a=${srcpkgs[0]} + srcpkg_b=${srcpkgs[1]} + else srcpkg_a="$( SelectSrcpkg "$1" || GitPkgbuilds "$1" )" + srcpkg_b="$( SelectSrcpkg "$1" || GitPkgbuilds "$1" )" + fi + else (( is_src_pkg_a && is_src_pkg_b )) && srcpkg_a="$1" srcpkg_b="$2" + (( is_pkgbuild_a && is_pkgbuild_b )) && srcpkg_a="$1" srcpkg_b="$2" + fi + +# local are_src_pkgs=$( echo $(( is_src_pkg_a && is_src_pkg_b )) ) + local are_src_pkgs=$( (( is_src_pkg_a && is_src_pkg_b )) ; echo $(( ! $? )) ) + local are_abs_dirs=$( (( UseAbs )) && [[ -d "${srcpkg_a}" && \ + -d "${srcpkg_b}" ]] ; echo $(( ! $? )) ) + local are_pkgbuilds=$( (( is_pkgbuild_a )) && [[ -f "${srcpkg_a}" ]] && \ + (( is_pkgbuild_b )) && [[ -f "${srcpkg_b}" ]] ; echo $(( ! $? )) ) + +echo -e "meld-src-pkgbuilds()\n srcpkg_a=${srcpkg_a}\n srcpkg_b=${srcpkg_b}\n are_src_pkgs=$are_src_pkgs\n are_abs_dirs=$are_abs_dirs\n are_pkgbuilds=$are_pkgbuilds">&2 + + if [[ -z "${srcpkg_a}" || -z "${srcpkg_b}" || "${srcpkg_a}" == "${srcpkg_b}" ]] then echo "arguments must be one , or two unique *.src.tar.gz or PKGBUILD" - elif (( is_src_pkg )) + elif (( are_src_pkgs )) then local pkgbuild_a="$( [[ -f "${srcpkg_a}" ]] && tar -ztf "${srcpkg_a}" | grep PKGBUILD )" local pkgbuild_b="$( [[ -f "${srcpkg_b}" ]] && tar -ztf "${srcpkg_b}" | grep PKGBUILD )" @@ -145,16 +166,28 @@ echo -e "meld-src-pkgbuilds()\n pkgbuild_a=${pkgbuild_a}\n pkgbuild_b=${pkgbui if [[ -n "${pkgbuild_a}" && -n "${pkgbuild_b}" ]] then cd /tmp - tar -zxf "${srcpkg_a}" "${pkgbuild_a}" > srcpkgbuild_a - tar -zxf "${srcpkg_b}" "${pkgbuild_b}" > srcpkgbuild_b - DoDiff srcpkgbuild_a srcpkgbuild_b + tar -zxf "${srcpkg_a}" "${pkgbuild_a}" > ./srcpkgbuild_a + tar -zxf "${srcpkg_b}" "${pkgbuild_b}" > ./srcpkgbuild_b + DoDiff ./srcpkgbuild_a ./srcpkgbuild_b "${srcpkg_a}" "${srcpkg_b}" fi - elif (( is_abs_dir || is_pkgbuild )) + elif (( are_abs_dirs )) + then DoDiff "${srcpkg_a}/PKGBUILD" "${srcpkg_b}/PKGBUILD" + + elif (( are_pkgbuilds )) then DoDiff "${srcpkg_a}" "${srcpkg_b}" fi } +# local UseGui=$( [[ "$1" == '--gui' ]] ; echo ! $(($?)) ) ; (( UseGui )) && shift ; +# local UseGui=$( while getopts 'g' opt ; do [[ "${opt}" == 'g' ]] ; echo $(( ! $? )) ; done ; shift $(( OPTIND - 1 )) ; ) +while getopts 'ag' opt +do case "$opt" in + a) UseAbs=1 ;; + g) UseGui=1 ;; + *) echo "invalid option: '%s'" "${opt}\n${USAGE}" ; return 1 ;; + esac +done ; shift $(( OPTIND - 1 )) ; (( $# )) || ! echo "args err" || exit 1 ; main "$@" -- cgit v1.2.2