summaryrefslogtreecommitdiff
path: root/src/xisync.sh
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2022-02-16 16:58:36 +0000
committerdavidovski <david@davidovski.xyz>2022-02-16 16:58:36 +0000
commit1117f2bef50ec65aa6bfe55e8e22beb5be092275 (patch)
treeaca60d8297c9a99e551664df931ed36ef4f49164 /src/xisync.sh
parent5e31b33fbe30f7b1775b89fc23abd6c96675cf99 (diff)
added dependency resolving
Diffstat (limited to 'src/xisync.sh')
-rwxr-xr-xsrc/xisync.sh166
1 files changed, 0 insertions, 166 deletions
diff --git a/src/xisync.sh b/src/xisync.sh
deleted file mode 100755
index 5349dd2..0000000
--- a/src/xisync.sh
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/bin/bash
-
-export CONF_FILE="/etc/xipkg.conf"
-
-CURL_OPTS="-SsL"
-
-REPOS=($(parseconf -v repos))
-SOURCES=($(parseconf sources.*))
-PACKAGES_DIR=$(parseconf -v dir.packages)
-DEP_GRAPH=$(parseconf -v dir.deps)
-
-TMP_DIR="/tmp/xi"
-
-get_deps() {
- local name=$1
- [ -f $DEP_GRAPH ] && sed -rn "s/^$name: (.*)/\1/p" $DEP_GRAPH || echo
-}
-
-download_file() {
- curl ${CURL_OPTS} -o $1 -w "%{http_code}" $2 2> /dev/null
-}
-
-wait_for_jobs () {
- local total=$(jobs -r | wc -l)
- local completed=0
- while [ "$completed" != "$total" ]; do
- completed=$(( $total - $(jobs -r | wc -l)))
- hbar -T "$1" $completed $total
- done
- hbar -t -T "$2" $completed $total
- wait
-}
-
-# save each listed package in a relevant directory, based on checksum
-#
-parse_line() {
- local repo=$1
- local repo_url=$2
- local package=$3
- local checksum=$4
- local size=$5
- local files=$6
-
- local package_name=$(basename -s ".xipkg" $package)
-
- local package_dir="$PACKAGES_DIR/$repo/$package_name.versions"
- local checksum_file=$package_dir/$checksum
-
- [ -d $package_dir ] || mkdir -p $package_dir
- printf "$repo_url/$package $checksum $size $files\n" >> $checksum_file
-}
-
-list_source () {
- local repo=$1
- local src=$2
-
- local url=$(echo $src | cut -d":" -f2-)
- local name=$(echo $src | cut -d":" -f1)
- local repo_url="${url}${repo}"
- local full_url="${repo_url}/packages.list"
- local tmp_file="$TMP_DIR/$name.$repo"
-
- local status=$(download_file $tmp_file $full_url)
-
- if [ "$status" = "200" ]; then
- while IFS= read -r line; do
- parse_line $repo $repo_url $line
- done < "$tmp_file"
- fi
-}
-
-dep_graph () {
- local src=$1
- local url=$(echo $src | cut -d":" -f2-)
- local name=$(echo $src | cut -d":" -f1)
- local full_url="${url}deps.graph"
- local tmp_file="$TMP_DIR/$name.deps"
- [ -f $tmp_file ] && rm $tmp_file; touch $tmp_file
-
- if [ "$(download_file $tmp_file $full_url)" = "200" ]; then
- while IFS= read -r line; do
- local package=$(echo $line | cut -d: -f1)
- local new=$(echo $line | cut -d: -f2-)
- echo $new >> $DEP_GRAPH/$package
- done < "$tmp_file"
- fi
-}
-
-
-contest () {
- local package_dir=$1
-
- local popular=$(wc -l $package_dir/* | sort -n | head -1 | awk '{ print $2 }' )
-
- local info_file=$(sed "s/.versions//g" <<< "$package_dir")
- mv $popular $info_file
- rm -r $package_dir
-}
-
-popularity_contest () {
- local list=$(ls -1 -d $PACKAGES_DIR/*/*)
- local total=$(echo $list | wc -l)
-
- for package_dir in $list; do
- contest $package_dir &
- done
-
- wait_for_jobs "contesting packages..." "contested packages"
-}
-
-index_deps () {
- local l=$1
- local total=${#SOURCES[*]}
- local completed=0
-
- for src in ${SOURCES[*]}; do
- dep_graph $src
- completed=$((completed+1))
- hbar -l $l -T "indexing dependencies..." $completed $total
- done
- hbar -l $l -T "indexed dependencies" $completed $total
-}
-
-index_repo () {
- local repo=$1 l=$2
- local total=${#SOURCES[*]}
- local completed=0
-
- for src in ${SOURCES[*]}; do
- list_source $repo $src
- completed=$((completed+1))
- hbar -l $l -T "syncing $repo..." $completed $total
- done
- hbar -l $l -T "synced $repo" $completed $total
-}
-
-
-sync () {
- # prepare the file structure for the sync
- mkdir -pv $TMP_DIR
- rm -r $PACKAGES_DIR/*
- rm -r $DEP_GRAPH
- mkdir $DEP_GRAPH
-
- # create padding spaces for each hbar
- 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
- index_repo $repo $i &
- i=$((i+1))
- done
-
- # wait for all jobs to complete
- wait
-
- # determine which version of which package should be regarded
- hbar
- popularity_contest
-}
-
-sync