@@ -136,15 +136,6 @@ abstract class Target {
136
136
/// A list of zero or more depfiles, located directly under {BUILD_DIR}.
137
137
List <String > get depfiles => const < String > [];
138
138
139
- /// A string that differentiates different build variants from each other
140
- /// with regards to build flags or settings on the target. This string should
141
- /// represent each build variant as a different unique value. If this value
142
- /// changes between builds, the target will be invalidated and rebuilt.
143
- ///
144
- /// By default, this returns null, which indicates there is only one build
145
- /// variant, and the target won't invalidate or rebuild due to this property.
146
- String ? get buildKey => null ;
147
-
148
139
/// Whether this target can be executed with the given [environment] .
149
140
///
150
141
/// Returning `true` will cause [build] to be skipped. This is equivalent
@@ -165,7 +156,6 @@ abstract class Target {
165
156
< Node > [
166
157
for (final Target target in dependencies) target._toNode (environment),
167
158
],
168
- buildKey,
169
159
environment,
170
160
inputsFiles.containsNewDepfile,
171
161
);
@@ -191,11 +181,9 @@ abstract class Target {
191
181
for (final File output in outputs) {
192
182
outputPaths.add (output.path);
193
183
}
194
- final String ? key = buildKey;
195
184
final Map <String , Object > result = < String , Object > {
196
185
'inputs' : inputPaths,
197
186
'outputs' : outputPaths,
198
- if (key != null ) 'buildKey' : key,
199
187
};
200
188
if (! stamp.existsSync ()) {
201
189
stamp.createSync ();
@@ -230,7 +218,6 @@ abstract class Target {
230
218
/// This requires constants from the [Environment] to resolve the paths of
231
219
/// inputs and the output stamp.
232
220
Map <String , Object > toJson (Environment environment) {
233
- final String ? key = buildKey;
234
221
return < String , Object > {
235
222
'name' : name,
236
223
'dependencies' : < String > [
@@ -242,7 +229,6 @@ abstract class Target {
242
229
'outputs' : < String > [
243
230
for (final File file in resolveOutputs (environment).sources) file.path,
244
231
],
245
- if (key != null ) 'buildKey' : key,
246
232
'stamp' : _findStampFile (environment).absolute.path,
247
233
};
248
234
}
@@ -994,85 +980,49 @@ void verifyOutputDirectories(List<File> outputs, Environment environment, Target
994
980
995
981
/// A node in the build graph.
996
982
class Node {
997
- factory Node (
998
- Target target,
999
- List <File > inputs,
1000
- List <File > outputs,
1001
- List <Node > dependencies,
1002
- String ? buildKey,
983
+ Node (
984
+ this .target,
985
+ this .inputs,
986
+ this .outputs,
987
+ this .dependencies,
1003
988
Environment environment,
1004
- bool missingDepfile,
989
+ this . missingDepfile,
1005
990
) {
1006
991
final File stamp = target._findStampFile (environment);
1007
- Map <String , Object ?>? stampValues;
1008
992
1009
993
// If the stamp file doesn't exist, we haven't run this step before and
1010
994
// all inputs were added.
1011
- if (stamp.existsSync ()) {
1012
- final String content = stamp.readAsStringSync ();
1013
- if (content.isEmpty) {
1014
- stamp.deleteSync ();
1015
- } else {
1016
- try {
1017
- stampValues = castStringKeyedMap (json.decode (content));
1018
- } on FormatException {
1019
- // The json is malformed in some way.
1020
- }
1021
- }
995
+ if (! stamp.existsSync ()) {
996
+ // No stamp file, not safe to skip.
997
+ _dirty = true ;
998
+ return ;
1022
999
}
1023
- if (stampValues != null ) {
1024
- final String ? previousBuildKey = stampValues['buildKey' ] as String ? ;
1025
- final Object ? stampInputs = stampValues['inputs' ];
1026
- final Object ? stampOutputs = stampValues['outputs' ];
1027
- if (stampInputs is List <Object ?> && stampOutputs is List <Object ?>) {
1028
- final Set <String > previousInputs = stampInputs.whereType <String >().toSet ();
1029
- final Set <String > previousOutputs = stampOutputs.whereType <String >().toSet ();
1030
- return Node .withStamp (
1031
- target,
1032
- inputs,
1033
- previousInputs,
1034
- outputs,
1035
- previousOutputs,
1036
- dependencies,
1037
- buildKey,
1038
- previousBuildKey,
1039
- missingDepfile,
1040
- );
1041
- }
1000
+ final String content = stamp.readAsStringSync ();
1001
+ // Something went wrong writing the stamp file.
1002
+ if (content.isEmpty) {
1003
+ stamp.deleteSync ();
1004
+ // Malformed stamp file, not safe to skip.
1005
+ _dirty = true ;
1006
+ return ;
1042
1007
}
1043
- return Node .withNoStamp (
1044
- target,
1045
- inputs,
1046
- outputs,
1047
- dependencies,
1048
- buildKey,
1049
- missingDepfile,
1050
- );
1051
- }
1052
-
1053
- Node .withNoStamp (
1054
- this .target,
1055
- this .inputs,
1056
- this .outputs,
1057
- this .dependencies,
1058
- this .buildKey,
1059
- this .missingDepfile,
1060
- ) : previousInputs = < String > {},
1061
- previousOutputs = < String > {},
1062
- previousBuildKey = null ,
1008
+ Map <String , Object ?>? values;
1009
+ try {
1010
+ values = castStringKeyedMap (json.decode (content));
1011
+ } on FormatException {
1012
+ // The json is malformed in some way.
1063
1013
_dirty = true ;
1064
-
1065
- Node . withStamp (
1066
- this .target,
1067
- this .inputs,
1068
- this .previousInputs,
1069
- this .outputs,
1070
- this . previousOutputs,
1071
- this .dependencies,
1072
- this .buildKey,
1073
- this .previousBuildKey,
1074
- this .missingDepfile,
1075
- ) : _dirty = false ;
1014
+ return ;
1015
+ }
1016
+ final Object ? inputs = values ? [ 'inputs' ];
1017
+ final Object ? outputs = values ? [ 'outputs' ];
1018
+ if (inputs is List < Object ?> && outputs is List < Object ?>) {
1019
+ inputs. cast < String ?>(). whereType < String >(). forEach (previousInputs.add);
1020
+ outputs. cast < String ?>(). whereType < String >(). forEach ( previousOutputs.add);
1021
+ } else {
1022
+ // The json is malformed in some way.
1023
+ _dirty = true ;
1024
+ }
1025
+ }
1076
1026
1077
1027
/// The resolved input files.
1078
1028
///
@@ -1084,11 +1034,6 @@ class Node {
1084
1034
/// These files may not yet exist if the target hasn't run yet.
1085
1035
final List <File > outputs;
1086
1036
1087
- /// The current build key of the target
1088
- ///
1089
- /// See `buildKey` in the `Target` class for more information.
1090
- final String ? buildKey;
1091
-
1092
1037
/// Whether this node is missing a depfile.
1093
1038
///
1094
1039
/// This requires an additional pass of source resolution after the target
@@ -1102,15 +1047,10 @@ class Node {
1102
1047
final List <Node > dependencies;
1103
1048
1104
1049
/// Output file paths from the previous invocation of this build node.
1105
- final Set <String > previousOutputs;
1050
+ final Set <String > previousOutputs = < String > {} ;
1106
1051
1107
1052
/// Input file paths from the previous invocation of this build node.
1108
- final Set <String > previousInputs;
1109
-
1110
- /// The buildKey from the previous invocation of this build node.
1111
- ///
1112
- /// See `buildKey` in the `Target` class for more information.
1113
- final String ? previousBuildKey;
1053
+ final Set <String > previousInputs = < String > {};
1114
1054
1115
1055
/// One or more reasons why a task was invalidated.
1116
1056
///
@@ -1134,10 +1074,6 @@ class Node {
1134
1074
FileSystem fileSystem,
1135
1075
Logger logger,
1136
1076
) {
1137
- if (buildKey != previousBuildKey) {
1138
- _invalidate (InvalidatedReasonKind .buildKeyChanged);
1139
- _dirty = true ;
1140
- }
1141
1077
final Set <String > currentOutputPaths = < String > {
1142
1078
for (final File file in outputs) file.path,
1143
1079
};
@@ -1237,8 +1173,7 @@ class InvalidatedReason {
1237
1173
InvalidatedReasonKind .inputChanged => 'The following inputs have updated contents: ${data .join (',' )}' ,
1238
1174
InvalidatedReasonKind .outputChanged => 'The following outputs have updated contents: ${data .join (',' )}' ,
1239
1175
InvalidatedReasonKind .outputMissing => 'The following outputs were missing: ${data .join (',' )}' ,
1240
- InvalidatedReasonKind .outputSetChanged => 'The following outputs were removed from the output set: ${data .join (',' )}' ,
1241
- InvalidatedReasonKind .buildKeyChanged => 'The target build key changed.' ,
1176
+ InvalidatedReasonKind .outputSetChanged => 'The following outputs were removed from the output set: ${data .join (',' )}'
1242
1177
};
1243
1178
}
1244
1179
}
@@ -1260,7 +1195,4 @@ enum InvalidatedReasonKind {
1260
1195
1261
1196
/// The set of expected output files changed.
1262
1197
outputSetChanged,
1263
-
1264
- /// The build key changed
1265
- buildKeyChanged,
1266
1198
}
0 commit comments