mozpack 包

子包

子模块

mozpack.archive 模块

class mozpack.archive.HackedType

基类:bytes

class mozpack.archive.TarInfo(name='')

基类:TarInfo

chksum

头部校验和。

devmajor

设备主编号。

devminor

设备次编号。

gid

最初存储此成员的用户组 ID。

gname

组名。

linkname

目标文件名,仅存在于类型为 LNKTYPE 和 SYMTYPE 的 TarInfo 对象中。

mode

权限位。

mtime

上次修改时间。

name

归档成员的名称。

offset

tar 头部从此处开始。

offset_data

文件数据从此处开始。

pax_headers

包含关联的 pax 扩展头部的键值对的字典。

size

大小(以字节为单位)。

sparse

稀疏成员信息。

tarfile
type

REGTYPE、AREGTYPE、LNKTYPE、SYMTYPE、DIRTYPE、FIFOTYPE、CONTTYPE、CHRTYPE、BLKTYPE、GNUTYPE_SPARSE。

类型:

文件类型。type 通常是以下常量之一

uid

最初存储此成员的用户 ID。

uname

用户名。

mozpack.archive.create_tar_bz2_from_files(fp, files, compresslevel=9)

从文件中确定性地创建 tar.bz2 文件。

这是 create_tar_from_files 的一个增强包装器,增加了 bzip2 压缩。

此函数类似于 create_tar_gzip_from_files()

mozpack.archive.create_tar_from_files(fp, files)

确定性地创建 tar 文件。

接收一个字典,将归档文件中的文件名映射到本地文件系统路径或 mozpack.files.BaseFile 实例。

这些文件将被归档并写入传递的文件句柄(已打开以供写入)。

只能写入常规文件。

将来接受文件名参数(或创建用于写入文件的 API)

mozpack.archive.create_tar_gz_from_files(fp, files, filename=None, compresslevel=9)

从文件中确定性地创建 tar.gz 文件。

这是 create_tar_from_files 的一个增强包装器,增加了 gzip 压缩。

传递的文件句柄应以二进制模式打开以供写入。当函数返回时,所有数据都已写入句柄。

mozpack.copier 模块

class mozpack.copier.FileCopier

基类:FileRegistry

具有将注册文件复制到单独目录的功能的 FileRegistry。

copy(destination, skip_if_older=True, remove_unaccounted=True, remove_all_directory_symlinks=True, remove_empty_directories=True)

将所有注册文件复制到给定的目标路径。给定的目标可以是现有目录,也可以根本不存在。它不能是例如文件。复制过程有点像 rsync:当文件不需要复制时,不会复制(有关文件.copy 的详细信息,请参阅 mozpack.files)。

默认情况下,目标目录中未注册的文件将被删除,空目录也将被删除。此外,目标目录中的所有目录符号链接也将被删除:这是一种保守的方法,以确保我们永远不会意外地将文件写入非目标目录。在最坏的情况下,对象目录中可能存在一个指向源目录的目录符号链接。

要禁用未注册文件的删除,请传递 remove_unaccounted=False。要禁用空目录的删除,请传递 remove_empty_directories=False。在极少数情况下,您可能希望在目标目录中保留目录符号链接(至少是不需要成为常规目录的那些):传递 remove_all_directory_symlinks=False。使用此标志时请谨慎操作:您几乎肯定不希望保留目录符号链接。

返回一个 FileCopyResult,其中详细说明了更改内容。

class mozpack.copier.FileCopyResult

Bases: object

表示 FileCopier.copy 操作的结果。

property existing_files_count
property removed_directories_count
property removed_files_count
property updated_files_count
class mozpack.copier.FileRegistry

Bases: object

通用容器,用于跟踪一组 BaseFile 实例。它保留添加文件的顺序,但不会跟踪空目录(根本不存储目录)。与 BaseFile 实例关联的路径相对于未指定的(虚拟)根目录。

registry = FileRegistry() registry.add(‘foo/bar’, file_instance)

add(path, content)

在给定路径下将 BaseFile 实例添加到容器中。

contains(pattern)

返回容器是否包含与给定模式匹配的路径。有关处理的模式说明,请参阅 mozpack.path.match 文档。

input_to_outputs_tree()

返回一个字典,将每个输入路径映射到受影响的输出路径集。

所有路径都已规范化。

match(pattern)

返回存储在容器中、与给定模式匹配的路径列表。有关处理的模式说明,请参阅 mozpack.path.match 文档。

output_to_inputs_tree()

返回一个字典,将每个输出路径映射到其所需的输入路径集。

所有路径都已规范化。

paths()

返回存储在容器中的所有路径,按添加顺序排列。

remove(pattern)

从容器中删除与给定模式匹配的路径。有关处理的模式说明,请参阅 mozpack.path.match 文档。

required_directories()

返回容器中路径所需的目录集,没有特定顺序。返回的目录相对于未指定的(虚拟)根目录(并且不包括该根目录)。

class mozpack.copier.FileRegistrySubtree(base, registry)

Bases: object

一个代理类,用于访问现有 FileRegistry 的子树。

注意,这没有实现整个 FileRegistry 接口。

