mirror of
https://github.com/freedoom/freedoom.git
synced 2025-09-02 07:25:45 -04:00
106 lines
3 KiB
Python
Executable file
106 lines
3 KiB
Python
Executable file
#!/usr/bin/env python
|
|
#
|
|
# perform sanity check on assignments lists; make sure everything in
|
|
# the deutex tree is listed in the assignment lists
|
|
#
|
|
# Copyright (c) 2001-2015
|
|
# Contributors to the Freedoom project. All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are
|
|
# met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
# * Neither the name of the freedoom project nor the names of its
|
|
# contributors may be used to endorse or promote products derived from
|
|
# this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
|
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
|
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
import glob
|
|
import re
|
|
import sys
|
|
|
|
# Find the file matching the given lump name:
|
|
|
|
def find_file(dirname, lumpname):
|
|
|
|
if dirname == "musics":
|
|
lumpname = "d_" + lumpname
|
|
|
|
files = glob.glob("%s/%s*" % (dirname, lumpname))
|
|
|
|
if len(files) > 0:
|
|
return files[0]
|
|
else:
|
|
return None
|
|
|
|
# Perform sanity check on the given directory:
|
|
|
|
def sanity_check(dirname, filename):
|
|
|
|
print "Checking %s" % dirname
|
|
|
|
f = file(filename)
|
|
|
|
for line in f:
|
|
|
|
# Strip newline
|
|
|
|
line = line[0:len(line)-1]
|
|
|
|
# Ignore comments and empty lines
|
|
|
|
if line == " " * len(line) or line[0] == "#":
|
|
continue
|
|
|
|
match = re.match(r'(\w+)', line)
|
|
|
|
resource = match.group(1)
|
|
|
|
# Find the file for this lump, if it exists
|
|
|
|
filename = find_file(dirname, resource)
|
|
|
|
# Is this resource supposed to be present? Check this
|
|
# matches what is present.
|
|
|
|
if re.search(r"(done|in dev)", line):
|
|
if filename is None:
|
|
print "%s: files not found for %s" % \
|
|
(dirname, resource)
|
|
else:
|
|
if filename is None:
|
|
print "%s: files found for %s" % \
|
|
(dirname, resource)
|
|
|
|
f.close()
|
|
|
|
status_dir = "status"
|
|
|
|
sections = {
|
|
"sprites" : "sprites_list",
|
|
"patches" : "patches_list",
|
|
"flats" : "flats_list",
|
|
"graphics" : "graphics_list",
|
|
"sounds" : "sounds_list",
|
|
"musics" : "musics_list",
|
|
}
|
|
|
|
for section in sections.keys():
|
|
sanity_check(section, "%s/%s" % (status_dir, sections[section]))
|
|
|