| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #! /usr/bin/env python
- usageText = """
- This script generates the patches required to support incremental
- download of Panda3D packages. It can be run as a post-process on a
- directory hierarchy created by ppackage; it will examine the directory
- hierarchy, and create any patches that appear to be missing.
- You may run ppackage on the same directory hierarchy as many times as
- you like, without creating patches. You may then download and test
- the resulting files--users connecting to the tree without fresh
- patches will be forced to download the entire file, instead of making
- an incremental download, but the entire process will work otherwise.
- When you are satisfied that all of the files are ready to be released,
- you may run ppackage on the directory hierarchy to generate the
- required patches.
- Generating the patches just before final release is a good idea to
- limit the number of trivially small patches that are created. Each
- time this script is run, a patch is created from the previous version,
- and these patches daisy-chain together to define a complete update
- sequence. If you run this script on internal releases, you will
- generate a long chain of small patches that your users must download;
- this is pointless if there is no possibility of anyone having
- downloaded one of the intervening versions.
- You can also generate patches with the -p option to ppackage, but that
- only generates patches for the specific packages built by that
- invocation of ppackage. If you use the ppatcher script instead, it
- will generate patches for all packages (or the set of packages that
- you name specifically).
- This script is actually a wrapper around Panda's PatchMaker.py.
- Usage:
- %(prog)s [opts] [packageName1 .. packageNameN]
- Parameters:
- packageName1 .. packageNameN
- Specify the names of the package(s) you wish to generate patches
- for. This allows you to build patches for only a subset of the
- packages found in the tree. If you omit these parameters, patches
- are built for all packages that require them.
- Options:
- -i install_dir
- The full path to the install directory. This should be the same
- directory named by the -i parameter to ppackage.
- -h
- Display this help
- """
- import sys
- import getopt
- import os
- from direct.p3d.PatchMaker import PatchMaker
- from panda3d.core import Filename
- def usage(code, msg = ''):
- sys.stderr.write(usageText % {'prog' : os.path.split(sys.argv[0])[1]})
- sys.stderr.write(msg + '\n')
- sys.exit(code)
- try:
- opts, args = getopt.getopt(sys.argv[1:], 'i:h')
- except getopt.error as msg:
- usage(1, msg)
- installDir = None
- for opt, arg in opts:
- if opt == '-i':
- installDir = Filename.fromOsSpecific(arg)
- elif opt == '-h':
- usage(0)
- else:
- print('illegal option: ' + arg)
- sys.exit(1)
- packageNames = args
- if not installDir:
- installDir = Filename('install')
- if not packageNames:
- # "None" means all packages.
- packageNames = None
- pm = PatchMaker(installDir)
- pm.buildPatches(packageNames = packageNames)
- # An explicit call to exit() is required to exit the program, when
- # this module is packaged in a p3d file.
- sys.exit(0)
|