add(path, content)
contains(pattern)
match(pattern)
paths()
remove(pattern)
class mozpack.copier.Jarrer(compress=True)

Bases: FileRegistry, BaseFile

具有将注册文件复制并打包为 jar 文件功能的 FileRegistry。也充当 BaseFile 实例,以便与 FileCopier 一起复制。

add(path, content, compress=None)

在给定路径下将 BaseFile 实例添加到容器中。

copy(dest, skip_if_older=True)

将所有注册文件打包到给定的目标 jar 中。给定的目标 jar 可以是 jar 文件的路径,也可以是 jar 文件的 Dest 实例。如果目标 jar 文件存在,则在适当情况下使用其(压缩的)内容而不是注册的 BaseFile 实例。

open()

返回一个类文件对象,允许读取关联文件的内容。这旨在在子类中被重载,以返回自定义类文件对象。

preload(paths)

将给定的路径集添加到预加载文件的列表中。有关 jar 预加载的详细信息,请参阅 mozpack.mozjar.JarWriter 文档。

mozpack.dmg 模块

mozpack.dmg.chmod(dir)

正确设置 DMG 内容的权限

创建一个指向 /Applications 的符号链接。符号链接名称是一个空格,因此我们不必对其进行本地化。Finder 中将显示应用程序文件夹图标,这对用户来说应该足够清晰。

mozpack.dmg.create_dmg(source_directory: Path, output_dmg: Path, volume_name: str, extra_files: List[tuple], dmg_tool: Path, hfs_tool: Path, mkfshfs_tool: Path, attribution_sentinel: str = None)

从 source_directory 创建一个位于 output_dmg 路径的 DMG 磁盘映像。

使用 volume_name 作为磁盘映像卷名,并使用 extra_files 作为元组列表(文件名,相对路径)以复制到磁盘映像中。

mozpack.dmg.create_dmg_from_staged(stagedir: Path, output_dmg: Path, tmpdir: Path, volume_name: str, hfs_tool: Path = None, dmg_tool: Path = None, mkfshfs_tool: Path = None, attribution_sentinel: str = None)

给定一个准备好的目录 stagedir,在 output_dmg 中生成一个 DMG。

mozpack.dmg.extract_dmg(dmgfile: Path, output: Path, dmg_tool: Path = None, hfs_tool: Path = None, dsstore: Path = None, icon: Path = None, background: Path = None)
mozpack.dmg.extract_dmg_contents(dmgfile: Path, destdir: Path, dmg_tool: Path = None, hfs_tool: Path = None)
mozpack.dmg.generate_hfs_file(stagedir: Path, tmpdir: Path, volume_name: str, mkfshfs_tool: Path)

在交叉编译时,我们会创建一个填充了零的 hfs 文件,然后将其转换为 DMG。为此,我们会测试暂存目录的大小,并在其基础上添加一些轻微的填充。

mozpack.dmg.rsync(source: Path, dest: Path)

将源目录 source 的内容 rsync 到目标目录 dest。

mozpack.dmg.set_folder_icon(dir: Path, tmpdir: Path, hfs_tool: Path = None)

设置 dir 的 HFS 属性以使用自定义图标。

mozpack.errors 模块

exception mozpack.errors.AccumulatedErrors

基类:Exception

由 errors.accumulate() 引发的异常类型。

class mozpack.errors.ErrorCollector

Bases: object

错误处理/日志记录类。为了方便起见,提供了一个全局实例 errors。

可以通过调用以下函数来记录警告、错误和致命错误:

  • errors.warn(message)

  • errors.error(message)

  • errors.fatal(message)

警告仅将消息发送到日志输出,而错误和致命错误会发送消息并抛出 ErrorMessage 异常。但是,异常可能会被延迟。请参见下文。

可以通过调用以下函数忽略错误:
  • errors.ignore_errors()

调用该函数后,只有致命错误会抛出异常。

在提供上下文时,警告、错误或致命错误消息可能会用上下文信息进行增强。上下文由一个 (filename, linenumber) 对定义,可以通过 errors.context() 设置,用作

上下文管理器

with errors.context(filename, linenumber):
    errors.warn(message)

支持任意嵌套,包括 errors.context 调用

with errors.context(filename1, linenumber1):
    errors.warn(message)
    with errors.context(filename2, linenumber2):
        errors.warn(message)

以及函数调用

def func():
    errors.warn(message)
    with errors.context(filename, linenumber):
        func()

错误和致命错误可以在稍后抛出其异常,允许在抛出之前报告多个不同的错误。这是通过将 errors.accumulate() 用作上下文管理器来实现的

with errors.accumulate():
    if test1:
        errors.error(message1)
    if test2:
        errors.error(message2)

在这种情况下,会抛出一个 AccumulatedErrors 异常,但它不包含有关异常的信息。日志消息会包含。

ERROR = 2
FATAL = 3
WARN = 1
accumulate()
context(file, line)
property count
error(msg)
fatal(msg)
get_context()
ignore_errors(ignore=True)
out = <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>
warn(msg)
exception mozpack.errors.ErrorMessage

基类:Exception

由 errors.error() 和 errors.fatal() 引发的异常类型。

mozpack.executables 模块

mozpack.executables.elfhack(path)

