utils repository rules

The following functions can be loaded from @bazel_tools//tools/build_defs/repo:utils.bzl.

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.

load(
    "@bazel_tools//tools/build_defs/repo:utils.bzl",
    "workspace_and_buildfile",
    "patch",
    "update_attrs",
)

download_remote_files

download_remote_files(ctx, auth)

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

ctx required.

The repository context of the repository rule calling this utility function.

auth optional. default is None

An optional dict specifying authentication information for some of the URLs.

get_auth

get_auth(ctx, urls)

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

ctx required.

The repository context of the repository rule calling this utility function.

urls required.

the list of urls to read

Returns

the auth dict which can be passed to repository_ctx.download

maybe

maybe(repo_rule, name, kwargs)

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

repo_rule required.

repository rule function.

name required.

name of the repository to create.

kwargs optional.

remaining arguments that are passed to the repo_rule function.

Returns

Nothing, defines the repository when needed as a side-effect.

parse_netrc

parse_netrc(contents, filename)

Utility function to parse at least a basic .netrc file.

Parameters

contents required.

input for the parser.

filename optional. default is None

filename to use in error messages, if any.

Returns

dict mapping a machine names to a dict with the information provided about them

patch

patch(ctx, patches, patch_cmds, patch_cmds_win, patch_tool, patch_args, auth)

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

ctx required.

The repository context of the repository rule calling this utility function.

patches optional. default is None

The patch files to apply. List of strings, Labels, or paths.

patch_cmds optional. default is None

Bash commands to run for patching, passed one at a time to bash -c. List of strings

patch_cmds_win optional. default is None

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.

patch_tool optional. default is None

Path of the patch tool to execute for applying patches. String.

patch_args optional. default is None

Arguments to pass to the patch tool. List of strings.

auth optional. default is None

An optional dict specifying authentication information for some of the URLs.

read_netrc

read_netrc(ctx, filename)

Utility function to parse at least a basic .netrc file.

Parameters

ctx required.

The repository context of the repository rule calling this utility function.

filename required.

the name of the .netrc file to read

Returns

dict mapping a machine names to a dict with the information provided about them

read_user_netrc

read_user_netrc(ctx)

Read user's default netrc file.

Parameters

ctx required.

The repository context of the repository rule calling this utility function.

Returns

dict mapping a machine names to a dict with the information provided about them.

update_attrs

update_attrs(orig, keys, override)

Utility function for altering and adding the specified attributes to a particular repository rule invocation.

This is used to make a rule reproducible.

Parameters

orig required.

dict of actually set attributes (either explicitly or implicitly) by a particular rule invocation

keys required.

complete set of attributes defined on this rule

override required.

dict of attributes to override or add to orig

Returns

dict of attributes with the keys from override inserted/updated

use_netrc

use_netrc(netrc, urls, patterns)

Compute an auth dict from a parsed netrc file and a list of URLs.

Parameters

netrc required.

a netrc file already parsed to a dict, e.g., as obtained from read_netrc

urls required.

a list of URLs.

patterns required.

optional dict of url to authorization patterns

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

workspace_and_buildfile

workspace_and_buildfile(ctx)

Utility function for writing WORKSPACE and, if requested, 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, build_file_content, workspace_file, and workspace_file_content to be present in ctx.attr; the latter four possibly with value None.

Parameters

ctx required.

The repository context of the repository rule calling this utility function.