summaryrefslogtreecommitdiffstats
path: root/cleanoldrpm
diff options
context:
space:
mode:
Diffstat (limited to 'cleanoldrpm')
-rwxr-xr-xcleanoldrpm50
1 files changed, 50 insertions, 0 deletions
diff --git a/cleanoldrpm b/cleanoldrpm
new file mode 100755
index 0000000..17d659c
--- /dev/null
+++ b/cleanoldrpm
@@ -0,0 +1,50 @@
+#!/usr/bin/php
+<?php
+
+if (!extension_loaded("rpminfo")) die("rpminfo extension is missing\n");
+
+define('MODE_PREVIEW', 1);
+define('MODE_DELETE', 2);
+$mode = 0;
+$keep = 0;
+$dest = false;
+$multi = [
+ 'php' => 3,
+ 'redis' => 1,
+ 'composer' => 1,
+];
+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]);
+ }
+ $rpms[$i][$info['Version']] = $name;
+}
+
+foreach($rpms as $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");
+ }
+ }
+}