在给定路径上执行 elfhack 命令。

mozpack.executables.get_type(path_or_fileobj)

检查给定文件的签名,并返回匹配的可执行文件类型。

mozpack.executables.is_executable(path)

返回给定文件路径是否指向可执行文件或库文件,其中可执行文件或库文件由以下方式标识: - 在 OS/2 和 WINNT 上的文件扩展名 - 在 OS/X 和 ELF 系统(GNU/Linux、Android、BSD、Solaris)上的文件签名

由于此函数旨在用于在 FileFinder 中的 ExecutableFile 和 File 类之间进行选择,并且仅在 OS/2、OS/X、ELF 和 WINNT(在 GCC 构建系统中)系统上选择 ExecutableFile 才有意义,因此我们不费心检测其他类型的可执行文件。

mozpack.executables.may_elfhack(path)

返回是否应该调用 elfhack()。

mozpack.executables.may_strip(path)

返回是否应该调用 strip()。

mozpack.executables.strip(path)

使用 STRIP_FLAGS 在给定路径上执行 STRIP 命令。

mozpack.files 模块

class mozpack.files.AbsoluteSymlinkFile(path)

基类:File

通过符号链接复制(如果可用)的文件类。

此类仅在目标路径为绝对路径时有效。

copy(dest, skip_if_older=True)

将 BaseFile 内容复制到作为字符串或 Dest 实例给定的目标位置。如果 BaseFile 内容与目标内容匹配,或者在普通文件的情况下,如果目标比原始文件更新,则避免替换现有文件。当 skip_if_older 为 False 时,将禁用后一种行为。返回是否实际执行了复制(True)还是没有(False)。

class mozpack.files.BaseFile

Bases: object

文件复制的基本接口和辅助函数。派生类可以实现自己的 copy 函数,或者依靠 BaseFile.copy 使用 open() 成员函数和/或 path 属性。

static any_newer(dest, inputs)

比较 dest 的修改时间与多个输入文件,并返回 inputs 中的任何一个是否比 dest 更新(具有较晚的 mtime)。

copy(dest, skip_if_older=True)

将 BaseFile 内容复制到作为字符串或 Dest 实例给定的目标位置。如果 BaseFile 内容与目标内容匹配,或者在普通文件的情况下,如果目标比原始文件更新,则避免替换现有文件。当 skip_if_older 为 False 时,将禁用后一种行为。返回是否实际执行了复制(True)还是没有(False)。

inputs()

返回影响此输出文件的所有输入文件路径的可迭代对象。

static is_older(first, second)

比较两个文件的修改时间,并返回 first 文件是否比 second 文件旧。

property mode

返回文件的 Unix 模式,如果它没有意义则返回 None。

static normalize_mode(mode)
open()

返回一个类文件对象,允许读取关联文件的内容。这旨在在子类中被重载,以返回自定义类文件对象。

read()
size()

返回条目的大小。

强烈建议派生类用更优化的实现覆盖此方法。

class mozpack.files.BaseFinder(base, minify=False, minify_js=False, minify_js_verify_command=None)

Bases: object

contains(pattern)

返回基本目录下是否存在与给定模式匹配的文件。有关处理模式的说明,请参阅 mozpack.path.match 文档。

find(pattern)

为基本目录及其子目录下所有与给定模式匹配的文件生成路径和 BaseFile_instance 对。有关处理模式的说明,请参阅 mozpack.path.match 文档。

get(path)

获取单个文件。

find 方法适用于匹配多个文件时,此方法用于检索单个文件。当性能至关重要时,请使用此方法。

如果最多存在一个文件,则返回 BaseFile,否则返回 None

class mozpack.files.ComposedFinder(finders)

Bases: BaseFinder

在某种虚拟文件系统中组合多个文件查找器。

ComposedFinder 由一个字典初始化,该字典将路径与 *Finder 实例相关联。

注意,这可以优化为比预先获取所有文件更智能。

find(pattern)

为基本目录及其子目录下所有与给定模式匹配的文件生成路径和 BaseFile_instance 对。有关处理模式的说明,请参阅 mozpack.path.match 文档。

class mozpack.files.DeflatedFile(file)

Bases: BaseFile

jar 归档成员的文件类。DeflatedFile.copy() 有效地从 jar 归档中提取文件。

open()

返回一个类文件对象,允许读取关联文件的内容。这旨在在子类中被重载,以返回自定义类文件对象。

class mozpack.files.Dest(path)

Bases: object

BaseFile.copy 的辅助接口。该接口的工作原理如下
  • read() 和 write() 可用于顺序读取/写入底层文件。

  • 在 write() 之后调用 read() 将重新打开底层文件并从中读取。

  • 在 read() 之后调用 write() 将重新打开底层文件,清空它,然后写入它。

close()
exists()
property name
read(length=-1)
write(data)
class mozpack.files.ExecutableFile(path)

基类:File

OS/2、OS/X 和 ELF 系统上可执行文件和库文件的文件类。(请参阅 mozpack.executables.is_executable 文档)。

copy(dest, skip_if_older=True)

