package com.linkedin.pegasus.gradle.tasks; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; import org.gradle.api.DefaultTask; import org.gradle.api.file.FileCollection; import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.SkipWhenEmpty; import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.incremental.IncrementalTaskInputs; public class ChangedFileReportTask extends DefaultTask { @InputFiles @SkipWhenEmpty FileCollection idlFiles = getProject().files(); @InputFiles @SkipWhenEmpty FileCollection snapshotFiles = getProject().files(); Collection<String> needCheckinFiles = new ArrayList<>(); @TaskAction public void checkFilesForChanges(IncrementalTaskInputs inputs) { getLogger().lifecycle("Checking idl and snapshot files for changes..."); getLogger().info("idlFiles: " + idlFiles.getAsPath()); getLogger().info("snapshotFiles: " + snapshotFiles.getAsPath()); Set<String> filesRemoved = new HashSet<>(); Set<String> filesAdded = new HashSet<>(); Set<String> filesChanged = new HashSet<>(); if (inputs.isIncremental()) { inputs.outOfDate(inputFileDetails -> { if (inputFileDetails.isAdded()) { filesAdded.add(inputFileDetails.getFile().getAbsolutePath()); } if (inputFileDetails.isRemoved()) { filesRemoved.add(inputFileDetails.getFile().getAbsolutePath()); } if (inputFileDetails.isModified()) { filesChanged.add(inputFileDetails.getFile().getAbsolutePath()); } }); inputs.removed(inputFileDetails -> filesRemoved.add(inputFileDetails.getFile().getAbsolutePath())); if (!filesRemoved.isEmpty()) { String files = joinByComma(filesRemoved); needCheckinFiles.add(files); getLogger().lifecycle( "The following files have been removed, be sure to remove them from source control: {}", files); } if (!filesAdded.isEmpty()) { String files = joinByComma(filesAdded); needCheckinFiles.add(files); getLogger().lifecycle("The following files have been added, be sure to add them to source control: {}", files); } if (!filesChanged.isEmpty()) { String files = joinByComma(filesChanged); needCheckinFiles.add(files); getLogger().lifecycle( "The following files have been changed, be sure to commit the changes to source control: {}", files); } } } private String joinByComma(Set<String> files) { return files.stream().collect(Collectors.joining(", ")); } public FileCollection getSnapshotFiles() { return snapshotFiles; } public void setSnapshotFiles(FileCollection snapshotFiles) { this.snapshotFiles = snapshotFiles; } public FileCollection getIdlFiles() { return idlFiles; } public void setIdlFiles(FileCollection idlFiles) { this.idlFiles = idlFiles; } public Collection<String> getNeedCheckinFiles() { return needCheckinFiles; } }