summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2022-02-20 00:40:00 +0000
committerdavidovski <david@davidovski.xyz>2022-02-20 00:40:00 +0000
commit65940c0cc719311fbac5e11c81cce34563ea3f21 (patch)
tree96a3aae8d7ef396720e41a64091b8c333ab28f18
parent290a33eacff1ed98d0e571cc1d5550cac3d9f276 (diff)
all works with posix shell
-rwxr-xr-xsrc/get.sh97
-rw-r--r--src/install.sh34
-rwxr-xr-xsrc/profile.sh6
-rwxr-xr-xsrc/sync.sh22
-rw-r--r--src/util.sh46
-rwxr-xr-xsrc/xi.sh2
6 files changed, 112 insertions, 95 deletions
diff --git a/src/get.sh b/src/get.sh
index 3da2591..edda26e 100755
--- a/src/get.sh
+++ b/src/get.sh
@@ -15,24 +15,25 @@ list_deps() {
# list all dependencies and sub dependencies of a package
#
resolve_deps () {
- local deps=()
- local to_check=($@)
+ local deps=""
if ${RESOLVE_DEPS}; then
- while [ "${#to_check[@]}" != "0" ]; do
- local package=${to_check[-1]}
- unset to_check[-1]
+ while [ "$#" != "0" ]; do
+
+ # pop a value from the args
+ local package=$1
+ shift
#only add if not already added
- echo ${deps[*]} | grep -q "\b$dep\b" || deps+=($package)
+ echo ${deps} | grep -q "\b$package\b" || deps="$deps $package"
for dep in $(list_deps $package); do
# if not already checked
- if echo ${deps[@]} | grep -qv "\b$dep\b"; then
- to_check+=($dep)
+ if echo ${deps} | grep -qv "\b$dep\b"; then
+ set -- $@ $dep
fi
done
done
- echo ${deps[@]}
+ echo ${deps}
else
echo $@
fi
@@ -61,16 +62,18 @@ package_exists () {
download_packages () {
local total_download=$1; shift
- local packages=($@)
- local outputs=()
+ local packages=$@
+ local outputs=""
local out_dir="${PACKAGE_CACHE}"
mkdir -p "$out_dir"
- for package in ${packages[*]}; do
- local info=($(get_package_download_info $package))
- local url=${info[0]}
- local checksum=${info[1]}
+ for package in $packages; do
+ local info=$(get_package_download_info $package)
+ set -- $info
+
+ local url=$1
+ local checksum=$2
local output="${out_dir}/${checksum}.${package}.xipkg"
local output_info="${output}.info"
@@ -84,16 +87,16 @@ download_packages () {
curl ${CURL_OPTS} -o "$output" "$url" &
fi
- outputs+=($output)
+ outputs="$outputs $output"
done
- wait_for_download $total_download ${outputs[*]}
+ wait_for_download $total_download ${outputs}
-
local i=0
- for pkg_file in ${outputs[*]}; do
+ set -- $outputs
+ for pkg_file in ${outputs}; do
- ${QUIET} || hbar -T "${LARGE_CIRCLE} validating downloads..." $i ${#outputs[*]}
+ ${QUIET} || hbar -T "${LARGE_CIRCLE} validating downloads..." $i $#
info_file="${pkg_file}.info"
if ! validate_sig $pkg_file $info_file; then
@@ -103,86 +106,86 @@ download_packages () {
i=$((i+1))
fi
done
- ${QUIET} || hbar -t ${HBAR_COMPLETE} -T "${CHECKMARK} validated downloads" $i ${#outputs[*]}
+ ${QUIET} || hbar -t ${HBAR_COMPLETE} -T "${CHECKMARK} validated downloads" $i $#
- install ${outputs[*]}
+ install $@
}
fetch () {
- local requested=($@)
+ local requested=$@
- local missing=()
- local already=()
- local install=()
- local update=()
- local urls=()
+ local missing=""
+ local already=""
+ local install=""
+ local update=""
+ local urls=""
local total_download=0
for package in $(resolve_deps $@); do
if package_exists $package; then
- info=($(get_package_download_info $package))
- url=${info[0]}
- checksum=${info[1]}
- size=${info[2]}
- files=${info[3]}
+ set -- $(get_package_download_info $package)
+ url=$1
+ checksum=$2
+ size=$3
+ files=$4
if is_installed $package; then
if [ "$(get_installed_version $package)" != "$checksum" ]; then
- update+=($package)
+ update="$update $package"
total_download=$((total_download+size))
else
- already+=($package)
+ already="$already $package"
fi
else
- install+=($package)
+ install="$install $package"
total_download=$((total_download+size))
fi
else
- missing+=($package)
+ missing="$missing $package"
fi
done
if ! ${QUIET}; then
- if [ "${#missing[@]}" != "0" ]; then
+ if [ "${#missing}" != "0" ]; then
printf "${LIGHT_RED}The following packages could not be located:"
- for package in ${missing[*]}; do
+ for package in ${missing}; do
printf "${RED} $package"
done
printf "${RESET}\n"
fi
- if [ "${#update[@]}" != "0" ]; then
+ if [ "${#update}" != "0" ]; then
printf "${LIGHT_GREEN}The following packages will be updated:\n\t"
- for package in ${update[*]}; do
+ for package in ${update}; do
printf "${GREEN} $package"
done
printf "${RESET}\n"
fi
- if [ "${#install[@]}" != "0" ]; then
+ if [ "${#install}" != "0" ]; then
printf "${LIGHT_BLUE}The following packages will be installed:\n\t"
- for package in ${install[*]}; do
+ for package in ${install}; do
printf "${BLUE} $package"
done
printf "${RESET}\n"
fi
- if [ "${#already[@]}" != "0" ]; then
+ if [ "${#already}" != "0" ]; then
printf "${LIGHT_WHITE}The following packages are already up to date:\n\t"
- for package in ${already[*]}; do
+ for package in ${already}; do
printf "${WHITE} $package"
done
printf "${RESET}\n"
fi
fi
- [ "${#install[@]}" = "0" ] && [ "${#update[@]}" = 0 ] && printf "${LIGHT_RED}Nothing to do!\n" && return 0
+ [ "${#install}" = "0" ] && [ "${#update}" = 0 ] && printf "${LIGHT_RED}Nothing to do!\n" && return 0
${QUIET} || [ "${SYSROOT}" = "/" ] || printf "${WHITE}To install to ${LIGHT_WHITE}${SYSROOT}${RESET}\n"
${QUIET} || printf "${WHITE}Total download size:${LIGHT_WHITE} $(format_bytes $total_download)\n"
if prompt_question "${WHITE}Continue?"; then
- download_packages $total_download ${install[*]} ${update[*]}
+ download_packages $total_download ${install} ${update}
else
${QUIET} || printf "${RED}Action canceled by user\n"
fi
diff --git a/src/install.sh b/src/install.sh
index 3111f34..63120be 100644
--- a/src/install.sh
+++ b/src/install.sh
@@ -22,14 +22,14 @@ install_package () {
}
get_package_filecount() {
- local info=($(get_package_download_info $1))
- echo ${info[3]}
+ set -- $(get_package_download_info $1)
+ echo $4
}
total_filecount() {
- local packages=($@)
+ local packages=$@
local count=0
- for package in ${packages[*]}; do
+ for package in $packages; do
local name=$(basename -s .xipkg $package | cut -d. -f2)
local c=$(get_package_filecount $name)
count=$((count+c))
@@ -38,25 +38,29 @@ total_filecount() {
}
install () {
- local packages=($@)
+ local packages=$@
- local missing=()
- for package in ${packages[*]}; do
- [ ! -f $package ] && missing+=($(basename $package))
+ local missing=""
+ for package in $packages; do
+ [ ! -f $package ] && missing="$missing $(basename $package)"
done
- if [ "${#missing[@]}" != "0" ]; then
+ if [ "${#missing}" != "0" ]; then
# warning: potential recursion loop here
- fetch ${missing[*]}
+ fetch $missing
else
- local total=$(total_filecount ${packages[*]})
- local files_files=()
- for package in ${packages[*]}; do
+ local total=$(total_filecount $packages)
+ local files_files=""
+ for package in $packages; do
local name=$(basename -s .xipkg $package | cut -d. -f2)
install_package $package $name &
- files_files+=("${INSTALLED_DIR}/$name/files")
+
+ mkdir -p "${INSTALLED_DIR}/$name/"
+ filelist="${INSTALLED_DIR}/$name/files"
+ touch $filelist
+ files_files="$files_files $filelist"
done
- wait_for_extract $total ${files_files[*]}
+ wait_for_extract $total ${files_files}
fi
}
diff --git a/src/profile.sh b/src/profile.sh
index feec6cf..915f1c9 100755
--- a/src/profile.sh
+++ b/src/profile.sh
@@ -3,15 +3,15 @@
. /usr/lib/colors.sh &&
export HBAR_COMPLETE="-c ${GREEN}${BG_DEFAULT}"
-. /usr/lib/glyphs.sh
+#. /usr/lib/glyphs.sh
export CONF_FILE="/etc/xipkg.conf"
export CURL_OPTS="-SsL"
export DEP_DIR=$(parseconf -v dir.deps)
-export REPOS=($(parseconf -v repos))
-export SOURCES=($(parseconf sources.*))
+export REPOS="$(parseconf -v repos)"
+export SOURCES="$(parseconf sources.*)"
export PACKAGES_DIR=$(parseconf -v dir.packages)
export INSTALLED_DIR=${SYSROOT}$(parseconf -v dir.installed)
diff --git a/src/sync.sh b/src/sync.sh
index af8e9dd..c0dd36c 100755
--- a/src/sync.sh
+++ b/src/sync.sh
@@ -62,7 +62,7 @@ contest () {
local popular=$(wc -l $package_dir/* | sort -n | head -1 | awk '{ print $2 }' )
- local info_file=$(sed "s/.versions//g" <<< "$package_dir")
+ local info_file=${package_dir%.versions}
mv $popular $info_file
rm -r $package_dir
}
@@ -71,19 +71,22 @@ popularity_contest () {
local list=$(ls -1 -d $PACKAGES_DIR/*/*)
local total=$(echo $list | wc -l)
+ local completed=0
for package_dir in $list; do
contest $package_dir &
+ completed=$((completed+1))
+ hbar -T "${LARGE_CIRCLE} contesting packages..." $completed $total
done
-
- wait_for_jobs "${LARGE_CIRCLE} contesting packages..." "${CHECKMARK} contested packages"
+ hbar -t ${HBAR_COMPLETE} -T "${CHECKMARK} contested packages" $completed $completed
}
index_deps () {
local l=$1
- local total=${#SOURCES[*]}
+ set -- ${SOURCES}
+ local total=$#
local completed=0
- for src in ${SOURCES[*]}; do
+ for src in ${SOURCES}; do
dep_graph $src
completed=$((completed+1))
${QUIET} || hbar -l $l -T "${LARGE_CIRCLE} indexing dependencies..." $completed $total
@@ -93,10 +96,11 @@ index_deps () {
index_repo () {
local repo=$1 l=$2
- local total=${#SOURCES[*]}
+ set -- ${SOURCES}
+ local total=$#
local completed=0
- for src in ${SOURCES[*]}; do
+ for src in ${SOURCES}; do
list_source $repo $src
completed=$((completed+1))
${QUIET} || hbar -l $l -T "${LARGE_CIRCLE} syncing $repo..." $completed $total
@@ -114,14 +118,14 @@ sync () {
mkdir $DEP_DIR
# create padding spaces for each hbar
- ${QUIET} || for repo in ${REPOS[*]}; do
+ ${QUIET} || for repo in ${REPOS}; do
hbar
done
# download package lists and dep graphs at the same time
index_deps 0 &
local i=1
- for repo in ${REPOS[*]}; do
+ for repo in ${REPOS}; do
mkdir -p ${PACKAGES_DIR}/$repo
index_repo $repo $i &
i=$((i+1))
diff --git a/src/util.sh b/src/util.sh
index d20db86..82d26ca 100644
--- a/src/util.sh
+++ b/src/util.sh
@@ -4,31 +4,39 @@ download_file() {
curl ${CURL_OPTS} -o $1 -w "%{http_code}" $2 2> /dev/null
}
+# this function is broken
wait_for_jobs () {
+ local text=$1
+ local end=$2
+ shift 2
+ joblist="-e $(echo $@ | sed "s/ / -e /g")"
+
+ echo "$joblist"
+
if ! $QUIET; then
- local total=$(jobs -r | wc -l)
+ local total=$#
local completed=0
while [ "$completed" != "$total" ]; do
- completed=$(( $total - $(jobs -r | wc -l)))
- hbar -T "$1" $completed $total
+ running=$(ps aux | grep $joblist | wc -l)
+
+ completed=$(( $total - $running + 1))
+ hbar -T "$text" $completed $total
done
- hbar -t ${HBAR_COMPLETE} -T "$2" $completed $total
+ hbar -t ${HBAR_COMPLETE} -T "$end" $completed $total
fi
wait
}
wait_for_download () {
- if ! $QUIET && [ "$(jobs -r | wc -l)" != "0" ]; then
+ if ! $QUIET; then
local total_download=$1
shift
- local files=($@)
- unset downloaded
- while [ "$(jobs -r | wc -l)" != "0" ]; do
- local downloaded=0
+ local downloaded=0
+ while [ "$downloaded" -lt "$total_download" ]; do
- for output in ${files[*]}; do
+ for output in $@; do
size=$(stat -c %s $output)
downloaded=$((downloaded+size))
done
@@ -42,18 +50,19 @@ wait_for_download () {
}
wait_for_extract () {
- if ! $QUIET && [ "$(jobs -r | wc -l)" != "0" ]; then
+ if ! $QUIET; then
local total_filecount=$1
+ local extracted=0
shift
- local files=($@)
- unset extracted
- while [ "$(jobs -r | wc -l)" != "0" ]; do
+ while [ "$extracted" -lt "$total_filecount" ]; do
local extracted=0
- for output in ${files[*]}; do
- size=$(cat $output | wc -l)
- extracted=$((extracted+size))
+ for output in $@; do
+ if [ -f $output ]; then
+ size=$(cat $output | wc -l)
+ extracted=$((extracted+size))
+ fi
done
hbar -T " extracting files" $extracted $total_filecount
@@ -64,7 +73,6 @@ wait_for_extract () {
wait
}
-
format_bytes () {
echo $@ | numfmt --to iec
@@ -74,5 +82,5 @@ prompt_question () {
$NOCONFIRM && return 0
printf "$1 [Y/n] "
read response
- [ "${response:0}" != "n" ]
+ [ "${var%${var#?}}"x != 'nx' ]
}
diff --git a/src/xi.sh b/src/xi.sh
index 63828f9..ea4f399 100755
--- a/src/xi.sh
+++ b/src/xi.sh
@@ -53,8 +53,6 @@ shift $((OPTIND-1))
if [ "$#" = "0" ]; then
echo "xilinux running xipkg (palceholder text)"
else
-
-
case "$1" in
"sync")
sync