将 BaseFile 内容复制到作为字符串或 Dest 实例给定的目标位置。如果 BaseFile 内容与目标内容匹配,或者在普通文件的情况下,如果目标比原始文件更新,则避免替换现有文件。当 skip_if_older 为 False 时,将禁用后一种行为。返回是否实际执行了复制(True)还是没有(False)。

class mozpack.files.ExistingFile(required)

Bases: BaseFile

表示可能存在但内容来自其他位置的文件的文件类。

此类的目的是说明通过外部方式安装的文件。它通常仅用于清单或注册表中以说明文件。

当被要求复制时,此类不执行任何操作,因为关于源文件/数据一无所知。

此类的实例有两种类型:必需和可选。如果现有文件是必需的,则它必须在 copy() 期间存在,否则将引发错误。

copy(dest, skip_if_older=True)

将 BaseFile 内容复制到作为字符串或 Dest 实例给定的目标位置。如果 BaseFile 内容与目标内容匹配,或者在普通文件的情况下,如果目标比原始文件更新,则避免替换现有文件。当 skip_if_older 为 False 时,将禁用后一种行为。返回是否实际执行了复制(True)还是没有(False)。

inputs()

返回影响此输出文件的所有输入文件路径的可迭代对象。

class mozpack.files.ExtractedTarFile(tar, info)

Bases: GeneratedFile

tar 归档成员的文件类。底层文件的内容会立即提取并存储在内存中。

property mode

返回文件的 Unix 模式,如果它没有意义则返回 None。

read()
class mozpack.files.File(path)

Bases: BaseFile

普通文件的文件类。

inputs()

返回影响此输出文件的所有输入文件路径的可迭代对象。

property mode

返回文件的 Unix 模式,与 os.stat().st_mode 返回的模式相同。

read()

返回文件的内容。

size()

返回条目的大小。

强烈建议派生类用更优化的实现覆盖此方法。

class mozpack.files.FileFinder(base, find_executables=False, ignore=(), ignore_broken_symlinks=False, find_dotfiles=False, **kargs)

Bases: BaseFinder

帮助从文件系统获取适当的 BaseFile 实例。

get(path)

获取单个文件。

find 方法适用于匹配多个文件时,此方法用于检索单个文件。当性能至关重要时,请使用此方法。

如果最多存在一个文件,则返回 BaseFile,否则返回 None

class mozpack.files.FileListFinder(files)

Bases: BaseFinder

用于文件名的文字列表的查找器。

find(pattern)

为基本目录及其子目录下所有与给定模式匹配的文件生成路径和 BaseFile_instance 对。有关处理模式的说明,请参阅 mozpack.path.match 文档。

class mozpack.files.GeneratedFile(content)

Bases: BaseFile

用于没有先前文件系统存在的内容的文件类。

property content
inputs()

返回影响此输出文件的所有输入文件路径的可迭代对象。

open()

返回一个类文件对象,允许读取关联文件的内容。这旨在在子类中被重载,以返回自定义类文件对象。

read()
size()

返回条目的大小。

强烈建议派生类用更优化的实现覆盖此方法。

class mozpack.files.HardlinkFile(path)

基类:File

通过硬链接(如果可用)复制的文件类

这类似于 AbsoluteSymlinkFile,但使用硬链接。符号链接实现需要路径为绝对路径,因为它们在读取时解析,这使得相对路径变得混乱。硬链接在链接创建时解析路径,因此相对路径是可以的。

copy(dest, skip_if_older=True)

将 BaseFile 内容复制到作为字符串或 Dest 实例给定的目标位置。如果 BaseFile 内容与目标内容匹配,或者在普通文件的情况下,如果目标比原始文件更新,则避免替换现有文件。当 skip_if_older 为 False 时,将禁用后一种行为。返回是否实际执行了复制(True)还是没有(False)。

class mozpack.files.JarFinder(base, reader, **kargs)

Bases: BaseFinder

帮助从 JarReader 获取适当的 DeflatedFile 实例。

class mozpack.files.ManifestFile(base, entries=None)

Bases: BaseFile

清单文件的文件类。它采用单个清单条目(使用 add() 和 remove() 成员函数),并将它们调整为相对于清单的基本路径,该路径在创建时给出。.. rubric:: 例子

相对于“foobar/chrome”有一个清单条目“content foobar foobar/content/”。打包时,该条目将存储在 jar:foobar/omni.ja!/chrome/chrome.manifest 中,这意味着该条目必须相对于“chrome”而不是“foobar/chrome”。在序列化条目时,这实际上并不重要,因为此基本路径不会写出,但当同时移动条目时(例如,到 jar:foobar/omni.ja!/chrome.manifest)则很重要,我们目前不执行此操作,但将来可能会执行。

add(entry)

将给定条目添加到清单中。条目在 open() 时而不是 add() 时重新定位,以便可以更容易地 remove() 它们。

isempty()

返回清单条目是否为空

open()

返回一个类文件对象,允许 read() 清单的序列化内容。

remove(entry)

从清单中删除给定的条目。

class mozpack.files.MercurialFile(client, rev, path)

Bases: BaseFile

用于保存来自 Mercurial 的数据的文件类。

open()

返回一个类文件对象,允许读取关联文件的内容。这旨在在子类中被重载,以返回自定义类文件对象。

