-#!/usr/bin/env python
+#!/usr/bin/env python3
"""
-# OpenWRT download directory cleanup utility.
+# OpenWrt download directory cleanup utility.
# Delete all but the very last version of the program tarballs.
#
-# Copyright (c) 2010 Michael Buesch <mb@bu3sch.de>
+# Copyright (C) 2010-2015 Michael Buesch <m@bues.ch>
+# Copyright (C) 2013-2015 OpenWrt.org
"""
+from __future__ import print_function
+
import sys
import os
import re
progname = match.group(1)
try:
patchlevel = match.group(5)
- except (IndexError), e:
+ except IndexError as e:
patchlevel = None
if patchlevel:
patchlevel = ord(patchlevel[0])
progname = match.group(1)
try:
patchlevel = match.group(4)
- except (IndexError), e:
+ except IndexError as e:
patchlevel = None
if patchlevel:
patchlevel = ord(patchlevel[0])
extensions = (
".tar.gz",
".tar.bz2",
+ ".tar.xz",
".orig.tar.gz",
".orig.tar.bz2",
+ ".orig.tar.xz",
".zip",
".tgz",
".tbz",
+ ".txz",
)
versionRegex = (
- (re.compile(r"(.+)[-_]([0-9a-fA-F]{40,40})"), parseVer_GIT), # xxx-GIT_SHASUM
(re.compile(r"(.+)[-_](\d+)\.(\d+)\.(\d+)\.(\d+)"), parseVer_1234), # xxx-1.2.3.4
(re.compile(r"(.+)[-_](\d\d\d\d)-?(\d\d)-?(\d\d)"), parseVer_ymd), # xxx-YYYY-MM-DD
+ (re.compile(r"(.+)[-_]([0-9a-fA-F]{40,40})"), parseVer_GIT), # xxx-GIT_SHASUM
(re.compile(r"(.+)[-_](\d+)\.(\d+)\.(\d+)(\w?)"), parseVer_123), # xxx-1.2.3a
(re.compile(r"(.+)[-_](\d+)_(\d+)_(\d+)"), parseVer_123), # xxx-1_2_3
(re.compile(r"(.+)[-_](\d+)\.(\d+)(\w?)"), parseVer_12), # xxx-1.2a
)
blacklist = [
- ("linux", re.compile(r"linux-.*")),
+ ("linux", re.compile(r"linux-\d.*")),
("gcc", re.compile(r"gcc-.*")),
("wl_apsta", re.compile(r"wl_apsta.*")),
(".fw", re.compile(r".*\.fw")),
self.fileext = ext
break
else:
- print self.filename, "has an unknown file-extension"
+ print(self.filename, "has an unknown file-extension")
raise EntryParseError("ext")
for (regex, parseVersion) in versionRegex:
match = regex.match(filename)
match, directory + "/" + filename + self.fileext)
break
else:
- print self.filename, "has an unknown version pattern"
+ print(self.filename, "has an unknown version pattern")
raise EntryParseError("ver")
+ def getPath(self):
+ return (self.directory + "/" + self.filename).replace("//", "/")
+
def deleteFile(self):
- path = (self.directory + "/" + self.filename).replace("//", "/")
- print "Deleting", path
+ path = self.getPath()
+ print("Deleting", path)
if not opt_dryrun:
os.unlink(path)
- def __eq__(self, y):
- return self.filename == y.filename
-
def __ge__(self, y):
return self.version >= y.version
def usage():
- print "OpenWRT download directory cleanup utility"
- print "Usage: " + sys.argv[0] + " [OPTIONS] <path/to/dl>"
- print ""
- print " -d|--dry-run Do a dry-run. Don't delete any files"
- print " -B|--show-blacklist Show the blacklist and exit"
- print " -w|--whitelist ITEM Remove ITEM from blacklist"
+ print("OpenWrt download directory cleanup utility")
+ print("Usage: " + sys.argv[0] + " [OPTIONS] <path/to/dl>")
+ print("")
+ print(" -d|--dry-run Do a dry-run. Don't delete any files")
+ print(" -B|--show-blacklist Show the blacklist and exit")
+ print(" -w|--whitelist ITEM Remove ITEM from blacklist")
def main(argv):
global opt_dryrun
if len(args) != 1:
usage()
return 1
- except getopt.GetoptError:
+ except getopt.GetoptError as e:
usage()
return 1
directory = args[0]
del blacklist[i]
break
else:
- print "Whitelist error: Item", v,\
- "is not in blacklist"
+ print("Whitelist error: Item", v,\
+ "is not in blacklist")
return 1
if o in ("-B", "--show-blacklist"):
for (name, regex) in blacklist:
- print name
+ sep = "\t\t"
+ if len(name) >= 8:
+ sep = "\t"
+ print("%s%s(%s)" % (name, sep, regex.pattern))
return 0
# Create a directory listing and parse the file names.
for (name, regex) in blacklist:
if regex.match(filename):
if opt_dryrun:
- print filename, "is blacklisted"
+ print(filename, "is blacklisted")
break
else:
try:
entries.append(Entry(directory, filename))
- except (EntryParseError), e: pass
+ except EntryParseError as e:
+ pass
# Create a map of programs
progmap = {}
lastVersion = version
if lastVersion:
for version in versions:
- if version != lastVersion:
+ if version is not lastVersion:
version.deleteFile()
if opt_dryrun:
- print "Keeping", lastVersion.filename
+ print("Keeping", lastVersion.getPath())
return 0