跳至主要内容

数据库索引文件

使用给定的 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 以提取器名称开头,则指定的提取器必须声明选项 group1.group2.option_name。否则,任何声明选项 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相同的结构和相同的解释,但指定了与--include结合使用的单独的glob序列。

--exclude=<glob>

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

--prune=<glob>

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

--size-limit=<bytes>

排除大小超过给定限制的所有文件。大小限制以字节为单位,或者使用“k”后缀以千字节 (KiB) 为单位,使用“m”后缀以兆字节 (MiB) 为单位,使用“g”后缀以吉字节 (GiB) 为单位。此选项覆盖所有include选项。

--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>

[高级] 将详细程度明确设置为错误、警告、进度、进度+、进度++、进度+++ 之一。覆盖-v-q

--logdir=<dir>

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

(要写入名称完全受您控制的日志文件,请改用--log-to-stderr并根据需要重定向stderr。)

--common-caches=<dir>

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

v2.15.2版本起可用。