read()
class mozpack.files.MercurialRevisionFinder(repo, rev='.', recognize_repo_paths=False, **kwargs)

Bases: BaseFinder

一个在特定 Mercurial 版本上操作的查找器。

get(path)

获取单个文件。

find 方法适用于匹配多个文件时,此方法用于检索单个文件。当性能至关重要时,请使用此方法。

如果最多存在一个文件,则返回 BaseFile,否则返回 None

class mozpack.files.MinifiedCommentStripped(file)

Bases: BaseFile

用于通过去除注释来压缩内容的文件类。此类围绕 BaseFile 实例进行包装,并从其内容中删除以 # 开头的行。

open()

返回一个类文件对象,允许读取底层文件的压缩内容。

class mozpack.files.MinifiedJavaScript(file, verify_command=None)

Bases: BaseFile

用于压缩 JavaScript 文件的文件类。

open()

返回一个类文件对象,允许读取关联文件的内容。这旨在在子类中被重载,以返回自定义类文件对象。

class mozpack.files.PreprocessedFile(path, depfile_path, marker, defines, extra_depends=None, silence_missing_directive_warnings=False)

Bases: BaseFile

用于预处理文件的文件类。PreprocessedFile.copy() 在文件上运行预处理器以创建输出。

copy(dest, skip_if_older=True)

调用预处理器以创建目标文件。

inputs()

返回影响此输出文件的所有输入文件路径的可迭代对象。

class mozpack.files.TarFinder(base, tar, **kargs)

Bases: BaseFinder

用于从 TarFile 获取文件的帮助器。

mozpack.macpkg 模块

class mozpack.macpkg.CpioInfo(mode, nlink, dev, ino)

基类:tuple

dev

字段编号 2 的别名

ino

字段编号 3 的别名

mode

字段编号 0 的别名

字段编号 1 的别名

class mozpack.macpkg.Pbzx(fileobj)

Bases: object

read(length=None)
class mozpack.macpkg.Take(fileobj, limit)

Bases: object

文件对象包装器,允许最多读取一定长度。

read(length=None)
class mozpack.macpkg.ZlibFile(fileobj)

Bases: object

read(length)
mozpack.macpkg.uncpio(fileobj)
mozpack.macpkg.unxar(fileobj)

mozpack.manifests 模块

class mozpack.manifests.InstallManifest(path=None, fileobj=None)

Bases: object

描述要与 copier.FileCopier 实例一起使用的操作。

此类有助于序列化和反序列化用于构建 copier.FileCopier 和执行复制操作的数据。

清单定义源路径、目标路径以及目标文件应如何创建的机制。

清单中的条目对应于以下类型

copy – 将指定为源路径的文件复制到

目标路径。

link – 目标路径将是到源的符号链接或硬链接

路径。如果不支持符号链接,则会执行复制操作。

exists – 考虑目标路径,并且不会被

FileCopier 删除。如果目标路径不存在,则会引发错误。

optional – 考虑目标路径,并且不会被

FileCopier 删除。如果目标路径不存在,则不会引发错误。

patternlink – 源路径中表达式的匹配路径

将符号链接或硬链接到目标目录。

patterncopy – 与 patternlink 类似,但文件被复制,而不是

符号链接/硬链接。

preprocess – 将指定在源路径上的文件通过

预处理器,并将输出写入目标路径。

content – 使用给定内容创建目标文件。

清单版本 1 是初始版本。版本 2 添加了可选路径支持。版本 3 添加了对模式条目的支持。版本 4 添加了预处理文件支持。版本 5 添加了内容支持。

CONTENT = 8
COPY = 2
CURRENT_VERSION = 5
FIELD_SEPARATOR = '\x1f'
OPTIONAL_EXISTS = 4
PATTERN_COPY = 6
PREPROCESS = 7
REQUIRED_EXISTS = 3
add_content(content, dest)

添加一个具有给定内容的文件。

add_copy(source, dest)

向清单中添加一个复制操作。

source 将被复制到 dest。

add_entries_from(other, base='')

从另一个 mozpack.copier.InstallManifest 实例中复制数据,并在目标路径前添加可选的 base 前缀。

这允许将两个清单合并成一个清单,或者将两个清单进行标记联合。

向清单中添加一个链接。

dest 将是 source 的符号链接或硬链接。

add_optional_exists(dest)

记录目标文件可能存在。

这有效地防止了列出的文件被删除。与“必需存在”文件不同,如果目标文件不存在,此类型的文件不会引发错误。

add_pattern_copy(base, pattern, dest)

添加一个模式匹配,该匹配导致复制操作。

请参阅 add_pattern_link() 以了解用法。

添加一个模式匹配,该匹配导致创建链接。

将使用其 base 设置为 baseFileFinder,并使用 pattern 调用 FileFinder.find() 来发现源文件。每个源文件将在 dest 下创建符号链接或硬链接。

dest 下的文件名是通过获取 base 之后的文件路径片段并将其与 dest 连接起来构建的。例如:

<base>/foo/bar.h -> <dest>/foo/bar.h

add_preprocess(source, dest, deps, marker='#', defines={}, silence_missing_directive_warnings=False)

向清单中添加一个预处理文件。

