For every Label
instance l
, the string representation str(l)
has the property that Label(str(l)) == l
, regardless of where the Label()
call occurs.
When passed as positional arguments to print()
or fail()
, Label
use a string representation optimized for human readability instead. This representation uses an apparent repository name from the perspective of the main repository if possible.
Members
Label
Label Label(input)Converts a label string into a
Label
object, in the context of the package where the calling .bzl
source file lives. If the given value is already a Label
, it is returned unchanged.For macros, a related function, native.package_relative_label()
, converts the input into a Label
in the context of the package currently being constructed. Use that function to mimic the string-to-label conversion that is automatically done by label-valued rule attributes.
Parameters
Parameter | Description |
---|---|
input
|
string; or Label;
required The input label string or Label object. If a Label object is passed, it's returned as is. |
name
string Label.nameThe name of the target referred to by this label. For instance:
Label("@@foo//pkg/foo:abc").name == "abc"
package
string Label.packageThe name of the package containing the target referred to by this label, without the repository name. For instance:
Label("@@repo//pkg/foo:abc").package == "pkg/foo"
relative
Label Label.relative(relName)Experimental. This API is experimental and may change at any time. Please do not depend on it. It may be enabled on an experimental basis by setting
--+incompatible_enable_deprecated_label_apis
Deprecated. This method behaves surprisingly when used with an argument containing an apparent repo name. Prefer
Label.same_package_label()
, native.package_relative_label()
, or Label()
instead.Resolves a label that is either absolute (starts with //
) or relative to the current package. If this label is in a remote repository, the argument will be resolved relative to that repository. If the argument contains a repository name, the current label is ignored and the argument is returned as-is, except that the repository name is rewritten if it is in the current repository mapping. Reserved labels will also be returned as-is.
For example:
Label("//foo/bar:baz").relative(":quux") == Label("//foo/bar:quux") Label("//foo/bar:baz").relative("//wiz:quux") == Label("//wiz:quux") Label("@repo//foo/bar:baz").relative("//wiz:quux") == Label("@repo//wiz:quux") Label("@repo//foo/bar:baz").relative("//visibility:public") == Label("//visibility:public") Label("@repo//foo/bar:baz").relative("@other//wiz:quux") == Label("@other//wiz:quux")
If the repository mapping passed in is {'@other' : '@remapped'}
, then the following remapping will take place:
Label("@repo//foo/bar:baz").relative("@other//wiz:quux") == Label("@remapped//wiz:quux")
Parameters
Parameter | Description |
---|---|
relName
|
string;
required The label that will be resolved relative to this one. |
repo_name
string Label.repo_nameThe canonical name of the repository containing the target referred to by this label, without any leading at-signs (
@
). For instance, Label("@@foo//bar:baz").repo_name == "foo"
same_package_label
Label Label.same_package_label(target_name)Creates a label in the same package as this label with the given target name.
Parameters
Parameter | Description |
---|---|
target_name
|
string;
required The target name of the new label. |
workspace_name
string Label.workspace_nameExperimental. This API is experimental and may change at any time. Please do not depend on it. It may be enabled on an experimental basis by setting
--+incompatible_enable_deprecated_label_apis
Deprecated. The field name "workspace name" is a misnomer here; use the identically-behaving
Label.repo_name
instead.The canonical name of the repository containing the target referred to by this label, without any leading at-signs (@
). For instance,
Label("@@foo//bar:baz").workspace_name == "foo"
workspace_root
string Label.workspace_rootReturns the execution root for the repository containing the target referred to by this label, relative to the execroot. For instance:
Label("@repo//pkg/foo:abc").workspace_root == "external/repo"