1
from distutils.util import convert_path
2
from distutils import log
3
from distutils.errors import DistutilsOptionError
7
from setuptools.extern import six
9
from setuptools import Command
12
class rotate(Command):
13
"""Delete older distributions"""
15
description = "delete older distributions, keeping N newest files"
17
('match=', 'm', "patterns to match (required)"),
18
('dist-dir=', 'd', "directory where the distributions are"),
19
('keep=', 'k', "number of matching distributions to keep"),
24
def initialize_options(self):
29
def finalize_options(self):
30
if self.match is None:
31
raise DistutilsOptionError(
32
"Must specify one or more (comma-separated) match patterns "
33
"(e.g. '.zip' or '.egg')"
36
raise DistutilsOptionError("Must specify number of files to keep")
38
self.keep = int(self.keep)
40
raise DistutilsOptionError("--keep must be an integer")
41
if isinstance(self.match, six.string_types):
43
convert_path(p.strip()) for p in self.match.split(',')
45
self.set_undefined_options('bdist', ('dist_dir', 'dist_dir'))
48
self.run_command("egg_info")
51
for pattern in self.match:
52
pattern = self.distribution.get_name() + '*' + pattern
53
files = glob(os.path.join(self.dist_dir, pattern))
54
files = [(os.path.getmtime(f), f) for f in files]
58
log.info("%d file(s) matching %s", len(files), pattern)
59
files = files[self.keep:]
61
log.info("Deleting %s", f)