source 将通过 preprocessor.py 传递,输出将写入 dest

add_required_exists(dest)

记录目标文件必须存在。

这有效地防止了列出的文件被删除。

populate_registry(registry, defines_override={}, link_policy='symlink')

使用我们的数据填充 mozpack.copier.FileRegistry 实例。

调用者提供了一个 FileRegistry 实例(或至少符合其接口的某个东西),并且该实例使用此清单中的数据填充。

可以给出定义来覆盖清单中用于预处理的定义。

调用者可以设置链接策略。这决定了 LINK 和 PATTERN_LINK 使用符号链接、硬链接还是复制。

write(path=None, fileobj=None, expand_pattern=False)

将此清单序列化到文件或文件对象中。

如果指定了 path,则将写入该文件。如果指定了 fileobj,则序列化内容将写入该文件对象。

如果两者都指定,则为错误。

exception mozpack.manifests.UnreadableInstallManifest

基类:Exception

解析无效的安装清单时引发。

mozpack.mozjar 模块

class mozpack.mozjar.Deflater(compress=True, compress_level=9)

Bases: object

zlib 压缩的文件类接口。除非压缩形式小于未压缩数据,否则数据实际上不会被压缩。

close()

关闭 Deflater。

property compressed

返回数据是否应压缩。

property compressed_data

返回压缩后的数据(如果数据应压缩(实际压缩大小小于未压缩大小)),否则返回未压缩的数据。

property compressed_size

返回写入 Deflater 的数据的压缩大小。如果 Deflater 设置为不压缩,则返回未压缩的大小。否则,如果数据不应压缩(实际压缩大小大于未压缩大小),则返回未压缩的大小。

property uncompressed_size

返回写入 Deflater 的数据的大小。

write(data)

将缓冲区追加到 Deflater。

class mozpack.mozjar.JarCdirEnd(data=None)

Bases: JarStruct

中央目录结束记录。

MAGIC = 101010256
STRUCT = {'cdir_disk': 'uint16', 'cdir_entries': 'uint16', 'cdir_offset': 'uint32', 'cdir_size': 'uint32', 'comment': 'comment_size', 'comment_size': 'uint16', 'disk_entries': 'uint16', 'disk_num': 'uint16'}
class mozpack.mozjar.JarCdirEntry(data=None)

Bases: JarStruct

中央目录文件头

MAGIC = 33639248
STRUCT = {'compressed_size': 'uint32', 'compression': 'uint16', 'crc32': 'uint32', 'creator_version': 'uint16', 'disknum': 'uint16', 'external_attr': 'uint32', 'extrafield': 'extrafield_size', 'extrafield_size': 'uint16', 'filecomment': 'filecomment_size', 'filecomment_size': 'uint16', 'filename': 'filename_size', 'filename_size': 'uint16', 'general_flag': 'uint16', 'internal_attr': 'uint16', 'lastmod_date': 'uint16', 'lastmod_time': 'uint16', 'min_version': 'uint16', 'offset': 'uint32', 'uncompressed_size': 'uint32'}
class mozpack.mozjar.JarFileReader(header, data)

Bases: object

JarReader 使用的文件类,用于访问 Jar 归档文件中的单个文件。

close()

释放未压缩的数据缓冲区。

property closed
property compressed_data

返回原始压缩数据。

read(length=-1)

读取一定量的未压缩数据。

readable()
readinto(b)

将字节读取到预分配的可写类字节对象 b 中,并返回读取的字节数。

readlines()

返回一个列表,其中包含未压缩数据中的所有数据行。

seek(pos, whence=0)

更改未压缩数据中的当前位置。随后的读取将从此处开始。

property uncompressed_data

返回未压缩的数据。

class mozpack.mozjar.JarLocalFileHeader(data=None)

Bases: JarStruct

本地文件头

MAGIC = 67324752
STRUCT = {'compressed_size': 'uint32', 'compression': 'uint16', 'crc32': 'uint32', 'extra_field': 'extra_field_size', 'extra_field_size': 'uint16', 'filename': 'filename_size', 'filename_size': 'uint16', 'general_flag': 'uint16', 'lastmod_date': 'uint16', 'lastmod_time': 'uint16', 'min_version': 'uint16', 'uncompressed_size': 'uint32'}
class mozpack.mozjar.JarLog(file=None, fileobj=None)

基类:dict

读取 Gecko 在设置 MOZ_JAR_LOG_FILE 时生成的辅助程序。然后,jar 日志作为字典可用,其中 jar 路径作为键,相应的访问日志作为列表值。仅存储对 jar 中给定成员的第一次访问。

class mozpack.mozjar.JarReader(file=None, fileobj=None, data=None)

Bases: object

具有读取 Jar 文件方法的类。可以打开标准 jar 文件以及 Mozilla jar 文件(有关详细信息,请参阅 JarWriter 文档)。

close()

释放与 Jar 关联的一些资源。

property compression
property entries

返回中心目录条目的有序字典,按文件名索引,按它们在 Jar 存档中心目录中出现的顺序排列。跳过目录条目。

property is_optimized

返回 jar 存档是否已优化。

property last_preloaded

