diff options
Diffstat (limited to 'cleanoldrpm')
-rwxr-xr-x | cleanoldrpm | 64 |
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"); + } + } +} |