0
This repository has been archived on 2025-04-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Minecraft-Overviewer/contrib/clearOldCache.py
2011-10-04 23:27:30 -04:00

98 lines
3.2 KiB
Python

#!/usr/bin/python
"""Deletes files from the old chunk-based cache"""
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 `overviewer.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
# incantation to be able to import overviewer_core
if not hasattr(sys, "frozen"):
sys.path.insert(0, os.path.abspath(os.path.join(os.path.split(__file__)[0], '..')))
from overviewer_core import world
from overviewer 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()