返回设置为预加载的最后一个文件的名称。有关预加载的更多详细信息,请参阅 JarWriter 文档。

exception mozpack.mozjar.JarReaderError

基类:Exception

Jar 读取器错误的错误类型。

class mozpack.mozjar.JarStruct(data=None)

Bases: object

用于定义 ZIP 存档原始数据结构的辅助程序。此辅助程序处理的数据结构均以子类 MAGIC 字段中定义的 32 位无符号整数作为魔数开头,后跟子类 STRUCT 字段中描述的结构化数据。

STRUCT 字段包含 (名称,类型) 对的列表,其中名称是字段名称,类型可以是“uint32”、“uint16”或字段名称之一。在后一种情况下,该字段被认为是字符串缓冲区,其长度在该字段中给出。例如,

STRUCT = [
    ('version', 'uint32'),
    ('filename_size', 'uint16'),
    ('filename', 'filename_size')
]

描述了一个结构,该结构具有一个“version”32 位无符号整数字段,后跟一个“filename_size”16 位无符号整数字段,后跟一个 filename_size 长的字符串缓冲区“filename”。

用作其他字段大小的字段不会存储在对象中。在上面的示例中,此类子类的实例仅具有两个属性

  • obj[‘version’]

  • obj[‘filename’]

filename_size 将使用 len(obj[‘filename’]) 获得。

JarStruct 子类实例可以从现有数据(反序列化)或空字段初始化。

TYPE_MAPPING = {'uint16': (b'H', 2), 'uint32': (b'I', 4)}
static get_data(type, data)

反序列化给定类型(必须是 JarStruct.TYPE_MAPPING 中的一个)的单个字段,位于给定数据中给定偏移量处。

serialize()

根据 self.STRUCT 中的数据结构定义序列化数据结构。

property size

返回数据结构的大小,给定所有可变长度字段的当前值。

class mozpack.mozjar.JarWriter(file=None, fileobj=None, compress=True, compress_level=9)

Bases: object

具有写入 Jar 文件方法的类。可以写入或多或少标准的 jar 存档以及针对 Gecko 优化的 jar 存档。有关这两种布局的说明,请参阅 close() 成员函数的文档。

add(name, data, compress=None, mode=None, skip_duplicates=False)

向 jar 存档添加一个新成员,使用给定的名称和给定的数据。compress 选项指示如何压缩给定数据(JAR_STORED 或 JAR_DEFLATE 中的一个),或根据创建 JarWriter 时定义的默认值压缩(None)。允许 True 和 False 值以实现向后兼容性,分别映射到 JAR_DEFLATE 和 JAR_STORED。当应压缩数据时,仅当压缩大小小于未压缩大小时才真正压缩。mode 选项提供应为 jar 条目存储的 unix 权限,如果未指定,则默认为 0o100644(常规文件,u+rw,g+r,o+r)。如果找到重复的成员,则如果 skip_duplicates 设置为 True,则将阻止引发异常。给定的数据可以是缓冲区、类文件实例、Deflater 或 JarFileReader 实例。后两者允许避免解压缩数据以重新压缩它。

finish()

刷新并关闭 Jar 存档。

标准 jar 存档的布局如下
  • 本地文件头 1

  • 文件数据 1

  • 本地文件头 2

  • 文件数据 2

  • (…)

  • 指向本地文件头 1 的中心目录条目

  • 指向本地文件头 2 的中心目录条目

  • (…)

  • 中心目录的结尾,指向第一个中心目录条目。

针对 Gecko 优化的 Jar 存档的布局如下
  • 32 位无符号整数,给出要预加载的数据量。

  • 指向本地文件头 1 的中心目录条目

  • 指向本地文件头 2 的中心目录条目

  • (…)

  • 中心目录的结尾,指向第一个中心目录条目。

  • 本地文件头 1

  • 文件数据 1

  • 本地文件头 2

  • 文件数据 2

  • (…)

  • 中心目录的结尾,指向第一个中心目录条目。

复制中心目录的结尾是为了适应某些希望中心目录条目后跟中心目录结构的 Zip 读取工具。

preload(files)

设置在 Gecko 中打开存档时应预加载 jar 存档的哪些成员。这会根据给定列表的顺序重新排序成员。

exception mozpack.mozjar.JarWriterError

基类:Exception

Jar 写入器错误的错误类型。

mozpack.path 模块

类似于 os.path,但功能集减少,并且路径分隔符已标准化(始终使用正斜杠)。还包含一些在 os.path 中找不到的其他实用程序。

mozpack.path.abspath(path)
mozpack.path.basedir(path, bases)

给定一个目录列表 (bases),返回包含给定路径的目录。如果找到多个匹配项,则返回最深的基目录。

basedir('foo/bar/baz', ['foo', 'baz', 'foo/bar']) 返回 'foo/bar' (‘foo’‘foo/bar’ 均匹配,但 ‘foo/bar’ 是最深的匹配项)

mozpack.path.basename(path)
mozpack.path.cargo_workaround(path)
mozpack.path.commonprefix(paths)
mozpack.path.dirname(path)
mozpack.path.join(*paths)
mozpack.path.match(path, pattern)

返回给定路径是否匹配给定模式。可以使用星号 (*) 匹配路径一部分中的任何字符串,包括空字符串。

