Interface InputChanges


  • public interface InputChanges
    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.
    Since:
    5.4