blob: 413b3b68a98e251823b045f2ae1fc1dfb7295f86 [file]
---
title: 'utils repository rules'
---
The following functions can be loaded from
`@bazel_tools//tools/build_defs/repo:utils.bzl`.
{/* Generated with Stardoc: http://skydoc.bazel.build */}
Utils for manipulating external repositories, once fetched.
### Setup
These utilities are intended to be used by other repository rules. They
can be loaded as follows.
```python
load(
"@bazel_tools//tools/build_defs/repo:utils.bzl",
"workspace_and_buildfile",
"patch",
"update_attrs",
)
```
<a id="download_remote_files"></a>
## download_remote_files
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "download_remote_files")
download_remote_files(<a href="#download_remote_files-ctx">ctx</a>, <a href="#download_remote_files-auth">auth</a>)
</pre>
Utility function for downloading remote files.
This rule is intended to be used in the implementation function of
a repository rule. It assumes the parameters `remote_file_urls` and
`remote_file_integrity` to be present in `ctx.attr`.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="download_remote_files-ctx">
<td><code>ctx</code></td>
<td>
required.
<p>
The repository context of the repository rule calling this utility
function.
</p>
</td>
</tr>
<tr id="download_remote_files-auth">
<td><code>auth</code></td>
<td>
optional.
default is <code>None</code>
<p>
An optional dict specifying authentication information for some of the URLs.
</p>
</td>
</tr>
</tbody>
</table>
### Returns
dict mapping file paths to a download info.
<a id="get_auth"></a>
## get_auth
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "get_auth")
get_auth(<a href="#get_auth-ctx">ctx</a>, <a href="#get_auth-urls">urls</a>)
</pre>
Utility function to obtain the correct auth dict for a list of urls from .netrc file.
Support optional netrc and auth_patterns attributes if available.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="get_auth-ctx">
<td><code>ctx</code></td>
<td>
required.
<p>
The repository context of the repository rule calling this utility
function.
</p>
</td>
</tr>
<tr id="get_auth-urls">
<td><code>urls</code></td>
<td>
required.
<p>
the list of urls to read
</p>
</td>
</tr>
</tbody>
</table>
### Returns
the auth dict which can be passed to repository_ctx.download
<a id="maybe"></a>
## maybe
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "maybe")
maybe(<a href="#maybe-repo_rule">repo_rule</a>, <a href="#maybe-name">name</a>, <a href="#maybe-kwargs">**kwargs</a>)
</pre>
Utility function for only adding a repository if it's not already present.
This is to implement safe repositories.bzl macro documented in
https://bazel.build/rules/deploying#dependencies.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="maybe-repo_rule">
<td><code>repo_rule</code></td>
<td>
required.
<p>
repository rule function.
</p>
</td>
</tr>
<tr id="maybe-name">
<td><code>name</code></td>
<td>
required.
<p>
name of the repository to create.
</p>
</td>
</tr>
<tr id="maybe-kwargs">
<td><code>kwargs</code></td>
<td>
optional.
<p>
remaining arguments that are passed to the repo_rule function.
</p>
</td>
</tr>
</tbody>
</table>
### Returns
Nothing, defines the repository when needed as a side-effect.
<a id="parse_netrc"></a>
## parse_netrc
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "parse_netrc")
parse_netrc(<a href="#parse_netrc-contents">contents</a>, <a href="#parse_netrc-filename">filename</a>)
</pre>
Utility function to parse at least a basic .netrc file.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="parse_netrc-contents">
<td><code>contents</code></td>
<td>
required.
<p>
input for the parser.
</p>
</td>
</tr>
<tr id="parse_netrc-filename">
<td><code>filename</code></td>
<td>
optional.
default is <code>"a .netrc file"</code>
<p>
filename to use in error messages, if any.
</p>
</td>
</tr>
</tbody>
</table>
### Returns
dict mapping a machine names to a dict with the information provided
about them
<a id="patch"></a>
## patch
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "patch")
patch(<a href="#patch-ctx">ctx</a>, <a href="#patch-patches">patches</a>, <a href="#patch-patch_cmds">patch_cmds</a>, <a href="#patch-patch_cmds_win">patch_cmds_win</a>, <a href="#patch-patch_tool">patch_tool</a>, <a href="#patch-patch_args">patch_args</a>, <a href="#patch-auth">auth</a>)
</pre>
Implementation of patching an already extracted repository.
This rule is intended to be used in the implementation function of
a repository rule. If the parameters `patches`, `patch_tool`,
`patch_args`, `patch_cmds` and `patch_cmds_win` are not specified
then they are taken from `ctx.attr`.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="patch-ctx">
<td><code>ctx</code></td>
<td>
required.
<p>
The repository context of the repository rule calling this utility
function.
</p>
</td>
</tr>
<tr id="patch-patches">
<td><code>patches</code></td>
<td>
optional.
default is <code>None</code>
<p>
The patch files to apply. List of strings, Labels, or paths.
</p>
</td>
</tr>
<tr id="patch-patch_cmds">
<td><code>patch_cmds</code></td>
<td>
optional.
default is <code>None</code>
<p>
Bash commands to run for patching, passed one at a
time to bash -c. List of strings
</p>
</td>
</tr>
<tr id="patch-patch_cmds_win">
<td><code>patch_cmds_win</code></td>
<td>
optional.
default is <code>None</code>
<p>
Powershell commands to run for patching, passed
one at a time to powershell /c. List of strings. If the
boolean value of this parameter is false, patch_cmds will be
used and this parameter will be ignored.
</p>
</td>
</tr>
<tr id="patch-patch_tool">
<td><code>patch_tool</code></td>
<td>
optional.
default is <code>None</code>
<p>
Path of the patch tool to execute for applying
patches. String.
</p>
</td>
</tr>
<tr id="patch-patch_args">
<td><code>patch_args</code></td>
<td>
optional.
default is <code>None</code>
<p>
Arguments to pass to the patch tool. List of strings.
</p>
</td>
</tr>
<tr id="patch-auth">
<td><code>auth</code></td>
<td>
optional.
default is <code>None</code>
<p>
An optional dict specifying authentication information for some of the URLs.
</p>
</td>
</tr>
</tbody>
</table>
### Returns
dict mapping remote patch URLs to a download info.
<a id="read_netrc"></a>
## read_netrc
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "read_netrc")
read_netrc(<a href="#read_netrc-ctx">ctx</a>, <a href="#read_netrc-filename">filename</a>)
</pre>
Utility function to parse at least a basic .netrc file.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="read_netrc-ctx">
<td><code>ctx</code></td>
<td>
required.
<p>
The repository context of the repository rule calling this utility
function.
</p>
</td>
</tr>
<tr id="read_netrc-filename">
<td><code>filename</code></td>
<td>
required.
<p>
the name of the .netrc file to read
</p>
</td>
</tr>
</tbody>
</table>
### Returns
dict mapping a machine names to a dict with the information provided
about them
<a id="read_user_netrc"></a>
## read_user_netrc
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "read_user_netrc")
read_user_netrc(<a href="#read_user_netrc-ctx">ctx</a>)
</pre>
Read user's default netrc file.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="read_user_netrc-ctx">
<td><code>ctx</code></td>
<td>
required.
<p>
The repository context of the repository rule calling this utility function.
</p>
</td>
</tr>
</tbody>
</table>
### Returns
dict mapping a machine names to a dict with the information provided about them.
<a id="update_attrs"></a>
## update_attrs
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "update_attrs")
update_attrs(<a href="#update_attrs-orig">orig</a>, <a href="#update_attrs-keys">keys</a>, <a href="#update_attrs-override">override</a>)
</pre>
Utility function for altering and adding the specified attributes to a particular repository rule invocation.
This is used to make a rule reproducible.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="update_attrs-orig">
<td><code>orig</code></td>
<td>
required.
<p>
dict of actually set attributes (either explicitly or implicitly)
by a particular rule invocation
</p>
</td>
</tr>
<tr id="update_attrs-keys">
<td><code>keys</code></td>
<td>
required.
<p>
complete set of attributes defined on this rule
</p>
</td>
</tr>
<tr id="update_attrs-override">
<td><code>override</code></td>
<td>
required.
<p>
dict of attributes to override or add to orig
</p>
</td>
</tr>
</tbody>
</table>
### Returns
dict of attributes with the keys from override inserted/updated
<a id="use_netrc"></a>
## use_netrc
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "use_netrc")
use_netrc(<a href="#use_netrc-netrc">netrc</a>, <a href="#use_netrc-urls">urls</a>, <a href="#use_netrc-patterns">patterns</a>)
</pre>
Compute an auth dict from a parsed netrc file and a list of URLs.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="use_netrc-netrc">
<td><code>netrc</code></td>
<td>
required.
<p>
a netrc file already parsed to a dict, e.g., as obtained from
read_netrc
</p>
</td>
</tr>
<tr id="use_netrc-urls">
<td><code>urls</code></td>
<td>
required.
<p>
a list of URLs.
</p>
</td>
</tr>
<tr id="use_netrc-patterns">
<td><code>patterns</code></td>
<td>
required.
<p>
optional dict of url to authorization patterns
</p>
</td>
</tr>
</tbody>
</table>
### Returns
dict suitable as auth argument for ctx.download; more precisely, the dict
will map all URLs where the netrc file provides login and password to a
dict containing the corresponding login, password and optional authorization pattern,
as well as the mapping of "type" to "basic" or "pattern".
<a id="workspace_and_buildfile"></a>
## workspace_and_buildfile
<pre>
load("@bazel//tools/build_defs/repo:utils.bzl", "workspace_and_buildfile")
workspace_and_buildfile(<a href="#workspace_and_buildfile-ctx">ctx</a>)
</pre>
Utility function for writing a BUILD file.
This rule is intended to be used in the implementation function of a
repository rule.
It assumes the parameters `name`, `build_file`, and `build_file_content` to
be present in `ctx.attr`; the latter two possibly with value None.
### Parameters
<table class="params-table">
<colgroup>
<col class="col-param" />
<col class="col-description" />
</colgroup>
<tbody>
<tr id="workspace_and_buildfile-ctx">
<td><code>ctx</code></td>
<td>
required.
<p>
The repository context of the repository rule calling this utility
function.
</p>
</td>
</tr>
</tbody>
</table>