summaryrefslogtreecommitdiffstats
path: root/cleanoldrpm
diff options
context:
space:
mode:
Diffstat (limited to 'cleanoldrpm')
-rwxr-xr-xcleanoldrpm64
1 files changed, 64 insertions, 0 deletions
diff --git a/cleanoldrpm b/cleanoldrpm
new file mode 100755
index 0000000..d4e257f
--- /dev/null
+++ b/cleanoldrpm
@@ -0,0 +1,64 @@
+#!/usr/bin/php
+<?php
+
+if (!extension_loaded("rpminfo")) die("rpminfo extension is missing\n");
+
+$mode = 0;
+$keep = 0;
+$dest = false;
+$multi = [
+ 'php' => 3, // php/8.0
+ 'php-pecl-protobuf' => 1, // php-pecl-protobuf/3
+ 'njs' => 99, // njs/0.8.2
+ 'libnjs-devel' => 99, //
+ 'redis' => 3, // redis/6.2
+ 'redis-debuginfo' => 3, //
+ 'redis-debugsource' => 3, //
+ 'redis-devel' => 3, //
+ 'redis-doc' => 3, //
+ 'redis-trib' => 3, //
+ 'redis' => 3, // redis/6.2
+ 'composer' => 1, // composer/2
+ 'phan' => 1, // phan/3
+ 'roundcubemail' => 4, // roundcubemail/1.x.
+ 'remi-release' => 3, // remi-release/8.5
+];
+if (isset($_SERVER['argv'][1])) {
+ $keep = (int)$_SERVER['argv'][1];
+}
+if (!$keep) {
+ printf("\nusage %s number [ trash_path ]\n\n", $_SERVER['argv'][0]);
+ die("Number to keep is missing\n");
+}
+if (isset($_SERVER['argv'][2])) {
+ $dest = $_SERVER['argv'][2];
+ if (!is_dir($dest)) {
+ die("$dest is not a directory\n");
+ }
+}
+
+$rpms = [];
+foreach (glob("*.rpm") as $name) {
+ $info = rpminfo($name);
+ $i = $info['Name'];
+ if (isset($multi[$i])) {
+ $i .= "/" . substr($info['Version'], 0, $multi[$i]);
+ }
+ $ver = $info['Version'] . '-' . $info['Release'];
+ if (isset($info['Epoch'])) {
+ $ver = $info['Epoch'] . ':' . $ver;
+ }
+ $rpms[$i][$ver] = $name;
+}
+
+foreach($rpms as $n => $rpm) {
+ if (count($rpm) > $keep) {
+ uksort($rpm, "rpmvercmp");
+ $i = count($rpm) - $keep;
+ while ($i--) {
+ $name = array_shift($rpm);
+ echo "\t$name\n";
+ if ($dest) rename($name, "$dest/$name");
+ }
+ }
+}