diff options
author | Remi Collet <remi@remirepo.net> | 2020-11-23 09:55:07 +0100 |
---|---|---|
committer | Remi Collet <remi@remirepo.net> | 2020-11-23 09:55:07 +0100 |
commit | 7ac16136fa7df1b87dd31332966409a28f860ad3 (patch) | |
tree | bd06baf30535ee959812917a0c8ce5b1f6d9264b /cleanoldrpm | |
parent | 58e38301ca736c1986048c71c961404ba4ba8712 (diff) |
switch from "dnf repomanage" to a home brew script
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"); + } + } +} |