diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2021-05-18 01:55:08 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2022-08-29 10:27:59 -0400 |
commit | d87ab6bbd54bf70211a7a11c2107386f0026e3ce (patch) | |
tree | d7781a4537a85c8577d35683d088fe4bb8b6dbdc /src | |
parent | 1da9ec135cdef5f363ace818e19d0519d78c69d4 (diff) |
[maintenance-tools/meld-src-pkgbuilds] initial script
Diffstat (limited to 'src')
-rwxr-xr-x | src/maintenance-tools/meld-src-pkgbuilds | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/src/maintenance-tools/meld-src-pkgbuilds b/src/maintenance-tools/meld-src-pkgbuilds new file mode 100755 index 0000000..5121236 --- /dev/null +++ b/src/maintenance-tools/meld-src-pkgbuilds @@ -0,0 +1,192 @@ +#!/bin/bash + +# 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 ABS_DIR=${PKGS_DIR}/arch +readonly ABSLIBRE_DIR=${PKGS_DIR}/abslibre + +[[ ! -d "${PKGS_DIR:-/packages}" ]] && echo "no such dir" && exit 1 + + +# readonly PKGS_DIR=$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|.*WORKDIR="\([^"]*\)*"|\1|') + +read -r -d '' USAGE <<-'USAGE_MSG' +USAGE: + + $0 [ -a | -g ] PKGBUILD-or-srcpkg-or-pkgname PKGBUILD-or-srcpkg + +OPTIONS: + + $0 [ -a ] UseAbs + $0 [ -g ] UseGui + +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 +USAGE_MSG + +readonly UseAbs=0 +readonly UseGui=0 + + +SelectSrcpkg() # (pkgname) +{ + # echo back parameter, if not a valid pkgname + local pkgname=$1 + local pkgname_rx='^[0-9a-z][0-9a-zA-Z_-]*$' + local pkg + +# echo "SelectSrcpkg() pkgname='$pkgname' sourcepkg $( [[ "$pkgname" =~ ${pkgname_rx} ]] && pacman -Si "$pkgname" &> /dev/null || echo " not")exists" >&2 ; + + [[ "${pkgname}" =~ ${pkgname_rx} ]] && pacman -Si ${pkgname} &> /dev/null || return 1 + +# echo "SelectSrcpkg() pkgname=${pkgname} PKGS_DIR=$PKGS_DIR is $( pacman -Qsq ${pkgname} &> /dev/null || echo 'not ') installed" >&2 + + local srcpkgs_glob="${pkgname}-*.src.tar.gz" + local pkgs=( $(find "${PKGS_DIR}"/abslibre/ -type f -name "${srcpkgs_glob}" 2> /dev/null) \ + $(find "${PKGS_DIR}"/sources/ -type f -name "${srcpkgs_glob}" 2> /dev/null) ) + +# printf "SelectSrcpkg() ${#pkgs[@]} pkgs=%s\n" "${pkgs[@]}" >&2 + + (( ${#pkgs[@]} )) && [[ -n "${pkgs[@]}" ]] || return 1 + + select pkg in "${pkgs[@]}" ; do echo "${pkg}" ; break ; done +} + +GitPkgbuilds() +{ +# 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'" >&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)" + local arch_dir="$( head -n 1 <<<${arch_dirs})" + local abs_dir="$( head -n 1 <<<${abs_dirs} )" + local is_writable=$(touch ${abs_dir}/PKGBUILD &> /dev/null ; echo $(( ! $? )) ; ) + +echo -e "GitPkgbuilds() OUT\n arch_dirs=$arch_dir\n abs_dirs=$abs_dirs\n arch_dir=$arch_dir\n abs_dir=$abs_dir\n is_writable=$is_writable" >&2 + + [[ -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}/ +} + +DoDiff() +{ + 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 [[ -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} >&2 + fi + fi +} + +main() +{ +echo -e "meld-src-pkgbuilds() IN\n n_args$#\n 1=$1\n 2=$2\n GitPkgbuilds='$(GitPkgbuilds "$1")'" ; # $# $@" >&2 ; local in=$# ; + + 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" )" ; is_src_pkg_a=1 ; + srcpkg_b="$( SelectSrcpkg "$1" || GitPkgbuilds "$1" )" ; is_src_pkg_b=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=$( (( 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 <pkgname>, or two unique *.src.tar.gz or PKGBUILD" + + 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 )" + +echo -e "meld-src-pkgbuilds()\n pkgbuild_a=${pkgbuild_a}\n pkgbuild_b=${pkgbuild_b}\n tar_a_cmd=${tar_a_cmd[@]}\n tar_b_cmd=${tar_b_cmd[@]}" >&2 + + 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 "${srcpkg_a}" "${srcpkg_b}" + rm ./srcpkgbuild_a ./srcpkgbuild_b + fi + + 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 "$@" |