summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2019-03-07 13:41:05 +0100
committerErich Eckner <git@eckner.net>2019-03-07 13:41:05 +0100
commit1a21a2040105b8f07bcbe85530e95588b2ca6709 (patch)
treef23e6a86449451dc517638c31e1c670a3e2fedf3 /bin
parent9d89c00d7d345cc42b6aae814315a7a3e5f0b607 (diff)
downloadbuilder-1a21a2040105b8f07bcbe85530e95588b2ca6709.tar.xz
bin/put-upstream-packages-into-db new
Diffstat (limited to 'bin')
-rwxr-xr-xbin/put-upstream-packages-into-db64
1 files changed, 64 insertions, 0 deletions
diff --git a/bin/put-upstream-packages-into-db b/bin/put-upstream-packages-into-db
new file mode 100755
index 0000000..0989b8c
--- /dev/null
+++ b/bin/put-upstream-packages-into-db
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# shellcheck source=../lib/load-configuration
+. "${0%/*}/../lib/load-configuration"
+
+upstream_packages=$(mktemp "${work_dir}/tmp.put-upstream-packages-into-db.XXXXXXXXXX")
+trap 'rm "${upstream_packages}"' EXIT
+
+# shellcheck disable=SC2016
+{
+ printf 'SELECT `upstream_repositories`.`name`'
+ printf ' FROM `upstream_repositories`'
+} | \
+ mysql_run_query | \
+ while read -r repo; do
+ tar -Oxzf "/var/lib/pacman/sync/${repo}.db" | \
+ sed -n '
+ /^%FILENAME%$/ {
+ N
+ s/.*\n//
+ s/\.pkg\.tar\.xz$//
+ s/-\(\([^-:]\+\):\)\?\([^-:]\+\)-\([^-]\+\)-\([^-]\+\)$/\t\2\t\3\t\4\t\5/
+ s/\s\s/\t0\t/
+ s/^/'"${repo}"'\t/
+ p
+ }
+ '
+ done > \
+ "${upstream_packages}"
+
+# shellcheck disable=SC2016
+{
+ printf 'CREATE TEMPORARY TABLE `up`('
+ printf '`id` bigint(20) NOT NULL AUTO_INCREMENT,'
+ printf '`pkgname` VARCHAR(64) NOT NULL,'
+ printf '`epoch` MEDIUMINT(9) NOT NULL,'
+ printf '`pkgver` VARCHAR(64) COLLATE utf8mb4_unicode_ci NOT NULL,'
+ printf '`pkgrel` MEDIUMINT(9) NOT NULL,'
+ printf '`architecture` VARCHAR(6) COLLATE utf8mb4_unicode_ci NOT NULL,'
+ printf '`repository` VARCHAR(32) NOT NULL,'
+ printf 'PRIMARY KEY (`id`),'
+ printf 'UNIQUE KEY `content` (`pkgname`,`epoch`,`pkgver`,`pkgrel`),'
+ printf 'UNIQUE KEY `location` (`pkgname`,`repository`),'
+ printf 'KEY `repository` (`repository`)'
+ printf ');\n'
+ printf 'LOAD DATA LOCAL INFILE "%s" INTO TABLE `up`(`repository`,`pkgname`,`epoch`,`pkgver`,`pkgrel`,`architecture`);\n' \
+ "${upstream_packages}"
+ printf 'DELETE `upstream_packages`'
+ printf ' FROM `upstream_packages`;\n'
+ printf 'INSERT IGNORE INTO `upstream_packages`(`id`,`pkgname`,`epoch`,`pkgver`,`pkgrel`,`architecture`,`repository`)'
+ printf ' SELECT '
+ printf '`up`.`%s`,' \
+ 'id' \
+ 'pkgname' \
+ 'epoch' \
+ 'pkgver' \
+ 'pkgrel' \
+ 'architecture'
+ printf '`upstream_repositories`.`id`'
+ printf ' FROM `up`'
+ printf ' JOIN `upstream_repositories`'
+ printf ' ON `upstream_repositories`.`name`=`up`.`repository`;\n'
+} | \
+ mysql_run_query