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>2022-08-29 10:27:59 -0400
commitd87ab6bbd54bf70211a7a11c2107386f0026e3ce (patch)
treed7781a4537a85c8577d35683d088fe4bb8b6dbdc /src
parent1da9ec135cdef5f363ace818e19d0519d78c69d4 (diff)
[maintenance-tools/meld-src-pkgbuilds] initial script
Diffstat (limited to 'src')
-rwxr-xr-xsrc/maintenance-tools/meld-src-pkgbuilds192
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 "$@"