Add sogrep
This is from Eli's dotfiles after he'd cleaned it up but never actually went ahead and made this PR. I figure it's time to add it.
This commit is contained in:
parent
26b2ffc665
commit
f61421a3f5
6
Makefile
6
Makefile
|
@ -16,7 +16,8 @@ BINPROGS = \
|
|||
crossrepomove\
|
||||
arch-nspawn \
|
||||
mkarchroot \
|
||||
makechrootpkg
|
||||
makechrootpkg \
|
||||
sogrep
|
||||
|
||||
CONFIGFILES = \
|
||||
makepkg-x86_64.conf \
|
||||
|
@ -63,7 +64,8 @@ BASHCOMPLETION_LINKS = \
|
|||
|
||||
MANS = \
|
||||
doc/lddd.1 \
|
||||
doc/checkpkg.1
|
||||
doc/checkpkg.1 \
|
||||
doc/sogrep.1
|
||||
|
||||
|
||||
all: $(BINPROGS) bash_completion zsh_completion man
|
||||
|
|
|
@ -20,7 +20,7 @@ Maintainers:
|
|||
* Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
|
||||
* Levente Polyak <anthraxx@archlinux.org>
|
||||
* Pierre Schmitz <pierre@archlinux.de>
|
||||
* Sébastien Luttringer <seblu@seblu.net>
|
||||
* Sébastien Luttringer <seblu@seblu.net>
|
||||
* Sven-Hendrik Haase <svenstaro@gmail.com>
|
||||
* Thomas Bächler <thomas@archlinux.org>
|
||||
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
sogrep(1)
|
||||
=========
|
||||
|
||||
Name
|
||||
----
|
||||
sogrep - Find packages using a linked to a given shared library
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
sogrep [options] repo libname
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Check the soname links database for pacman repositories containing packages
|
||||
linked to a given shared library. If the repository specified is "all", then
|
||||
all repositories will be searched, otherwise only the named repository will be
|
||||
searched.
|
||||
|
||||
If the links database does not exist, it will be downloaded first.
|
||||
|
||||
Options
|
||||
-------
|
||||
|
||||
*-r, --refresh*::
|
||||
Refresh the links databases
|
||||
|
||||
*-h, --help*::
|
||||
Show a help text
|
||||
|
||||
include::footer.asciidoc[]
|
|
@ -0,0 +1,98 @@
|
|||
#!/bin/bash
|
||||
# License: Unspecified
|
||||
|
||||
: ${SOLINKS_MIRROR:="https://mirror.pkgbuild.com"}
|
||||
: ${SOCACHE_DIR:="${XDG_CACHE_HOME:-${HOME}/.cache}/sogrep"}
|
||||
repos=('staging' 'testing' 'core' 'extra'
|
||||
'community-staging' 'community-testing' 'community'
|
||||
'multilib-staging' 'multilib-testing' 'multilib'
|
||||
'gnome-unstable' 'kde-unstable')
|
||||
arches=('x86_64')
|
||||
|
||||
source /usr/share/makepkg/util/util.sh
|
||||
|
||||
recache() {
|
||||
local repo arch
|
||||
|
||||
for repo in "${repos[@]}"; do
|
||||
for arch in "${arches[@]}"; do
|
||||
rm -rf "${SOCACHE_DIR}/${arch}/${repo}"
|
||||
mkdir -p "${SOCACHE_DIR}/${arch}/${repo}"
|
||||
curl "${SOLINKS_MIRROR}/${repo}/os/${arch}/${repo}.links.tar.gz" | bsdtar -xf - -C "${SOCACHE_DIR}/${arch}/${repo}"
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
search() {
|
||||
local repo=$1 arch lib=$2
|
||||
|
||||
if [[ $repo != all ]]; then
|
||||
if ! in_array "$repo" "${repos[@]}"; then
|
||||
echo "${BASH_SOURCE[0]##*/}: unrecognized repo '$repo'"
|
||||
echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
|
||||
exit 1
|
||||
fi
|
||||
local repos=("${repo}")
|
||||
fi
|
||||
|
||||
if [[ ! -d ${SOCACHE_DIR} ]]; then
|
||||
recache
|
||||
fi
|
||||
|
||||
for arch in "${arches[@]}"; do
|
||||
for repo in "${repos[@]}"; do
|
||||
db=${SOCACHE_DIR}/${arch}/${repo}/
|
||||
if [[ -d ${db} ]]; then
|
||||
while read -rd '' pkg; do
|
||||
pkg=${pkg#${db}}
|
||||
printf '%s/%s\n' "${repo}" "${pkg%-*-*/links}"
|
||||
done < <(grep -rlZ "${lib}" "${db}")
|
||||
fi
|
||||
done
|
||||
done | sort -u
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<- _EOF_
|
||||
Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] REPO LIBNAME
|
||||
|
||||
Check the soname links database for pacman repositories containing
|
||||
packages linked to a given shared library. If the repository specified
|
||||
is "all", then all repositories will be searched, otherwise only the
|
||||
named repository will be searched.
|
||||
|
||||
If the links database does not exist, it will be downloaded first.
|
||||
|
||||
OPTIONS
|
||||
-r, --refresh Refresh the links databases
|
||||
-h, --help Show this help text
|
||||
_EOF_
|
||||
}
|
||||
|
||||
if (( $# == 0 )); then
|
||||
echo "error: No arguments passed."
|
||||
echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while (( $# )); do
|
||||
case $1 in
|
||||
-r|--refresh)
|
||||
recache
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
if (( $# < 2 )); then
|
||||
echo "error: Not enough arguments passed."
|
||||
echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
|
||||
exit 1
|
||||
fi
|
||||
search "$@"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
Loading…
Reference in New Issue