Interface InputChanges
An incremental work action is one that accepts a single InputChanges parameter.
The work action can then query what changed for an input parameter since the last execution to only process the changes.
The following example shows a task which reverses the text in each of its input files.
It demonstrates how to use InputChanges to only process the changed files.
abstract class IncrementalReverseTask extends DefaultTask {
@Incremental
@InputDirectory
abstract DirectoryProperty getInputDir()
@OutputDirectory
abstract DirectoryProperty getOutputDir()
@TaskAction
void execute(InputChanges inputChanges) {
inputChanges.getFileChanges(inputDir).each { change ->
if (change.fileType == FileType.DIRECTORY) return
def targetFile = outputDir.file(change.normalizedPath).get().asFile
if (change.changeType == ChangeType.REMOVED) {
targetFile.delete()
} else {
targetFile.text = change.file.text.reverse()
}
}
}
}
In the case where Gradle is unable to determine which input files need to be reprocessed, then all of the input files will be reported as ChangeType.ADDED.
When such a full rebuild happens, the output files of the work are removed prior to executing the work action.
Cases where this occurs include:
- There is no history available from a previous execution.
- A non-file input parameter has changed since the previous execution.
- One or more output files have changed since the previous execution.
- Since:
- 5.4
-
Method Summary
Modifier and TypeMethodDescriptiongetFileChanges(FileCollection parameter) Changes for a parameter.getFileChanges(Provider<? extends FileSystemLocation> parameter) Changes for a parameter.booleanIndicates if it was possible for Gradle to determine which input files were out of date compared to a previous execution.
-
Method Details
-
isIncremental
boolean isIncremental()Indicates if it was possible for Gradle to determine which input files were out of date compared to a previous execution. Incremental inputs are unavailable when history is unavailable (i.e. this piece of work has never been executed before), or if there are changes to non-file input properties, or output files.When
true:getFileChanges(FileCollection)andgetFileChanges(Provider)report changes to the input files compared to the previous execution.
When
false:- Every input file is reported via
getFileChanges(FileCollection)andgetFileChanges(Provider)as if it wasChangeType.ADDED.
-
getFileChanges
Changes for a parameter.When
isIncremental()isfalse, then all elements of the parameter are returned asChangeType.ADDED.Only input file properties annotated with @
Incrementalor @SkipWhenEmptycan be queried for changes.Note that for inputs with
PathSensitivity.NONE, instead of aChangeType.MODIFIEDevent, file modifications can be reported as a pair of anChangeType.ADDEDand aChangeType.REMOVEDevent.- Parameters:
parameter- The value of the parameter to query.
-
getFileChanges
Changes for a parameter.When
isIncremental()isfalse, then all elements of the parameter are returned asChangeType.ADDED.This method allows querying properties of type
RegularFilePropertyandDirectoryPropertyfor changes. These two types are typically used for @InputFileand @InputDirectoryproperties.Only input file properties annotated with @
Incrementalor @SkipWhenEmptycan be queried for changes.Note that for inputs with
PathSensitivity.NONE, instead of aChangeType.MODIFIEDevent, file modifications can be reported as a pair of anChangeType.ADDEDand aChangeType.REMOVEDevent.- Parameters:
parameter- The value of the parameter to query.
-