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