跳至主要内容

数据库 index-files

[底层] 使用给定的 CodeQL 提取器为独立文件建索引。

谁可以使用此功能?

CodeQL 可用于以下仓库类型

本文内容

注意

此内容描述了 CodeQL CLI 的最新发布版本。有关此版本的更多信息,请参阅 https://github.com/github/codeql-cli-binaries/releases

要查看早期版本中此命令可用的选项详情,请在终端中使用 --help 选项运行该命令。

概要

Shell
codeql database index-files --language=<lang> [--threads=<num>] [--ram=<MB>] [--extractor-option=<extractor-option-name=value>] <options>... -- <database>

描述

[底层] 使用给定的 CodeQL 提取器为独立文件建索引。

此命令会在指定的工作目录下选择一组文件,并对它们应用给定的提取器。默认情况下会选择所有文件。典型的调用会通过选项限制所包含文件的集合。

--include--exclude--prune 选项均接受 glob 模式,可使用以下通配符字符:

  • 单个 “?” 匹配除正斜杠/反斜杠之外的任意字符;
  • 单个 “*” 匹配除正斜杠/反斜杠之外的任意数量字符;
  • 模式 “**” 匹配零个或多个完整的目录组件。

选项

主要选项

<database>

[必需] 正在构建的 CodeQL 数据库的路径。该路径必须已使用 codeql database init 进行提取准备。

-l, --language=<lang>

[必填] 用于为匹配文件建立索引的提取器。

-j, --threads=<num>

要求提取器使用指定数量的线程。该选项作为建议传递给提取器。如果设置了 CODEQL_THREADS 环境变量,则环境变量的值优先于此选项。

可以传入 0 以在机器的每个核心上使用一个线程,或传入 -N 以保留 N 个核心不使用(但仍至少使用一个线程)。

-M, --ram=<MB>

要求提取器使用指定的内存量。该选项作为建议传递给提取器。如果设置了 CODEQL_RAM 环境变量,则环境变量的值优先于此选项。

--working-dir=<dir>

[高级] 应在其中执行指定命令的目录。如果未提供此参数,命令将在传递给 codeql database create--source-root 的值所在的目录中执行(如果该参数存在)。如果未提供 --source-root 参数,则在当前工作目录中执行命令。

控制提取器行为的选项

-O, --extractor-option=<extractor-option-name=value>

为 CodeQL 提取器设置选项。extractor-option-name 应采用 extractor_name.group1.group2.option_name 或 group1.group2.option_name 的形式。如果 extractor_option_name 以提取器名称开头,则对应的提取器必须声明该 option group1.group2.option_name。否则,声明了该 option group1.group2.option_name 的任何提取器都将设置此选项。value 可以是任何不包含换行符的字符串。

您可以重复使用此命令行选项来设置多个提取器选项。如果为同一提取器选项提供多个值,行为取决于该选项期望的类型。字符串选项将使用提供的最后一个值。数组选项将按顺序使用提供的所有值。使用此命令行选项指定的提取器选项将在通过 --extractor-options-file 提供的选项之后处理。

当传递给 codeql database initcodeql database begin-tracing 时,这些选项仅会应用于间接追踪环境。如果工作流还调用了 codeql database trace-command,则需要在该命令中同样传递这些选项(如果需要的话)。

有关 CodeQL 提取器选项的更多信息(包括如何列出每个提取器声明的选项),请参阅 https://codeql.github.com/docs/codeql-cli/extractor-options

--extractor-options-file=<extractor-options-bundle-file>

指定提取器选项捆绑文件。提取器选项捆绑文件是设置提取器选项的 JSON 文件(扩展名为 .json)或 YAML 文件(扩展名为 .yaml.yml)。该文件必须在顶层映射中包含键 'extractor',其下的二级映射键为提取器名称。更深层级的映射表示嵌套的提取器组,字符串和数组选项则是具有相应字符串或数组值的映射条目。