foo 匹配 *f*fo*o

但是,匹配子目录的星号可能不匹配空字符串。

foo/bar 匹配 foo/*/bar

如果模式匹配路径的其中一个祖先目录,则认为路径匹配。

foo/bar 匹配 foo

可以使用两个相邻的星号匹配文件以及零个或多个目录和子目录。

foo/bar 匹配 foo/**/bar**/bar

mozpack.path.normpath(path)
mozpack.path.normsep(path)

规范化路径分隔符,使用正斜杠代替 os.sep 的值。

mozpack.path.realpath(path)
mozpack.path.rebase(oldbase, base, relativepath)

返回相对于 base 而不是 oldbaserelativepath

mozpack.path.relpath(path, start)
mozpack.path.split(path)

将规范化的路径作为其组成部分的列表返回。

split('foo/bar/baz') 返回 ['foo', 'bar', 'baz']

mozpack.path.splitext(path)

mozpack.pkg 模块

mozpack.pkg.create_bom(bom_path: Path, root_path: Path, mkbom_tool: Path)

基于 <root_path> 在 <bom_path> 创建物料清单 (BOM) 文件。

参数:
  • bom_path – Path,BOM 文件的目标路径。

  • root_path – Path,根目录路径。

  • mkbom_tool – Path,mkbom 工具路径。

mozpack.pkg.create_payload(destination: Path, root_path: Path, cpio_tool: str)

基于 <root_path> 在 <destination> 创建有效负载。

参数:
  • destination – Path,目标路径。

  • root_path – Path,根目录路径。

  • cpio_tool – str,

mozpack.pkg.create_pkg(source_app: Path, output_pkg: Path, mkbom_tool: Path, xar_tool: Path, cpio_tool: Path)

从 <source_app> 创建 Mac PKG 安装程序到 <output_pkg>。

参数:
  • source_app – Path,源 .app 文件/目录路径。

  • output_pkg – Path,目标 .pkg 文件。

  • mkbom_tool – Path,mkbom 工具路径。

  • xar_tool – Path,xar 工具路径。

  • cpio – Path,cpio 工具路径。

mozpack.pkg.get_app_info_plist(app_path: Path) dict

从应用程序的 Info.plist 文件中检索大部分信息。Info.plist 文件应位于 ?.app/Contents/Info.plist 中。

注意:忽略不是 <string> 类型的属性。

参数:

app_path – Path,.app 文件/目录路径。

返回值:

dict,在 Info.plist 中找到的属性字典。

mozpack.pkg.get_apple_template(name: str) Template
给定 <name>,打开 <TEMPLATE_DIRECTORY>/<name> 中的文件,读取内容,

并作为 Template 返回。

参数:

name – str,模板的文件名。

返回值:

Template,从文件加载。

mozpack.pkg.get_relative_glob_list(source: Path, glob: str) List[str]

给定源路径,返回基于 glob 的相对路径列表。

参数:
  • source – Path,源目录路径。

  • glob – str,unix 风格的 glob。

返回值:

list[str],在源目录中找到的路径。

mozpack.pkg.save_text_file(content: str, destination: Path)

将文本文件保存到 <destination>,并提供 <content>。注意:覆盖内容。

参数:
  • content – str,文件所需的内容。

  • destination – Path,文件路径。

mozpack.pkg.xar_package_folder(source_path: Path, destination: Path, xar_tool: Path)

从 <source_path> 创建 pkg 到 <destination>。该命令使用 <source_path> 作为当前工作目录发出。

参数:
  • source_path – Path,源绝对路径。

  • destination – Path,目标绝对路径。

  • xar_tool – Path,xar 工具路径。

mozpack.unify 模块

class mozpack.unify.UnifiedBuildFinder(finder1, finder2, **kargs)

基类:UnifiedFinder

Mozilla 应用程序打包的专用 UnifiedFinder。它允许 *.manifest 文件的顺序不同,并通过合并其内容来统一 buildconfig.html 文件。

unify_file(path, file1, file2)

统一文件,考虑 Mozilla 应用程序的特殊情况。否则委托给 UnifiedFinder.unify_file。

class mozpack.unify.UnifiedExecutableFile(executable1, executable2)

Bases: BaseFile

用于使用“lipo”统一的可执行文件和库文件的 File 类。

copy(dest, skip_if_older=True)

从创建实例时给定的两个 Mach-O 可执行文件创建胖可执行文件。忽略 skip_if_older。

class mozpack.unify.UnifiedFinder(finder1, finder2, sorted=[], **kargs)

Bases: BaseFinder

帮助程序,用于从文件系统上的两个不同树中获取统一的 BaseFile 实例。

unify_file(path, file1, file2)

给定两个 BaseFile 以及它们所在的位置,返回文件的统一版本。如果文件匹配,则可能返回第一个 BaseFile。如果文件不匹配或其中一个为 None,则该方法返回 None。子类可能会决定在这种情况下使用其中一个文件进行统一。

mozpack.unify.may_unify_binary(file)

返回给定的 BaseFile 实例是否为可能统一的可执行文件。只有非胖 Mach-O 二进制文件才能被统一。

模块内容