index : builder | |
Archlinux32 build system | gitolite user |
summaryrefslogtreecommitdiff |
author | Erich Eckner <git@eckner.net> | 2019-03-07 13:41:05 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2019-03-07 13:41:05 +0100 |
commit | 1a21a2040105b8f07bcbe85530e95588b2ca6709 (patch) | |
tree | f23e6a86449451dc517638c31e1c670a3e2fedf3 /bin | |
parent | 9d89c00d7d345cc42b6aae814315a7a3e5f0b607 (diff) |
-rwxr-xr-x | bin/put-upstream-packages-into-db | 64 |
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 |