From 6387f82843f5ec5748319658e2dd172ee68e34aa Mon Sep 17 00:00:00 2001 From: bill-auger Date: Thu, 27 May 2021 12:55:09 -0400 Subject: wip - meld-src-pkgbuilds --- src/maintenance-tools/meld-src-pkgbuilds | 160 +++++++++++++++++-------------- 1 file changed, 87 insertions(+), 73 deletions(-) diff --git a/src/maintenance-tools/meld-src-pkgbuilds b/src/maintenance-tools/meld-src-pkgbuilds index 6a26839..e53b3fd 100755 --- a/src/maintenance-tools/meld-src-pkgbuilds +++ b/src/maintenance-tools/meld-src-pkgbuilds @@ -4,119 +4,133 @@ readonly PKGS_DIR="$(source <(grep 'WORKDIR=' /etc/libretools.conf) ; echo "${WORKDIR}")" # readonly PKGS_DIR=$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|.*WORKDIR="\([^"]*\)*"|\1|') +readonly UseAbs=0 +readonly UseGui=0 -select_srcpkg() # (pkgname) + +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 "select_srcpkg() pkgname='$pkgname' sourcepkg $( [[ "$pkgname" =~ ${pkgname_rx} ]] && pacman -Si "$pkgname" &> /dev/null || echo " not")exists" >&2 ; +# 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 "select_srcpkg() pkgname=${pkgname} PKGS_DIR=$PKGS_DIR is $( pacman -Qsq ${pkgname} &> /dev/null || echo 'not ') installed" >&2 +# 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 "select_srcpkg() ${#pkgs[@]} pkgs=%s\n" "${pkgs[@]}" >&2 +# printf "SelectSrcpkg() ${#pkgs[@]} pkgs=%s\n" "${pkgs[@]}" >&2 (( ${#pkgs[@]} )) && [[ -n "${pkgs[@]}" ]] || return 1 select pkg in "${pkgs[@]}" ; do echo "${pkg}" ; break ; done } -git-pkgbuilds() +GitPkgbuilds() +{ + local pkgname_rx='^[-@\._\+0-9a-z]+$' + local pkgname=$( [[ "$1" =~ ${pkgname_rx} ]] && echo "$1" ) + local sort_order=$( [[ "$2" == '--reverse' ]] && echo '--reverse' ) + [[ -z "${pkgname}" ]] && echo "invalid pkgname: '$1'" && 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 $(( ! $? )) ; ) + + [[ -z "$arch_dir" ]] && echo "no such arch PKGBUILD" && return 1 + [[ -z "$abs_dir" ]] && echo "no such parabola PKGBUILD" && 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 + +# ( set -x ; echo ${arch_dir}/trunk/ ${abs_dir}/ ) +} + +DoDiff() # (pkgbuild_a pkgbuild_b) { - local pkgname_rx='^[-@\._\+0-9a-z]+$' - local pkgname=$( [[ "$1" =~ ${pkgname_rx} ]] && echo "$1" ) - local sort_order=$( [[ "$2" == '--reverse' ]] && echo '--reverse' ) - [[ -z "${pkgname}" ]] && echo "invalid pkgname: '$1'" && 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 $(( ! $? )) ; ) - - [[ -z "$arch_dir" ]] && echo "no such arch PKGBUILD" && return 1 - [[ -z "$abs_dir" ]] && echo "no such parabola PKGBUILD" && 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 - -# ( set -x ; echo ${arch_dir}/trunk/ ${abs_dir}/ ) - DoDiff ${arch_dir}/trunk/ ${abs_dir}/ + local a="$1$( (( UseAbs )) || echo '/PKGBUILD')" + local b="$2$( (( UseAbs )) || echo '/PKGBUILD')" + local sed_rx='s|(\-\-\-\|\+\+\+) /dev/fd/[0-9]*\s*(.*)|\1 /PKGBUILD \2|' + local patch_file=srcpkgbuild.patch + + [[ -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 + fi + fi } main() # ( [ -gui ] pkgname ) { echo "meld-src-pkgbuilds() IN" # $# $@" >&2 ; local in=$# ; - local use_gui=$( [[ "$1" == '--gui' ]] ; echo ! $(($?)) ) ; (( use_gui )) && shift ; -# local use_gui=$( while getopts 'g' opt ; do [[ "${opt}" == 'g' ]] ; echo $(( ! $? )) ; done ; shift $(( OPTIND - 1 )) ; ) -# local use_gui=0 -# while getopts 'g' opt -# do case "$opt" in -# g) use_gui=1 ;; -# ?) N="$(sed 's|[^0-9]||g' <<<$OPTARG)" ;; -# ?) case $OPTARG in ; a) A=$OPTARG ; ;; -# *) error "invalid option: '%s'" "$arg" ; return 1 ;; -# esac -# done ; shift $(( OPTIND - 1 )) ; -{ +# local UseGui=$( [[ "$1" == '--gui' ]] ; echo ! $(($?)) ) ; (( UseGui )) && shift ; +# local UseGui=$( while getopts 'g' opt ; do [[ "${opt}" == 'g' ]] ; echo $(( ! $? )) ; done ; shift $(( OPTIND - 1 )) ; ) + while getopts 'g' opt + do case "$opt" in + a) UseAbs=1 ;; + g) UseGui=1 ;; + *) echo "invalid option: '%s'" "${opt}" ; return 1 ;; + esac + done ; shift $(( OPTIND - 1 )) ; + # srcpkg_* eg: - # # local srcpkg_a="$(select_srcpkg "${pkgname}")" - # # local srcpkg_b=/packages/abslibre/libre/icecat/icecat-78.10.0_pre2-1-x86_64.src.tar.gz - local srcpkg_a="$(select_srcpkg "$1" || echo "$1" )" - local srcpkg_b="$(select_srcpkg "$1" || echo "$2" )" + # # local srcpkg_a="$(SelectSrcpkg "${pkgname}")" + # # local srcpkg_a='icecat' + # # 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="$( (( 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 - [[ "${srcpkg_a}" != "${srcpkg_b}" ]] || return 1 + if [[ -n "${srcpkg_a}" && -n "${srcpkg_b}" && "${srcpkg_a}" != "${srcpkg_b}" ]] + then echo "arguments must be one , or two unique *.src.tar.gz or PKGBUILD" - if [[ "${srcpkg_a}" =~ src\.tar\.gz$ && "${srcpkg_b}" =~ src\.tar\.gz$ ]] + elif (( is_src_pkg )) 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 - [[ -n "${pkgbuild_a}" && -n "${pkgbuild_b}" ]] || return 1 + 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 + fi - cd /tmp - pkgbuild_a=/tmp/pkgbuild_a ; tar -zxf "${srcpkg_a}" "${pkgbuild_a}" > "${pkgbuild_a}" ; - pkgbuild_b=/tmp/pkgbuild_b ; tar -zxf "${srcpkg_b}" "${pkgbuild_b}" > "${pkgbuild_b}" ; - DoDiff "${pkgbuild_a}" "${pkgbuild_b}" - elif [[ "${srcpkg_a}" =~ /PKGBUILD$ && "${srcpkg_b}" =~ /PKGBUILD$ ]] + elif (( is_abs_dir || is_pkgbuild )) then DoDiff "${srcpkg_a}" "${srcpkg_b}" - else return - fi -} - -DoDiff() # (pkgbuild_a pkgbuild_b) -{ - local sed_rx='s|(\-\-\-\|\+\+\+) /dev/fd/[0-9]*\s*(.*)|\1 /PKGBUILD \2|' - - [[ -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 <("${tar_a_cmd[@]}") <("${tar_b_cmd[@]}") &> /dev/null - then echo "PKGBUILDs identical" - else echo "PKGBUILDs differ" - if (( use_gui )) - then echo "launching meld" - meld <("${tar_a_cmd[@]}") <("${tar_b_cmd[@]}") - else diff -u <("${tar_a_cmd[@]}") <("${tar_b_cmd[@]}") | sed -E "${sed_rx}" - fi - fi fi } -- cgit v1.2.2