From bc4b84d128177e7b640dfac901161e00c100e439 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Fri, 22 Feb 2019 10:35:08 +0100 Subject: lib/helper.php: available_upstream_packages() new --- lib/helper.php | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) (limited to 'lib/helper.php') 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 + ); +} -- cgit v1.2.3