added contrib script to clean out old caches
This commit is contained in:
94
contrib/clearOldCache.py
Normal file
94
contrib/clearOldCache.py
Normal file
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
usage = "python contrib/%prog [OPTIONS] <World # / Name / Path to World>"
|
||||
|
||||
description = """
|
||||
This script will delete files from the old chunk-based cache, a lot
|
||||
like the old `gmap.py -d World/` command. You should only use this if
|
||||
you're updating from an older version of Overviewer, and you want to
|
||||
clean up your world folder.
|
||||
"""
|
||||
|
||||
from optparse import OptionParser
|
||||
import sys
|
||||
import re
|
||||
import os.path
|
||||
|
||||
# sys.path wrangling, so we can access Overviewer code
|
||||
overviewer_dir = os.path.split(os.path.split(os.path.abspath(__file__))[0])[0]
|
||||
sys.path.insert(0, overviewer_dir)
|
||||
|
||||
import world
|
||||
from gmap import list_worlds
|
||||
|
||||
def main():
|
||||
parser = OptionParser(usage=usage, description=description)
|
||||
parser.add_option("-d", "--dry-run", dest="dry", action="store_true",
|
||||
help="Don't actually delete anything. Best used with -v.")
|
||||
parser.add_option("-k", "--keep-dirs", dest="keep", action="store_true",
|
||||
help="Keep the world directories intact, even if they are empty.")
|
||||
parser.add_option("-v", "--verbose", dest="verbose", action="store_true",
|
||||
help="Log each and every file that is deleted.")
|
||||
|
||||
opt, args = parser.parse_args()
|
||||
|
||||
if not len(args) == 1:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
worlddir = args[0]
|
||||
|
||||
if not os.path.exists(worlddir):
|
||||
# world given is either world number, or name
|
||||
worlds = world.get_worlds()
|
||||
|
||||
# if there are no worlds found at all, exit now
|
||||
if not worlds:
|
||||
parser.print_help()
|
||||
print "\nInvalid world path"
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
worldnum = int(worlddir)
|
||||
worlddir = worlds[worldnum]['path']
|
||||
except ValueError:
|
||||
# it wasn't a number or path, try using it as a name
|
||||
try:
|
||||
worlddir = worlds[worlddir]['path']
|
||||
except KeyError:
|
||||
# it's not a number, name, or path
|
||||
parser.print_help()
|
||||
print "Invalid world name or path"
|
||||
sys.exit(1)
|
||||
except KeyError:
|
||||
# it was an invalid number
|
||||
parser.print_help()
|
||||
print "Invalid world number"
|
||||
sys.exit(1)
|
||||
|
||||
files_deleted = 0
|
||||
dirs_deleted = 0
|
||||
|
||||
imgre = re.compile(r'img\.[^.]+\.[^.]+\.nocave\.\w+\.png$')
|
||||
for dirpath, dirnames, filenames in os.walk(worlddir, topdown=False):
|
||||
for f in filenames:
|
||||
if imgre.match(f):
|
||||
filepath = os.path.join(dirpath, f)
|
||||
if opt.verbose:
|
||||
print "Deleting %s" % (filepath,)
|
||||
if not opt.dry:
|
||||
os.unlink(filepath)
|
||||
files_deleted += 1
|
||||
|
||||
if not opt.keep:
|
||||
if len(os.listdir(dirpath)) == 0:
|
||||
if opt.verbose:
|
||||
print "Deleting %s" % (dirpath,)
|
||||
if not opt.dry:
|
||||
os.rmdir(dirpath)
|
||||
dirs_deleted += 1
|
||||
|
||||
print "%i files and %i directories deleted." % (files_deleted, dirs_deleted)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user