summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xapkcontent2sqlite.sh139
-rwxr-xr-xapkindex2sqlite.sh136
2 files changed, 160 insertions, 115 deletions
diff --git a/apkcontent2sqlite.sh b/apkcontent2sqlite.sh
index f7a381c..21d4284 100755
--- a/apkcontent2sqlite.sh
+++ b/apkcontent2sqlite.sh
@@ -1,48 +1,99 @@
#!/bin/sh
-base="/var/www/localhost/htdocs/alpine"
-#release=$(readlink $base/latest-stable)
-release="edge"
+packages="repository"
+filelist="filelist"
repos="main testing"
archs="x86 x86_64 armhf"
-output="output.csv"
-database="filelist.db"
-
-create_filelist() {
- local apk="$1" repo="$2" arch="$3"
- local filelist=$(tar --exclude ".*" -ztf "$apk")
- local filename="${apk##*/}"
- local pkgname="${filename%-*-*}"
- IFS=$'\n'
- for item in $filelist; do
- file="${item##*/}"
- path="${item%/*}"
- case "$file" in
- *,*) file="\"$file\"" ;;
- esac
- case "$path" in
- *,*) path="\"$path\"" ;;
- esac
- [ ! -z "$file" ] && \
- echo "$file,$path,$pkgname,$repo,$arch" >> $output
- done
- unset IFS
-}
-
-
-rm -f $output $database
-
-printf "CREATE TABLE filelist(file text, path text, pkgname text, repo text, arch text);" | sqlite3 $database
-
-for repo in $repos; do
- for arch in $archs; do
- printf "Starting: $repo/$arch"
- for apk in $base/$release/$repo/$arch/*.apk; do
- printf .
- create_filelist "$apk" "$repo" "$arch"
- done
- printf "\n"
- done
-done
-
-printf ".mode csv\n.import $output filelist" | sqlite3 $database
+db="db/filelist.db"
+csv="csv/filelist.csv"
+turbo_db="/var/www/aports-turbo/db/apkindex.db"
+
+rm_stale_filelist() {
+ for repo in $repos; do
+ for arch in $archs; do
+ for list in $filelist/$repo/$arch/*.csv; do
+ local file="${list##*/}"
+ local apk="${file%.*}"
+ if [ ! -e "$packages/$repo/$arch/$apk" ]; then
+ rm -f "$list"
+ result=1
+ fi
+ done
+ done
+ done
+}
+
+update_filelist() {
+ for repo in $repos; do
+ for arch in $archs; do
+ mkdir -p "$filelist/$repo/$arch"
+ for apk in $packages/$repo/$arch/*.apk; do
+ local file="${apk##*/}"
+ if [ ! -e "$filelist/$repo/$arch/${file}.csv" ]; then
+ create_apk_csv "$apk" "$repo" "$arch" >> \
+ "$filelist/$repo/$arch/${file}.csv"
+ result=1
+ fi
+ done
+ done
+ done
+}
+
+apk_sync() {
+ for repo in $repos; do
+ rsync -a --delete-before $rsync/$repo $packages || return 1
+ done
+}
+
+create_apk_csv() {
+ local apk="$1" repo="$2" arch="$3"
+ local list=$(tar --exclude ".*" -ztf "$apk")
+ local filename="${apk##*/}"
+ local pkgname="${filename%-*-*}"
+ IFS=$'\n'
+ for line in $list; do
+ local file="${line##*/}"
+ local path="${line%/*}"
+ case "$file" in
+ *,*) file="\"$file\"" ;;
+ esac
+ case "$path" in
+ *,*) path="\"$path\"" ;;
+ esac
+ [ ! -z "$file" ] && \
+ echo "$file,$path,$pkgname,$repo,$arch"
+ done
+ unset IFS
+}
+
+cat_csv() {
+ rm -f $csv
+ for repo in $repos; do
+ for arch in $archs; do
+ cat $filelist/$repo/$arch/*.csv >> $csv
+ done
+ done
+}
+
+prepare() {
+ rm -f $db $csv
+ mkdir -p ${csv%/*} ${db%/*}
+}
+
+create_db() {
+ printf "CREATE TABLE filelist(file text, path text, pkgname text, repo text, arch text);" | sqlite3 $db
+ printf ".mode csv\n.import $csv filelist" | sqlite3 $db
+ printf "CREATE INDEX file on filelist (file);" | sqlite3 $db
+ printf "CREATE INDEX arch on filelist (arch);" | sqlite3 $db
+ printf "CREATE INDEX pkgname on filelist (pkgname);" | sqlite3 $db
+}
+
+mv_db() {
+ mv $db $turbo_db
+}
+
+# just do it
+prepare && apk_sync && update_filelist && rm_stale_filelist
+# only update db when we have changes
+[ ! -z "$result" ] && cat_csv && create_db && mv_db
+
diff --git a/apkindex2sqlite.sh b/apkindex2sqlite.sh
index d2c96f4..64e3919 100755
--- a/apkindex2sqlite.sh
+++ b/apkindex2sqlite.sh
@@ -1,89 +1,83 @@
#!/bin/sh
-apkindex="APKINDEX"
-csvfile="output.csv"
-database="apkindex.db"
-
-rm -f $csvfile $database
+packages="repository"
+repos="main testing"
+archs="x86 x86_64 armhf"
+db="db/apkindex.db"
+csv="csv/apkindex.csv"
+turbo_db="/var/www/aports-turbo/db/apkindex.db"
read_line() {
local type=${1%%:*}
local var=${1#*:}
case "$type" in
- P) #name
- name="$var"
- ;;
- V) #version
- version="$var"
- ;;
- T) #description
- desc="\"$var\""
- ;;
- U) #url
- url="\"$var\""
- ;;
- L) #license
- lic="$var"
- ;;
- A) #arch
- arch="$var"
- ;;
- D) #depends
- deps="$var"
- ;;
- C) #csum
- csum="$var"
- ;;
- S) #size
- size="$var"
- ;;
- I) #installed_size
- install_size="$var"
- ;;
- p) #provides
- provides="$var"
- ;;
- i) #install_if
- install_if="$var"
- ;;
- o) #origin
- origin="$var"
- ;;
- m) #maintainer
- maintainer="$var"
- ;;
- t) #build_time
- build_time="$var"
- ;;
- c) #commit
- commit="$var"
- ;;
- F|M|R|Z|r|q|a|s|f) #installed db entries
- return 1
- ;;
- esac
+ P) name="$var" ;;
+ V) version="$var" ;;
+ T) desc="\"$var\"" ;;
+ U) url="\"$var\"" ;;
+ L) lic="$var" ;;
+ A) parch="$var" ;;
+ D) deps="$var" ;;
+ C) csum="$var" ;;
+ S) size="$var" ;;
+ I) install_size="$var" ;;
+ p) provides="$var" ;;
+ i) install_if="$var" ;;
+ o) origin="$var" ;;
+ m) maintainer="$var" ;;
+ t) build_time="$var" ;;
+ c) commit="$var" ;;
+ esac
}
reset_vars() {
- name= version= desc= url= lic= arch= deps= csum= size= install_size=
+ name= version= desc= url= lic= parch= deps= csum= size= install_size=
provides= install_if= origin= maintainer= build_time= commit=
}
write_line() {
- echo "$name,$version,$desc,$url,$lic,$arch,$deps,$csum,$size,$install_size,$provides,$install_if,$origin,$maintainer,$build_time,$commit" >> \
- $csvfile
+ echo "$name,$version,$desc,$url,$lic,$parch,$deps,$csum,$size,$install_size,$provides,$install_if,$origin,$maintainer,$build_time,$commit,$repo"
+}
+
+init_db() {
+ rm -f $db
+ printf "CREATE TABLE apkindex('name' text, 'version' text, 'desc' text,
+ 'url' text, 'lic' text, 'arch' text, 'deps' text, 'csum' text,
+ 'size' text, 'install_size' text, 'provides' text, 'install_if' text,
+ 'origin' text, 'maintainer' text, 'build_time' integer, 'commit' text,
+ 'repo' text);" | sqlite3 $db
+}
+
+write_db() {
+ printf ".mode csv\n.import $csv apkindex" | sqlite3 $db
+ printf "CREATE INDEX name on apkindex (name);" | sqlite3 $db
+ printf "CREATE INDEX arch on apkindex (arch);" | sqlite3 $db
+ printf "CREATE INDEX provides on apkindex (provides);" | sqlite3 $db
+ printf "CREATE INDEX deps on apkindex (deps);" | sqlite3 $db
+}
+
+prepare() {
+ rm -f $db $csv
+ mkdir -p ${csv%/*} ${db%/*}
}
-printf "CREATE TABLE apkindex('name' text, 'version' text, 'desc' text,
- 'url' text, 'lic' text, 'arch' text, 'deps' text, 'csum' text,
- 'size' text, 'install_size' text, 'provides' text, 'install_if' text,
- 'origin' text, 'maintainer' text, 'build_time' integer, 'commit' text);" | sqlite3 $database
+rm -f $csv
-IFS=$'\n'
-while read line; do
- [ "$line" = "" ] && write_line && reset_vars
- read_line "$line"
-done<$apkindex
-unset IFS
+for repo in $repos; do
+ for arch in $archs; do
+ rm -f /tmp/APKINDEX
+ #curl -s "$aports/$repo/$arch/APKINDEX.tar.gz" | tar -zx -C /tmp APKINDEX
+ tar -C /tmp -zxf $packages/$repo/$arch/APKINDEX.tar.gz APKINDEX
+ IFS=$'\n'
+ while read line; do
+ if [ "$line" = "" ]; then
+ write_line >> $csv
+ reset_vars
+ fi
+ read_line "$line"
+ done</tmp/APKINDEX
+ unset IFS
+ done
+done
-printf ".mode csv\n.import $csvfile apkindex" | sqlite3 $database
+prepare && init_db && write_db