generalize code for repositories, add package dir cache

This commit is contained in:
gh2o 2014-09-27 18:07:30 -07:00
parent 804dbc6714
commit 654e88884c
1 changed files with 49 additions and 32 deletions

View File

@ -47,8 +47,11 @@ export LC_ALL=C
export LANG=C export LANG=C
unset LANGUAGE unset LANGUAGE
declare -a repositories
repositories=(core extra)
declare -A dependencies declare -A dependencies
dependencies[pacman]=x dependencies[pacman]=x
declare -A pkgdircache
log() { log() {
echo "[$(date)]" "$@" >&2 echo "[$(date)]" "$@" >&2
@ -140,45 +143,60 @@ install_haveged() {
fi fi
} }
initialize_coredb() {
log "Downloading package database ..."
wget "${archlinux_mirror}/core/os/${target_architecture}/core.db"
log "Unpacking package database ..."
mkdir core
tar -zxf core.db -C core
}
initialize_extradb() {
log "Downloading package database ..."
wget "${archlinux_mirror}/extra/os/${target_architecture}/extra.db"
log "Unpacking package database ..."
mkdir extra
tar -zxf extra.db -C extra
}
remove_version() { remove_version() {
echo "${1}" | grep -o '^[A-Za-z0-9_-]*' echo "${1}" | grep -o '^[A-Za-z0-9_-]*'
} }
get_package_directory() { initialize_databases() {
local dir pkg local repo dir pkg
for dir in core/${1}-* extra/${1}-*; do for repo in "${repositories[@]}"; do
if [ "$(get_package_value ${dir}/desc NAME)" = "${1}" ]; then log "Downloading package database '${repo}' ..."
echo "${dir}" wget "${archlinux_mirror}/${repo}/os/${target_architecture}/${repo}.db"
return log "Unpacking package database '${repo}' ..."
fi mkdir ${repo}
tar -zxf ${repo}.db -C ${repo}
done done
for dir in core/* extra/*; do }
while read pkg; do
pkg=$(remove_version "${pkg}") get_package_directory() {
if [ "${pkg}" = "${1}" ]; then
local req="${1}"
local repo dir pkg
dir="${pkgdircache[${req}]:-}"
if [ -n "${dir}" ]; then
echo "${dir}"
return
fi
for repo in "${repositories[@]}"; do
for dir in ${repo}/${req}-*; do
pkg="$(get_package_value ${dir}/desc NAME)"
pkgdircache[${pkg}]="${dir}"
if [ "${pkg}" = "${req}" ]; then
echo "${dir}" echo "${dir}"
return return
fi fi
done < <(get_package_array ${dir}/depends PROVIDES) done
done done
log "Package '${1}' not found."
return 1 for repo in "${repositories[@]}"; do
for dir in ${repo}/*; do
while read pkg; do
pkg=$(remove_version "${pkg}")
[ -z "${pkgdircache[${pkg}]:-}" ] &&
pkgdircache[${pkg}]="${dir}"
if [ "${pkg}" = "${req}" ]; then
echo "${dir}"
return
fi
done < <(get_package_array ${dir}/depends PROVIDES)
done
done
log "Package '${req}' not found."
false
} }
get_package_value() { get_package_value() {
@ -459,8 +477,7 @@ installer_main() {
clean_archroot clean_archroot
install_haveged install_haveged
initialize_coredb initialize_databases
initialize_extradb
calculate_dependencies calculate_dependencies
download_packages download_packages
extract_packages extract_packages