Compare commits

...

6 Commits

Author SHA1 Message Date
442d397ac0 profile.sh: use local vars in load 2020-12-20 10:52:27 +01:00
35dbadef56 comparepkg: add list funcs 2020-12-19 23:49:49 +01:00
a9852e82e5 checkrepo (#44)
checkrepo: move arrays in place

split out new checkrepo from comparepkg

Reviewed-on: #44
Co-Authored-By: artoo <artoo@artixlinux.org>
Co-Committed-By: artoo <artoo@artixlinux.org>
2020-12-19 23:11:02 +01:00
ae723c88df Merge branch 'shellcheck' 2020-12-19 15:24:16 +01:00
f08ce91d81 shellcheck 2020-12-19 15:23:20 +01:00
887ed0c343 arch: switch to GH mirror 2020-12-18 23:26:01 +01:00
10 changed files with 261 additions and 212 deletions

View File

@@ -37,7 +37,8 @@ PKG_BIN = \
bin/pkg/finddeps \
bin/pkg/find-libdeps \
bin/pkg/batchpkg \
bin/pkg/signpkg
bin/pkg/signpkg \
bin/pkg/checkrepo
LN_COMMITPKG = \
extrapkg \

View File

@@ -142,9 +142,7 @@ chroot_extra_mount() {
chroot_add_resolv_conf "${working_dir}"
for arg in "${mount_args[@]}"; do
local flag=${arg%%:*}
local dest=${arg##*:}
local src=${arg%:*}
local flag=${arg%%:*} dest=${arg##*:} src=${arg%:*}
src=${src#*:}
chroot_mount "${src}" "${working_dir}${dest}" "${flag}"
done

View File

@@ -31,16 +31,14 @@ get_compliant_name(){
}
subrepo_clone(){
local pkg="$1" org="$2"
local gitname
local pkg="$1" org="$2" gitname
gitname=$(get_compliant_name "$pkg")
msg2 "Subrepo clone [%s] from (%s)" "$pkg" "$org/$gitname"
git subrepo clone "${GIT_SSH}":"$org"/"$gitname".git "$pkg"
}
create_repo() {
local pkg="$1" org="$2"
local gitname
local pkg="$1" org="$2" gitname
gitname=$(get_compliant_name "$pkg")
local json="{ \"auto_init\": true, \"name\":\"$gitname\", \"gitignores\":\"ArchLinuxPackages\", \"readme\": \"Default\" }"
@@ -288,7 +286,7 @@ TEAM='community'
GROUP="${ARTIX_TREE[0]}"
host_tree_artix="${GIT_SSH}:artixlinux"
host_tree_arch='git://git.archlinux.org/svntogit'
host_tree_arch='https://github.com/archlinux'
usage() {
echo "Usage: ${0##*/} [options]"

182
bin/pkg/checkrepo.in Normal file
View File

@@ -0,0 +1,182 @@
#!/bin/bash
#
# Copyright (C) 2018-19 artoo@artixlinux.org
# Copyright (C) 2018 Artix Linux Developers
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
m4_include(lib/util-base.sh)
m4_include(lib/util-pkg.sh)
m4_include(lib/base/message.sh)
m4_include(lib/pkg/repo.sh)
m4_include(lib/pkg/table.sh)
update_db_cache(){
msg "Updating database cache"
for repo in "${searchrepos[@]}"; do
local cachedir=${db_cache_dir}/${linksdb_ext}/${CARCH}/${repo}
rm -rf "$cachedir"
mkdir -p "$cachedir"
msg2 "%s" "$repo"
curl -L -s "${REPOS_MIRROR}/${repo}/os/${CARCH}/${repo}.${linksdb_ext}" \
| bsdtar -xf - -C "$cachedir"
done
msg "Done"
}
#{{{ sogrep
query_db() {
for repo in "${searchrepos[@]}"; do
local db=${db_cache_dir}/${linksdb_ext}/${CARCH}/${repo}/
if [[ -d ${db} ]]; then
while read -rd '' pkg; do
read -r match
pkg=${pkg#${db}}
pkg="${pkg%/*}"
msg_row "${tableQ}" "${repo}" "${pkg}" "${match}"
done < <(grep -rZ "${library}" "${db}") | sort -u
fi
done
}
#}}}
#{{{ check db
is_db_entry() {
local pkgname="$1" repo="${REPOS[$2]}"
if [[ -d ${db_cache_dir}/${linksdb_ext}/${CARCH}/$repo/$pkgname ]];then
return 0
fi
return 1
}
check_db(){
local pkgpath="${1%/*}"
for repo in "${!REPOS[@]}"; do
local pkgbuild artixver
[[ -f $pkgpath/$CARCH/$repo/PKGBUILD ]] && pkgbuild=$pkgpath/$CARCH/$repo/PKGBUILD
[[ -f $pkgpath/repos/$repo-$CARCH/PKGBUILD ]] && pkgbuild=$pkgpath/repos/$repo-$CARCH/PKGBUILD
[[ -f $pkgpath/repos/$repo-any/PKGBUILD ]] && pkgbuild=$pkgpath/repos/$repo-any/PKGBUILD
# shellcheck disable=1090
. "$pkgbuild" 2>/dev/null
artixver=$(get_full_version)
for name in "${pkgname[@]}"; do
if ! is_db_entry "$name-$artixver" "$repo"; then
msg_row "${tableU}" "$repo" "$name" "$artixver" "false"
fi
done
unset artixver pkgbuild pkgver epoch pkgname pkgbase
done
}
#}}}
show_lib_table() {
msg_table_header "${tableQ}" "Repo" "Package" "Library"
query_db
}
show_db_table(){
msg_table_header "${tableU}" "Repo" "Package" "Version" "Database"
tree_loop check_db
}
db_cache_dir="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
linksdb_ext="links.tar.${DBEXT}"
load_makepkg_config
sync=false
check=false
query=false
readonly tableU="%-20s %-35s %-30s %-10s"
readonly tableQ="%-20s %-45s %s"
set_arch_repos "true" "true" "true"
#{{{ repo names arrays
declare -A REPOS=(
[${valid_names[0]}]=system
[${valid_names[1]}]=world
[${valid_names[2]}]=galaxy
[${valid_names[3]}]=lib32
[${valid_names[4]}]=gremlins
[${valid_names[5]}]=galaxy-gremlins
[${valid_names[6]}]=lib32-gremlins
[${valid_names[7]}]=goblins
[${valid_names[8]}]=galaxy-goblins
[${valid_names[9]}]=lib32-goblins
[${valid_names[11]}]=kde-wobble
[${valid_names[12]}]=gnome-wobble
)
searchrepos=(
"${REPOS[${valid_names[11]}]}"
"${REPOS[${valid_names[12]}]}"
"${REPOS[${valid_names[7]}]}"
"${REPOS[${valid_names[8]}]}"
"${REPOS[${valid_names[9]}]}"
"${REPOS[${valid_names[4]}]}"
"${REPOS[${valid_names[5]}]}"
"${REPOS[${valid_names[6]}]}"
"${REPOS[${valid_names[0]}]}"
"${REPOS[${valid_names[1]}]}"
"${REPOS[${valid_names[2]}]}"
"${REPOS[${valid_names[3]}]}"
)
#}}}
usage() {
echo "Usage: ${0##*/} [options] (with -q [libname])"
echo ' -r <repo> Repo name to query'
echo ' [default: all]'
echo " -s Sync repo databases"
echo ' -c Check repos'
echo " -q Query repo databases for so libs"
echo ' -h This help'
echo ''
echo ''
exit "$1"
}
opts='r:qcsh'
while getopts "${opts}" arg; do
case "${arg}" in
r) searchrepos=("$OPTARG") ;;
s) sync=true ;;
c) check=true ;;
q) query=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
esac
done
shift $(( OPTIND - 1 ))
library="$1"; shift
${sync} && update_db_cache
${check} && show_db_table
${query} && show_lib_table

View File

@@ -16,44 +16,21 @@ m4_include(lib/util-base.sh)
m4_include(lib/util-pkg.sh)
m4_include(lib/base/message.sh)
m4_include(lib/pkg/repo.sh)
m4_include(lib/pkg/table.sh)
#{{{ table
msg_table_header(){
local mesg=$1; shift
# shellcheck disable=2059
printf "${BLUE} ${mesg} ${ALL_OFF}\n" "$@" >&2
}
msg_row_downgrade(){
local mesg=$1; shift
# shellcheck disable=2059
printf "${YELLOW} ${mesg}${ALL_OFF}\n" "$@" >&2
}
msg_row_notify(){
local mesg=$1; shift
# shellcheck disable=2059
printf "${GREEN} ${mesg}${ALL_OFF}\n" "$@" >&2
}
msg_row(){
local mesg=$1; shift
# printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
# shellcheck disable=2059
printf "${WHITE} ${mesg}${ALL_OFF}\n" "$@" >&2
}
msg_row_upgrade(){
local mesg=$1; shift
# shellcheck disable=2059
printf "${RED} ${mesg} ${ALL_OFF}\n" "$@" >&2
}
#}}}
#{{{ upgrades, downgrades, moves
remove_list(){
local name="$1"
[[ -f "${TREE_DIR_ARTIX}"/$name.list ]] && rm "${TREE_DIR_ARTIX}"/$name.list
}
write_list(){
local line="$1" name="$2"
printf "%s\n" "$line" >> "${TREE_DIR_ARTIX}"/$name.list
}
compare_m(){
result=$(vercmp "$artixver" "$archver")
case ${artixrepo} in
@@ -63,7 +40,7 @@ compare_m(){
else
msg_row_notify "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
if [[ -n "$archrepo" ]]; then
printf "%s\n" "${a}:${b}:$pkg" >> "${TREE_DIR_ARTIX}"/pkg_moves.list
write_list "${a}:${b}:$pkg" pkg_moves
fi
fi
;;
@@ -74,7 +51,7 @@ compare_u(){
result=$(vercmp "$artixver" "$archver")
if [ "$result" -eq -1 ];then
msg_row_upgrade "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
printf "%s\n" "${a}:$pkg" >> "${TREE_DIR_ARTIX}"/pkg_upgrades.list
write_list "${a}:$pkg" pkg_upgrades
fi
}
@@ -97,12 +74,12 @@ get_archpath(){
}
pre_compare(){
local func="$1" pkgpath="$2" result group
local func="$1" pkgpath="$2" result group pkg
group="${pkgpath%/*}"
group=${group##*/}
local pkg artixrepo archrepo pkgbuild artixver archver archpath node a b
pkg=${pkgpath##*/}
local artixrepo archrepo pkgbuild artixver archver archpath node a b
artixrepo=$(find_repo "$pkgpath")
pkgbuild=$pkgpath/$artixrepo/PKGBUILD
@@ -148,24 +125,13 @@ compare_move(){
#}}}
#{{{ functions
tree_loop(){
local func="$1"
for tree in "${ARTIX_TREE[@]}"; do
for package in $(find "${TREE_DIR_ARTIX}/$tree" -name trunk); do
"$func" "$package"
done
done
}
show_compare_header(){
msg_table_header "${table}" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" "Group"
}
show_upgrades_table(){
show_compare_header
[[ -f "${TREE_DIR_ARTIX}"/pkg_upgrades.list ]] && rm "${TREE_DIR_ARTIX}"/pkg_upgrades.list
remove_list pkg_upgrades
tree_loop compare_upgrades
}
@@ -176,96 +142,10 @@ show_downgrades_table(){
show_move_table(){
show_compare_header
[[ -f "${TREE_DIR_ARTIX}"/pkg_moves.list ]] && rm "${TREE_DIR_ARTIX}"/pkg_moves.list
remove_list pkg_moves
tree_loop compare_move
}
update_db_cache(){
msg "Updating database cache"
for repo in "${searchrepos[@]}"; do
local cachedir=${db_cache_dir}/${linksdb_ext}/${CARCH}/${repo}
rm -rf "$cachedir"
mkdir -p "$cachedir"
msg2 "%s" "$repo"
curl -L -s "${REPOS_MIRROR}/${repo}/os/${CARCH}/${repo}.${linksdb_ext}" \
| bsdtar -xf - -C "$cachedir"
done
msg "Done"
}
#}}}
#{{{ sogrep
query_db() {
for repo in "${searchrepos[@]}"; do
local db=${db_cache_dir}/${linksdb_ext}/${CARCH}/${repo}/
if [[ -d ${db} ]]; then
while read -rd '' pkg; do
read -r match
pkg=${pkg#${db}}
pkg="${pkg%/*}"
msg_row "${tableQ}" "${repo}" "${pkg}" "${match}"
done < <(grep -rZ "${library}" "${db}") | sort -u
fi
done
}
show_lib_table() {
${sync} && update_db_cache
msg_table_header "${tableQ}" "Repo" "Package" "Library"
query_db
}
#}}}
#{{{ check db
is_db_entry() {
local pkgname="$1" repo="${REPOS[$2]}"
if [[ -d ${db_cache_dir}/${linksdb_ext}/${CARCH}/$repo/$pkgname ]];then
return 0
fi
return 1
}
check_db(){
local pkgpath="${1%/*}"
for repo in "${!REPOS[@]}"; do
local pkgbuild artixver
[[ -f $pkgpath/$CARCH/$repo/PKGBUILD ]] && pkgbuild=$pkgpath/$CARCH/$repo/PKGBUILD
[[ -f $pkgpath/repos/$repo-$CARCH/PKGBUILD ]] && pkgbuild=$pkgpath/repos/$repo-$CARCH/PKGBUILD
[[ -f $pkgpath/repos/$repo-any/PKGBUILD ]] && pkgbuild=$pkgpath/repos/$repo-any/PKGBUILD
# shellcheck disable=1090
. "$pkgbuild" 2>/dev/null
artixver=$(get_full_version)
for name in "${pkgname[@]}"; do
if ! is_db_entry "$name-$artixver" "$repo"; then
msg_row "${tableU}" "$repo" "$name" "$artixver" "false"
fi
done
unset artixver pkgbuild pkgver epoch pkgname pkgbase
done
}
show_db_table(){
${sync} && update_db_cache
msg_table_header "${tableU}" "Repo" "Package" "Version" "Database"
tree_loop check_db
}
#}}}
db_cache_dir="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
linksdb_ext="links.tar.${DBEXT}"
load_makepkg_config
testing=true
@@ -276,13 +156,7 @@ upgrades=false
downgrades=false
move=false
sync=false
check=false
query=false
readonly table="%-18s %-18s %-25s %-27s %-27s %-10s"
readonly tableU="%-20s %-35s %-30s %-10s"
readonly tableQ="%-20s %-45s %s"
usage() {
echo "Usage: ${0##*/} [options] (with -q [libname])"
@@ -292,28 +166,19 @@ usage() {
echo " -x Don't inlcude testing packages"
echo " -y Don't inlcude staging packages"
echo ' -z Include unstable kde and gnome'
echo " -s Sync repo databases"
echo ' -c Check repos'
echo " -q Query repo databases for so libs"
echo ' -r <repo> Repo name to query'
echo ' [default: all]'
echo ' -h This help'
echo ''
echo ''
exit "$1"
}
opts='r:qcsudmxyzh'
opts='udmxyzh'
while getopts "${opts}" arg; do
case "${arg}" in
u) upgrades=true ;;
d) downgrades=true ;;
m) move=true ;;
s) sync=true ;;
c) check=true ;;
q) query=true ;;
r) searchrepos=("$OPTARG") ;;
x) testing=false ;;
y) staging=false ;;
z) unstable=true ;;
@@ -324,50 +189,10 @@ done
shift $(( OPTIND - 1 ))
library="$1"; shift
set_arch_repos "$testing" "$staging" "$unstable"
#{{{ repo names arrays
declare -A REPOS=(
[${valid_names[0]}]=system
[${valid_names[1]}]=world
[${valid_names[2]}]=galaxy
[${valid_names[3]}]=lib32
[${valid_names[4]}]=gremlins
[${valid_names[5]}]=galaxy-gremlins
[${valid_names[6]}]=lib32-gremlins
[${valid_names[7]}]=goblins
[${valid_names[8]}]=galaxy-goblins
[${valid_names[9]}]=lib32-goblins
[${valid_names[11]}]=kde-wobble
[${valid_names[12]}]=gnome-wobble
)
searchrepos=(
"${REPOS[${valid_names[11]}]}"
"${REPOS[${valid_names[12]}]}"
"${REPOS[${valid_names[7]}]}"
"${REPOS[${valid_names[8]}]}"
"${REPOS[${valid_names[9]}]}"
"${REPOS[${valid_names[4]}]}"
"${REPOS[${valid_names[5]}]}"
"${REPOS[${valid_names[6]}]}"
"${REPOS[${valid_names[0]}]}"
"${REPOS[${valid_names[1]}]}"
"${REPOS[${valid_names[2]}]}"
"${REPOS[${valid_names[3]}]}"
)
#}}}
${move} && show_move_table
${upgrades} && show_upgrades_table
${downgrades} && show_downgrades_table
${check} && show_db_table
${query} && show_lib_table

View File

@@ -36,5 +36,5 @@
# default repos root for deploypkg
# REPOS_ROOT=${WORKSPACE_DIR}/repos
# default mirror for comparepkg -s
# default mirror for checkrepo
# REPOS_MIRROR="http://mirror1.artixlinux.org/repos"

View File

@@ -61,7 +61,7 @@ load_pkgs(){
local pkglist="$1" init="$2"
info "Loading Packages: [%s] ..." "${pkglist##*/}"
local _init="s|@$init||g"
local _init="s|@$init||g" _init_rm1 _init_rm2
case "$init" in
'openrc') _init_rm1="s|@runit.*||g"; _init_rm2="s|@s6.*||g" ;;
's6') _init_rm1="s|@runit.*||g"; _init_rm2="s|@openrc.*||g" ;;

View File

@@ -5,15 +5,15 @@
shopt -s extglob
set_arch_repos(){
local x="$1" y="$2" z="$3"
local _testing="${1:-false}" _staging="${2:-false}" _unstable="${3:-false}"
# shellcheck disable=1090
. "${DATADIR}"/valid-names.conf
ARCH_REPOS=("${stable[@]}")
$x && ARCH_REPOS+=("${gremlins[@]}")
$y && ARCH_REPOS+=("${goblins[@]}")
$z && ARCH_REPOS+=("${unstable[@]}")
$_testing && ARCH_REPOS+=("${gremlins[@]}")
$_staging && ARCH_REPOS+=("${goblins[@]}")
$_unstable && ARCH_REPOS+=("${unstable[@]}")
}
find_repo(){
@@ -27,10 +27,19 @@ find_repo(){
}
find_pkg(){
local searchdir="$1" pkg="$2"
local result
local searchdir="$1" pkg="$2" result
result=$(find "$searchdir" -mindepth 2 -maxdepth 2 -type d -name "$pkg")
echo "$result"
}
tree_loop(){
local func="$1" pkgs
for tree in "${ARTIX_TREE[@]}"; do
pkgs=$(find "${TREE_DIR_ARTIX}/$tree" -name repos -o -name "$CARCH")
for package in ${pkgs}; do
"$func" "$package"
done
done
}
#}}}

36
lib/pkg/table.sh Normal file
View File

@@ -0,0 +1,36 @@
#!/hint/bash
#{{{ table
msg_table_header(){
local mesg=$1; shift
# shellcheck disable=2059
printf "${BLUE} ${mesg} ${ALL_OFF}\n" "$@" >&2
}
msg_row_downgrade(){
local mesg=$1; shift
# shellcheck disable=2059
printf "${YELLOW} ${mesg}${ALL_OFF}\n" "$@" >&2
}
msg_row_notify(){
local mesg=$1; shift
# shellcheck disable=2059
printf "${GREEN} ${mesg}${ALL_OFF}\n" "$@" >&2
}
msg_row(){
local mesg=$1; shift
# printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
# shellcheck disable=2059
printf "${WHITE} ${mesg}${ALL_OFF}\n" "$@" >&2
}
msg_row_upgrade(){
local mesg=$1; shift
# shellcheck disable=2059
printf "${RED} ${mesg} ${ALL_OFF}\n" "$@" >&2
}
#}}}

View File

@@ -49,7 +49,7 @@ load_pkg_config(){
TREE_DIR_ARCH=${TREE_DIR_ARCH:-"${WORKSPACE_DIR}/archlinux"}
ARCH_TREE=(packages community)
ARCH_TREE=(svntogit-{packages,community})
REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"}