Kaydet (Commit) 997429a5 authored tarafından Jack Jansen's avatar Jack Jansen

The script was very sloppy about which variables held source pathnames

and which held destination pathnames. Fixed.
üst 1f74ed8c
...@@ -53,6 +53,7 @@ __license__ = "FreeBSD" ...@@ -53,6 +53,7 @@ __license__ = "FreeBSD"
import os, sys, glob, fnmatch, shutil, string, copy, getopt import os, sys, glob, fnmatch, shutil, string, copy, getopt
from os.path import basename, dirname, join, islink, isdir, isfile from os.path import basename, dirname, join, islink, isdir, isfile
Error = "buildpkg.Error"
PKG_INFO_FIELDS = """\ PKG_INFO_FIELDS = """\
Title Title
...@@ -159,6 +160,7 @@ class PackageMaker: ...@@ -159,6 +160,7 @@ class PackageMaker:
# variables set later # variables set later
self.packageRootFolder = None self.packageRootFolder = None
self.packageResourceFolder = None self.packageResourceFolder = None
self.sourceFolder = None
self.resourceFolder = None self.resourceFolder = None
...@@ -171,16 +173,25 @@ class PackageMaker: ...@@ -171,16 +173,25 @@ class PackageMaker:
""" """
# set folder attributes # set folder attributes
self.packageRootFolder = root self.sourceFolder = root
if resources == None: if resources == None:
self.packageResourceFolder = root self.resourceFolder = root
else:
self.resourceFolder = resources
# replace default option settings with user ones if provided # replace default option settings with user ones if provided
fields = self. packageInfoDefaults.keys() fields = self. packageInfoDefaults.keys()
for k, v in options.items(): for k, v in options.items():
if k in fields: if k in fields:
self.packageInfo[k] = v self.packageInfo[k] = v
elif not k in ["OutputDir"]:
raise Error, "Unknown package option: %s" % k
# Check where we should leave the output. Default is current directory
outputdir = options.get("OutputDir", os.getcwd())
packageName = self.packageInfo["Title"]
self.PackageRootFolder = os.path.join(outputdir, packageName + ".pkg")
# do what needs to be done # do what needs to be done
self._makeFolders() self._makeFolders()
self._addInfo() self._addInfo()
...@@ -197,16 +208,11 @@ class PackageMaker: ...@@ -197,16 +208,11 @@ class PackageMaker:
# packageName = "%s-%s" % (self.packageInfo["Title"], # packageName = "%s-%s" % (self.packageInfo["Title"],
# self.packageInfo["Version"]) # ?? # self.packageInfo["Version"]) # ??
packageName = self.packageInfo["Title"] contFolder = join(self.PackageRootFolder, "Contents")
rootFolder = packageName + ".pkg" self.packageResourceFolder = join(contFolder, "Resources")
contFolder = join(rootFolder, "Contents") os.mkdir(self.PackageRootFolder)
resourceFolder = join(contFolder, "Resources")
os.mkdir(rootFolder)
os.mkdir(contFolder) os.mkdir(contFolder)
os.mkdir(resourceFolder) os.mkdir(self.packageResourceFolder)
self.resourceFolder = resourceFolder
def _addInfo(self): def _addInfo(self):
"Write .info file containing installing options." "Write .info file containing installing options."
...@@ -217,8 +223,8 @@ class PackageMaker: ...@@ -217,8 +223,8 @@ class PackageMaker:
for f in string.split(PKG_INFO_FIELDS, "\n"): for f in string.split(PKG_INFO_FIELDS, "\n"):
info = info + "%s %%(%s)s\n" % (f, f) info = info + "%s %%(%s)s\n" % (f, f)
info = info % self.packageInfo info = info % self.packageInfo
base = basename(self.packageRootFolder) + ".info" base = self.packageInfo["Title"] + ".info"
path = join(self.resourceFolder, base) path = join(self.packageResourceFolder, base)
f = open(path, "w") f = open(path, "w")
f.write(info) f.write(info)
...@@ -229,9 +235,9 @@ class PackageMaker: ...@@ -229,9 +235,9 @@ class PackageMaker:
# Currently ignores if the 'mkbom' tool is not available. # Currently ignores if the 'mkbom' tool is not available.
try: try:
base = basename(self.packageRootFolder) + ".bom" base = self.packageInfo["Title"] + ".bom"
bomPath = join(self.resourceFolder, base) bomPath = join(self.packageResourceFolder, base)
cmd = "mkbom %s %s" % (self.packageRootFolder, bomPath) cmd = "mkbom %s %s" % (self.sourceFolder, bomPath)
res = os.system(cmd) res = os.system(cmd)
except: except:
pass pass
...@@ -244,23 +250,16 @@ class PackageMaker: ...@@ -244,23 +250,16 @@ class PackageMaker:
cwd = os.getcwd() cwd = os.getcwd()
packageRootFolder = self.packageRootFolder # create archive
os.chdir(self.sourceFolder)
try: base = basename(self.packageInfo["Title"]) + ".pax"
# create archive self.archPath = join(self.packageResourceFolder, base)
d = dirname(packageRootFolder) cmd = "pax -w -f %s %s" % (self.archPath, ".")
os.chdir(packageRootFolder) res = os.system(cmd)
base = basename(packageRootFolder) + ".pax"
archPath = join(d, self.resourceFolder, base) # compress archive
cmd = "pax -w -f %s %s" % (archPath, ".") cmd = "gzip %s" % self.archPath
res = os.system(cmd) res = os.system(cmd)
# compress archive
cmd = "gzip %s" % archPath
res = os.system(cmd)
except:
pass
os.chdir(cwd) os.chdir(cwd)
...@@ -271,20 +270,22 @@ class PackageMaker: ...@@ -271,20 +270,22 @@ class PackageMaker:
# filenames. So, it's left to Installer.app to deal with the # filenames. So, it's left to Installer.app to deal with the
# same file available in multiple formats... # same file available in multiple formats...
if not self.packageResourceFolder: if not self.resourceFolder:
return return
# find candidate resource files (txt html rtf rtfd/ or lproj/) # find candidate resource files (txt html rtf rtfd/ or lproj/)
allFiles = [] allFiles = []
for pat in string.split("*.txt *.html *.rtf *.rtfd *.lproj", " "): for pat in string.split("*.txt *.html *.rtf *.rtfd *.lproj", " "):
pattern = join(self.packageResourceFolder, pat) pattern = join(self.resourceFolder, pat)
allFiles = allFiles + glob.glob(pattern) allFiles = allFiles + glob.glob(pattern)
# find pre-process and post-process scripts # find pre-process and post-process scripts
# naming convention: packageName.{pre,post}-{upgrade,install} # naming convention: packageName.{pre,post}-{upgrade,install}
# Alternatively the filenames can be {pre,post}-{upgrade,install}
# in which case we prepend the package name
packageName = self.packageInfo["Title"] packageName = self.packageInfo["Title"]
for pat in ("*upgrade", "*install"): for pat in ("*upgrade", "*install"):
pattern = join(self.packageResourceFolder, packageName + pat) pattern = join(self.resourceFolder, packageName + pat)
allFiles = allFiles + glob.glob(pattern) allFiles = allFiles + glob.glob(pattern)
# check name patterns # check name patterns
...@@ -292,22 +293,24 @@ class PackageMaker: ...@@ -292,22 +293,24 @@ class PackageMaker:
for f in allFiles: for f in allFiles:
for s in ("Welcome", "License", "ReadMe"): for s in ("Welcome", "License", "ReadMe"):
if string.find(basename(f), s) == 0: if string.find(basename(f), s) == 0:
files.append(f) files.append((f, f))
if f[-6:] == ".lproj": if f[-6:] == ".lproj":
files.append(f) files.append((f, f))
elif f in ["pre-upgrade", "pre-install", "post-upgrade", "post-install"]:
files.append((f, self.packageInfo["Title"]+"."+f))
elif f[-8:] == "-upgrade": elif f[-8:] == "-upgrade":
files.append(f) files.append((f,f))
elif f[-8:] == "-install": elif f[-8:] == "-install":
files.append(f) files.append((f,f))
# copy files # copy files
for g in files: for src, dst in files:
f = join(self.packageResourceFolder, g) f = join(self.resourceFolder, src)
if isfile(f): if isfile(f):
shutil.copy(f, self.resourceFolder) shutil.copy(f, os.path.join(self.packageResourceFolder, dst))
elif isdir(f): elif isdir(f):
# special case for .rtfd and .lproj folders... # special case for .rtfd and .lproj folders...
d = join(self.resourceFolder, basename(f)) d = join(self.packageResourceFolder, dst)
os.mkdir(d) os.mkdir(d)
files = GlobDirectoryWalker(f) files = GlobDirectoryWalker(f)
for file in files: for file in files:
...@@ -326,23 +329,18 @@ class PackageMaker: ...@@ -326,23 +329,18 @@ class PackageMaker:
installedSize = 0 installedSize = 0
zippedSize = 0 zippedSize = 0
packageRootFolder = self.packageRootFolder files = GlobDirectoryWalker(self.sourceFolder)
files = GlobDirectoryWalker(packageRootFolder)
for f in files: for f in files:
numFiles = numFiles + 1 numFiles = numFiles + 1
installedSize = installedSize + os.stat(f)[6] installedSize = installedSize + os.lstat(f)[6]
d = dirname(packageRootFolder)
base = basename(packageRootFolder) + ".pax.gz"
archPath = join(d, self.resourceFolder, base)
try: try:
zippedSize = os.stat(archPath)[6] zippedSize = os.stat(self.archPath+ ".gz")[6]
except OSError: # ignore error except OSError: # ignore error
pass pass
base = basename(packageRootFolder) + ".sizes" base = self.packageInfo["Title"] + ".sizes"
f = open(join(self.resourceFolder, base), "w") f = open(join(self.packageResourceFolder, base), "w")
format = "NumFiles %d\nInstalledSize %d\nCompressedSize %d" format = "NumFiles %d\nInstalledSize %d\nCompressedSize %d\n"
f.write(format % (numFiles, installedSize, zippedSize)) f.write(format % (numFiles, installedSize, zippedSize))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment