InputChanges

API Documentation:InputChanges

Note: This class is incubating and may change in a future version of Gradle.

Provides access to any input files that need to be processed by an incremental work action.

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.

Properties

PropertyDescription
incremental
Incubating

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.

Methods

MethodDescription
getFileChanges(parameter)
Incubating

Changes for a parameter.

getFileChanges(parameter)
Incubating

Changes for a parameter.

Script blocks

No script blocks

Property details

boolean incremental (read-only)

Note: This property is incubating and may change in a future version of Gradle.

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:

When false:

Method details

Iterable<FileChange> getFileChanges(FileCollection parameter)

Note: This method is incubating and may change in a future version of Gradle.

Changes for a parameter.

When InputChanges.isIncremental() is false, then all elements of the parameter are returned as ChangeType.ADDED.

Only input file properties annotated with @Incremental or @SkipWhenEmpty can be queried for changes.

Iterable<FileChange> getFileChanges(Provider<? extends FileSystemLocation> parameter)

Note: This method is incubating and may change in a future version of Gradle.

Changes for a parameter.

When InputChanges.isIncremental() is false, then all elements of the parameter are returned as ChangeType.ADDED.

This method allows querying properties of type RegularFileProperty and DirectoryProperty for changes. These two types are typically used for @InputFile and @InputDirectory properties.

Only input file properties annotated with @Incremental or @SkipWhenEmpty can be queried for changes.