InputChanges

interface InputChanges(source)

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 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

Functions

Link copied to clipboard
Changes for a parameter.
Link copied to clipboard
abstract fun isIncremental(): Boolean
Indicates if it was possible for Gradle to determine which input files were out of date compared to a previous execution.