summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2019-02-22 10:35:08 +0100
committerErich Eckner <git@eckner.net>2019-02-22 10:35:08 +0100
commitbc4b84d128177e7b640dfac901161e00c100e439 (patch)
tree8d0fa059770bd852f927aa7fca30af9ab2845fc0 /lib
parenta9b7ef03f1a574169f65303f37654223d980db41 (diff)
downloadarchweb32-bc4b84d128177e7b640dfac901161e00c100e439.tar.xz
lib/helper.php: available_upstream_packages() new
Diffstat (limited to 'lib')
-rw-r--r--lib/helper.php84
1 files changed, 84 insertions, 0 deletions
diff --git a/lib/helper.php b/lib/helper.php
index 73b97e8..59c9622 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -187,3 +187,87 @@ function add_fancy_unit($value, $unit) {
$exponent = max(0,min(count($suffixes)-1,round(log(abs($value))/log(1024)-1)));
return sprintf("%.2f %s%s", $value / pow(1024,$exponent), $suffixes[8 + $exponent], $unit);
}
+
+function parse_package_filename($filename, $repo = NULL) {
+ if (! preg_match(
+ '/^(\S+)-(([^-:]+):)?([^-:]+)-([^-]+)-([^-]+)\.pkg\.tar\.xz$/',
+ $filename,
+ $matches
+ ))
+ return;
+ $result = array(
+ 'pkgname' => $matches[1],
+ 'pkgver' => $matches[4],
+ 'pkgrel' => $matches[5],
+ 'arch' => $matches[6]
+ );
+ if (!empty($repo))
+ $result['repo'] = $repo;
+ if (empty($matches[3]))
+ $result['epoch'] = '0';
+ else
+ $result['epoch'] = $matches[3];
+
+ return $result;
+}
+
+function find_upstream_packages_in($repo) {
+ $parse_package_filename_in_repo = function($filename) use ($repo) {
+ return parse_package_filename($filename, $repo);
+ };
+ return
+ array_map(
+ $parse_package_filename_in_repo,
+ explode(
+ "\n",
+ shell_exec(
+ "tar -Oxzf /var/lib/pacman/sync/" . $repo . ".db" .
+ " | grep -xFA1 '%FILENAME%'" .
+ " | grep -vxF '%FILENAME%\n--'"
+ )
+ )
+ );
+}
+
+function available_upstream_packages($columns = NULL) {
+ $available_upstream_packages = apcu_fetch('available_upstream_packages', $apcu_success);
+ if ($apcu_success == false) {
+ $available_upstream_packages_repowise = array_map(
+ 'find_upstream_packages_in',
+ array(
+ 'core', 'extra', 'community'
+ )
+ );
+ $available_upstream_packages = array();
+ foreach ($available_upstream_packages_repowise as $sub_array)
+ $available_upstream_packages =
+ array_merge(
+ $available_upstream_packages,
+ $sub_array
+ );
+ apcu_store('available_upstream_packages', $available_upstream_packages, 1800);
+ }
+
+ if (!isset($columns))
+ return $available_upstream_packages;
+ if (!is_array($columns))
+ return array_column($available_upstream_packages, $columns);
+ $select_columns_of_interest = function($row) use ($columns) {
+ $select = function($column) use ($row) {
+ return $row[$column];
+ };
+ return
+ array_combine(
+ $columns,
+ array_map(
+ $select,
+ $columns
+ )
+ );
+ };
+ return
+ array_map(
+ $select_columns_of_interest,
+ $available_upstream_packages
+ );
+}