summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2021-05-03 08:00:02 +0200
committerErich Eckner <git@eckner.net>2021-05-03 08:00:02 +0200
commit4ba911d4b8aaa7ee299674a6ef2d9409c01babf2 (patch)
tree05289bb033df7b291dfb0c3fee3a9befe9801394
downloadarch-eckner-net-status-backend-4ba911d4b8aaa7ee299674a6ef2d9409c01babf2.tar.xz
initial commit
-rwxr-xr-xpackage-status59
-rw-r--r--status.php62
-rwxr-xr-xupdate-packages35
3 files changed, 156 insertions, 0 deletions
diff --git a/package-status b/package-status
new file mode 100755
index 0000000..a506398
--- /dev/null
+++ b/package-status
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+for s in ${HOME}/.backend/archlinuxewe/*/.SRCINFO; do
+ pkgbase_infos=$(
+ sed -n '
+ /^pkgbase = /,/^\s*$/ {
+ /^\s\+\(epoch\|pkgver\|pkgrel\|arch\) = / p
+ }
+ ' "$s"
+ )
+ epoch=$(
+ printf '%s\n' "${pkgbase_infos}" \
+ | sed '
+ s/^\s\+epoch = \(\S\+\)$/\1:/
+ t
+ d
+ '
+ )
+ pkgver=$(
+ printf '%s\n' "${pkgbase_infos}" \
+ | sed '
+ s/^\s\+pkgver = //
+ t
+ d
+ '
+ )
+ pkgrel=$(
+ printf '%s\n' "${pkgbase_infos}" \
+ | sed '
+ s/^\s\+pkgrel = //
+ t
+ d
+ '
+ )
+ sed '
+ s/^pkgname = //
+ t
+ d
+ ' "$s" \
+ | while read -r pkgname; do
+ pkgname_archs=$(
+ sed -n '
+ /^pkgname = '"${pkgname}"'/,/^\s*$/ {
+ /^\s\+arch = / p
+ }
+ ' "$s"
+ )
+ if [ -z "${pkgname_archs}" ]; then
+ printf '%s\n' "${pkgbase_infos}"
+ else
+ printf '%s\n' "${pkgname_archs}"
+ fi \
+ | sed '
+ s/^\s\+arch = /'"${pkgname}"'-'"${epoch}${pkgver}"'-'"${pkgrel}"'-/
+ t
+ d
+ '
+ done
+done
diff --git a/status.php b/status.php
new file mode 100644
index 0000000..2b4e8a9
--- /dev/null
+++ b/status.php
@@ -0,0 +1,62 @@
+<?php
+
+function parse($name) {
+ $inhalt = explode("-",$name);
+ $arch = array_pop($inhalt);
+ $pkgrel = array_pop($inhalt);
+ $pkgver = array_pop($inhalt);
+ $pkgname = implode("-",$inhalt);
+ return array(
+ "filename" => $name,
+ "pkgname" => $pkgname,
+ "pkgver" => $pkgver,
+ "pkgrel" => $pkgrel,
+ "arch" => $arch
+ );
+};
+
+$f = fopen("packages", "r");
+while (!feof($f))
+ $soll[] = trim(fgets($f));
+fclose($f);
+
+$f = popen("find ~archlinuxewe/os -type f -name '*.pkg.tar.zst.sig' -printf '%f\n'", "r");
+while (!feof($f))
+ $ist[] = substr(trim(fgets($f)),0,-16);
+pclose($f);
+
+$ist = array_map('parse', $ist);
+$soll = array_map('parse', $soll);
+
+$pkgs = array();
+
+foreach($ist as $i) {
+ $pkgs[$i["pkgname"]][$i["arch"]]["ist"] = $i;
+}
+foreach($soll as $i) {
+ $pkgs[$i["pkgname"]][$i["arch"]]["soll"] = $i;
+}
+
+?>
+<!DOCTYPE html>
+<html><body><table>
+<?php
+
+foreach ($pkgs as $pkgname => $pkg) {
+ print "<tr><td colspan=3>" . $pkgname . "</td></tr>\n";
+ foreach ($pkg as $arch => $apkg) {
+ print "<tr><td>" . $arch . "</td><td>";
+ if ($apkg["ist"]["filename"] == $apkg["soll"]["filename"])
+ $farbe = "#008000";
+ else
+ $farbe = "#c00000";
+ print "<font color=\"" . $farbe . "\">";
+ print $apkg["ist"]["filename"];
+ print "</font></td><td><font color=\"" . $farbe . "\">";
+ print $apkg["soll"]["filename"];
+ print "</font></td></tr>\n";
+ }
+}
+
+?>
+</table></body></html>
diff --git a/update-packages b/update-packages
new file mode 100755
index 0000000..3df1022
--- /dev/null
+++ b/update-packages
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+if [ $# -eq 0 ]; then
+ [ -f "$0.lock" ] && kill -0 $(cat "$0.lock") && exit
+ echo $$ > "$0.lock"
+ GIT="git -C ${HOME}/.backend/archlinuxewe"
+ $GIT pull --rebase >/dev/null
+ $GIT submodule update >/dev/null
+ commit=$($GIT rev-parse HEAD)
+ if ! grep -qxF "${commit}" "$0.commit"; then
+ $GIT diff "$(cat "$0.commit")" "${commit}" --name-status \
+ | sed -n '
+ s/^[AM]\s\+//
+ T
+ s@/PKGBUILD$@@
+ p
+ ' \
+ | parallel -j50 "$0"
+ fi
+ "${0%/*}/package-status" > "${0%/*}/packages"
+ echo "$commit" > "$0.commit"
+ rm "$0.lock"
+ exit
+fi
+
+if [ $# -gt 1 ]; then
+ >&2 echo 'too many arguments'
+ exit 1
+fi
+
+cd "${HOME}/.backend/archlinuxewe/$1"
+if git archive HEAD -- .SRCINFO >/dev/null 2>&1; then
+ exit
+fi
+makepkg --printsrcinfo > .SRCINFO