summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2021-05-18 01:55:08 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2021-07-26 19:20:09 -0400
commit5006e1b15e48e86eaaf5ecbf314f5914db8b4d17 (patch)
tree226e367df71459f7df16945f298a3366aac24d02 /src
parent82067ca0ff8a33f03f845b9033da4bebfe054bf8 (diff)
wip refactor meld-src-pkgbuilds
Diffstat (limited to 'src')
-rwxr-xr-xsrc/maintenance-tools/meld-src-pkgbuilds124
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 "$@"