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> | 2021-07-26 19:20:09 -0400 |
commit | 5006e1b15e48e86eaaf5ecbf314f5914db8b4d17 (patch) | |
tree | 226e367df71459f7df16945f298a3366aac24d02 /src | |
parent | 82067ca0ff8a33f03f845b9033da4bebfe054bf8 (diff) |
wip refactor meld-src-pkgbuilds
Diffstat (limited to 'src')
-rwxr-xr-x | src/maintenance-tools/meld-src-pkgbuilds | 124 |
1 files changed, 124 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..6a26839 --- /dev/null +++ b/src/maintenance-tools/meld-src-pkgbuilds @@ -0,0 +1,124 @@ +#!/bin/bash + +# readonly PKGS_DIR=/packages +readonly PKGS_DIR="$(source <(grep 'WORKDIR=' /etc/libretools.conf) ; echo "${WORKDIR}")" +# readonly PKGS_DIR=$(grep 'WORKDIR=' /etc/libretools.conf | sed 's|.*WORKDIR="\([^"]*\)*"|\1|') + + +select_srcpkg() # (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 ; + + [[ "${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 + + 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 + + (( ${#pkgs[@]} )) && [[ -n "${pkgs[@]}" ]] || return 1 + + select pkg in "${pkgs[@]}" ; do echo "${pkg}" ; break ; done +} + +git-pkgbuilds() +{ + 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}/ +} + +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 )) ; +{ + # 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" )" + +echo -e "meld-src-pkgbuilds()\n srcpkg_a=${srcpkg_a}\n srcpkg_b=${srcpkg_b}" >&2 + + [[ "${srcpkg_a}" != "${srcpkg_b}" ]] || return 1 + + if [[ "${srcpkg_a}" =~ src\.tar\.gz$ && "${srcpkg_b}" =~ src\.tar\.gz$ ]] + 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 + + 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$ ]] + 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 +} + + +main "$@" |