提取器选项捆绑文件将按指定顺序读取。如果不同的捆绑文件声明了相同的提取器选项,行为取决于该选项期望的类型。字符串选项将使用提供的最后一个值。数组选项将按顺序使用提供的所有值。使用此命令行选项指定的提取器选项将在通过 --extractor-option 提供的选项之前处理。

当传递给 codeql database initcodeql database begin-tracing 时,这些选项仅会应用于间接追踪环境。如果工作流还调用了 codeql database trace-command,则需要在该命令中同样传递这些选项(如果需要的话)。

有关 CodeQL 提取器选项的更多信息(包括如何列出每个提取器声明的选项),请参阅 https://codeql.github.com/docs/codeql-cli/extractor-options

限制已索引文件集合的选项

--include-extension=<.ext>

在搜索目录树中包含所有具有给定扩展名的文件。通常应在扩展名前加上点。例如,使用 --include-extension .xml 将会包含所有“.xml”扩展名的文件。此选项与否定的 --include 选项不兼容。

--include=<glob>

在搜索目录树中包含所有匹配给定 glob 的文件和目录,使用相对于搜索目录的相对路径。如果 glob 以 ! 开头,则匹配的文件和目录将被排除。

--include 选项按顺序处理,后面的选项会覆盖前面的。例如,--include ** --include !sub/*.ts --include sub/main.* 将会包含 sub/main.ts(因为被 sub/main.* 包含),排除 sub/index.ts(因为被 !sub/*.ts 排除),并包含 sub/test.js(因为被 ** 包含且未被随后排除)。

--also-match=<glob>

要求所有结果也必须匹配给定的 glob,使用相对于搜索目录的相对路径。该选项的结构和解释方式与 --include 相同,只是它指定了一组单独的 glob,并与 --include 一起应用。

--exclude=<glob>

排除所有匹配给定 glob 的文件和目录,使用相对于搜索目录的相对路径。此选项会覆盖所有包含选项。此选项与否定的 --include 选项不兼容。

--prune=<glob>

排除所有匹配给定 glob 的文件和目录,使用相对于搜索目录的相对路径。此选项会覆盖所有包含选项。此选项与否定的 --include 选项不兼容。

--size-limit=<bytes>

排除所有大小超过给定限制的文件。大小限制可以是字节数,也可以使用 “k” 后缀表示千字节 (KiB)、使用 “m” 后缀表示兆字节 (MiB) 或使用 “g” 后缀表示千兆字节 (GiB)。此选项会覆盖所有包含选项。

--total-size-limit=<bytes>

如果所有已解析文件的累计大小超过给定限制,命令将以错误退出。大小限制的单位同上(字节、带 “k” 的 KiB、带 “m” 的 MiB、带 “g” 的 GiB)。

跟随任何符号链接到其目标。

--[no-]find-any

最多找到一个匹配项(而不是所有匹配项)。

v2.11.3 起可用。

常用选项

-h, --help

显示此帮助文本。

-J=<opt>

[高级] 为运行该命令的 JVM 提供选项。

(请注意,包含空格的选项将无法正确处理。)

-v, --verbose

逐步增加打印的进度信息数量。

-q, --quiet

逐步减少打印的进度信息数量。

--verbosity=<level>

[高级] 将详细程度显式设置为以下之一:errors、warnings、progress、progress+、progress++、progress+++。会覆盖 -v-q

--logdir=<dir>

[高级] 将详细日志写入指定目录中的一个或多个文件,文件名会包含时间戳和运行的子命令名称。

(若希望自行完全控制日志文件名,请改用 --log-to-stderr 并按需重定向 stderr。)

--common-caches=<dir>

[高级] 控制磁盘上缓存数据的位置,这些数据会在 CLI 的多次运行之间保持,例如已下载的 QL 包和已编译的查询计划。如果未显式设置,则默认使用用户主目录下名为 .codeql 的目录;如该目录不存在,则会自动创建。

v2.15.2 起可用。

© . This site is unofficial and not affiliated with GitHub, Inc.