mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
missing file
This commit is contained in:
parent
53231b162b
commit
e17787885e
21
direct/src/plugin/FileSpec.py
Executable file
21
direct/src/plugin/FileSpec.py
Executable file
@ -0,0 +1,21 @@
|
||||
from pandac.PandaModules import HashVal
|
||||
|
||||
class FileSpec:
|
||||
""" Used by make_package and make_contents. Represents a single
|
||||
file in the directory, and its associated timestamp, size, and md5
|
||||
hash. """
|
||||
|
||||
def __init__(self, filename, pathname):
|
||||
self.filename = filename
|
||||
self.pathname = pathname
|
||||
|
||||
self.size = pathname.getFileSize()
|
||||
self.timestamp = pathname.getTimestamp()
|
||||
|
||||
hv = HashVal()
|
||||
hv.hashFile(pathname)
|
||||
self.hash = hv.asHex()
|
||||
|
||||
def getParams(self):
|
||||
return 'filename="%s" size=%s timestamp=%s hash="%s"' % (
|
||||
self.filename, self.size, self.timestamp, self.hash)
|
108
direct/src/plugin/make_contents.py
Executable file
108
direct/src/plugin/make_contents.py
Executable file
@ -0,0 +1,108 @@
|
||||
#! /usr/bin/env python
|
||||
|
||||
"""
|
||||
This command will build the contents.xml file at the top of a Panda3D
|
||||
download hierarchy. This file lists all of the packages hosted here,
|
||||
along with their current versions.
|
||||
|
||||
This program runs on a local copy of the hosting directory hierarchy;
|
||||
it must be a complete copy to generate a complete contents.xml file.
|
||||
|
||||
make_contents.py [opts]
|
||||
|
||||
Options:
|
||||
|
||||
-d stage_dir
|
||||
|
||||
Specify the staging directory. This is a temporary directory on
|
||||
the local machine that contains a copy of the web server
|
||||
contents. The default is the current directory.
|
||||
|
||||
"""
|
||||
|
||||
import sys
|
||||
import getopt
|
||||
import os
|
||||
|
||||
import direct
|
||||
from pandac.PandaModules import *
|
||||
|
||||
from FileSpec import FileSpec
|
||||
|
||||
class ArgumentError(AttributeError):
|
||||
pass
|
||||
|
||||
class ContentsMaker:
|
||||
def __init__(self):
|
||||
self.stageDir = None
|
||||
|
||||
def build(self):
|
||||
if not self.stageDir:
|
||||
raise ArgumentError, "Stage directory not specified."
|
||||
|
||||
self.packages = []
|
||||
self.scanDirectory()
|
||||
|
||||
if not self.packages:
|
||||
raise ArgumentError, "No packages found."
|
||||
|
||||
# Now write the contents.xml file.
|
||||
contentsFileBasename = 'contents.xml'
|
||||
contentsFilePathname = Filename(self.stageDir, contentsFileBasename)
|
||||
|
||||
f = open(contentsFilePathname.toOsSpecific(), 'w')
|
||||
print >> f, '<?xml version="1.0" ?>'
|
||||
print >> f, ''
|
||||
for packageName, packageVersion, file in self.packages:
|
||||
print >> f, '<package name="%s" version="%s" %s />' % (
|
||||
packageName, packageVersion, file.getParams())
|
||||
f.close()
|
||||
|
||||
def scanDirectory(self):
|
||||
""" Walks through all the files in the stage directory and
|
||||
looks for the package directory xml files. """
|
||||
|
||||
startDir = self.stageDir.toOsSpecific()
|
||||
if startDir.endswith(os.sep):
|
||||
startDir = startDir[:-1]
|
||||
prefix = startDir + os.sep
|
||||
for dirpath, dirnames, filenames in os.walk(startDir):
|
||||
if dirpath == startDir:
|
||||
localpath = ''
|
||||
xml = ''
|
||||
else:
|
||||
assert dirpath.startswith(prefix)
|
||||
localpath = dirpath[len(prefix):].replace(os.sep, '/') + '/'
|
||||
xml = dirpath[len(prefix):].replace(os.sep, '_') + '.xml'
|
||||
|
||||
if xml.count('_') == 1 and xml in filenames:
|
||||
basename = xml.split('.')[0]
|
||||
packageName, packageVersion = basename.split('_')
|
||||
file = FileSpec(localpath + xml,
|
||||
Filename(self.stageDir, localpath + xml))
|
||||
print file.filename
|
||||
self.packages.append((packageName, packageVersion, file))
|
||||
|
||||
|
||||
def makeContents(args):
|
||||
opts, args = getopt.getopt(args, 'd:h')
|
||||
|
||||
cm = ContentsMaker()
|
||||
cm.stageDir = Filename('.')
|
||||
for option, value in opts:
|
||||
if option == '-d':
|
||||
cm.stageDir = Filename.fromOsSpecific(value)
|
||||
|
||||
elif option == '-h':
|
||||
print __doc__
|
||||
sys.exit(1)
|
||||
|
||||
cm.build()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
makeContents(sys.argv[1:])
|
||||
except ArgumentError, e:
|
||||
print e.args[0]
|
||||
sys.exit(1)
|
Loading…
x
Reference in New Issue
Block a user