Skip to content

Commit

Permalink
New flag --incompatible_no_attr_license to disable attr.license fun…
Browse files Browse the repository at this point in the history
…ction

#6420

RELNOTES:
  The function `attr.license` is deprecated and will be removed.
  It can be disabled now with `--incompatible_no_attr_license`.
PiperOrigin-RevId: 218910996
  • Loading branch information
laurentlb authored and Copybara-Service committed Oct 26, 2018
1 parent 9394099 commit d8d3776
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 0 deletions.
Expand Up @@ -354,6 +354,18 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable
)
public boolean incompatibleNewActionsApi;

@Option(
name = "incompatible_no_attr_license",
defaultValue = "false",
documentationCategory = OptionDocumentationCategory.SKYLARK_SEMANTICS,
effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
metadataTags = {
OptionMetadataTag.INCOMPATIBLE_CHANGE,
OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
},
help = "If set to true, disables the function `attr.license`.")
public boolean incompatibleNoAttrLicense;

@Option(
name = "incompatible_no_output_attr_default",
defaultValue = "false",
Expand Down Expand Up @@ -531,6 +543,7 @@ public SkylarkSemantics toSkylarkSemantics() {
.incompatibleExpandDirectories(incompatibleExpandDirectories)
.incompatibleGenerateJavaCommonSourceJar(incompatibleGenerateJavaCommonSourceJar)
.incompatibleNewActionsApi(incompatibleNewActionsApi)
.incompatibleNoAttrLicense(incompatibleNoAttrLicense)
.incompatibleNoOutputAttrDefault(incompatibleNoOutputAttrDefault)
.incompatibleNoSupportToolsInActionInputs(incompatibleNoSupportToolsInActionInputs)
.incompatibleNoTargetOutputGroup(incompatibleNoTargetOutputGroup)
Expand Down
Expand Up @@ -26,6 +26,7 @@
import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkSemantics.FlagIdentifier;
import com.google.devtools.build.lib.syntax.UserDefinedFunction;

/**
Expand Down Expand Up @@ -979,6 +980,7 @@ public Descriptor stringListDictAttribute(
positional = false,
doc = MANDATORY_DOC)
},
disableWithFlag = FlagIdentifier.INCOMPATIBLE_NO_ATTR_LICENSE,
useAst = true,
useEnvironment = true)
public Descriptor licenseAttribute(
Expand Down
Expand Up @@ -48,6 +48,7 @@ public enum FlagIdentifier {
SkylarkSemantics::incompatibleDisableObjcProviderResources),
INCOMPATIBLE_NO_TARGET_OUTPUT_GROUP(
SkylarkSemantics::incompatibleNoTargetOutputGroup),
INCOMPATIBLE_NO_ATTR_LICENSE(SkylarkSemantics::incompatibleNoAttrLicense),
NONE(null);

// Using a Function here makes the enum definitions far cleaner, and, since this is
Expand Down Expand Up @@ -152,6 +153,8 @@ public boolean isFeatureEnabledBasedOnTogglingFlags(

public abstract boolean incompatibleNewActionsApi();

public abstract boolean incompatibleNoAttrLicense();

public abstract boolean incompatibleNoOutputAttrDefault();

public abstract boolean incompatibleNoSupportToolsInActionInputs();
Expand Down Expand Up @@ -212,6 +215,7 @@ public static Builder builderWithDefaults() {
.incompatibleExpandDirectories(false)
.incompatibleGenerateJavaCommonSourceJar(false)
.incompatibleNewActionsApi(false)
.incompatibleNoAttrLicense(false)
.incompatibleNoOutputAttrDefault(false)
.incompatibleNoSupportToolsInActionInputs(false)
.incompatibleNoTargetOutputGroup(false)
Expand Down Expand Up @@ -276,6 +280,8 @@ public abstract static class Builder {

public abstract Builder incompatibleNewActionsApi(boolean value);

public abstract Builder incompatibleNoAttrLicense(boolean value);

public abstract Builder incompatibleNoOutputAttrDefault(boolean value);

public abstract Builder incompatibleNoSupportToolsInActionInputs(boolean value);
Expand Down
Expand Up @@ -144,6 +144,7 @@ private static SkylarkSemanticsOptions buildRandomOptions(Random rand) throws Ex
"--incompatible_expand_directories=" + rand.nextBoolean(),
"--incompatible_generate_javacommon_source_jar=" + rand.nextBoolean(),
"--incompatible_new_actions_api=" + rand.nextBoolean(),
"--incompatible_no_attr_license=" + rand.nextBoolean(),
"--incompatible_no_output_attr_default=" + rand.nextBoolean(),
"--incompatible_no_support_tools_in_action_inputs=" + rand.nextBoolean(),
"--incompatible_no_target_output_group=" + rand.nextBoolean(),
Expand Down Expand Up @@ -188,6 +189,7 @@ private static SkylarkSemantics buildRandomSemantics(Random rand) {
.incompatibleExpandDirectories(rand.nextBoolean())
.incompatibleGenerateJavaCommonSourceJar(rand.nextBoolean())
.incompatibleNewActionsApi(rand.nextBoolean())
.incompatibleNoAttrLicense(rand.nextBoolean())
.incompatibleNoOutputAttrDefault(rand.nextBoolean())
.incompatibleNoSupportToolsInActionInputs(rand.nextBoolean())
.incompatibleNoTargetOutputGroup(rand.nextBoolean())
Expand Down
Expand Up @@ -643,6 +643,19 @@ public void testAttrDoc() throws Exception {
buildAttribute("a13", "attr.string_list_dict(doc='foo')");
}

@Test
public void testNoAttrLicense() throws Exception {
ev =
createEvaluationTestCase(
SkylarkSemantics.DEFAULT_SEMANTICS.toBuilder().incompatibleNoAttrLicense(true).build());
ev.initialize();

EvalException expected = assertThrows(EvalException.class, () -> eval("attr.license()"));
assertThat(expected)
.hasMessageThat()
.contains("type 'attr (a language module)' has no method license()");
}

@Test
public void testAttrDocValueBadType() throws Exception {
checkErrorContains(
Expand Down

0 comments on commit d8d3776

Please sign in to comment.