• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<lambda>null1 import org.gradle.api.DefaultTask
2 import org.gradle.api.file.ConfigurableFileCollection
3 import org.gradle.api.file.FileType
4 import org.gradle.api.tasks.Input
5 import org.gradle.api.tasks.InputFiles
6 import org.gradle.api.tasks.Optional
7 import org.gradle.api.tasks.OutputDirectory
8 import org.gradle.api.tasks.TaskAction
9 import org.gradle.work.ChangeType
10 import org.gradle.work.Incremental
11 import org.gradle.work.InputChanges
12 import java.io.File
13 
14 import java.nio.file.Files
15 
16 /**
17  * Create symbolic links of a collection of files in a set output directory.
18  *
19  * The files must all be rooted at androidTop. This will create a file tree at outputDirectory that
20  * mimics the structure rooted at androidTop.
21  */
22 abstract class SymbolicLinksTask : DefaultTask() {
23 
24     @get:Incremental
25     @get:InputFiles
26     abstract val inputDirectories: ConfigurableFileCollection
27 
28     @get:OutputDirectory
29     abstract var outputDirectory: String
30 
31     @get:Input
32     abstract var androidBuildTop: String
33 
34     init {
35         group = "symlink"
36     }
37 
38     @TaskAction
39     fun execute(inputChanges: InputChanges) {
40         var androidTopFile = File(androidBuildTop).canonicalFile
41         inputChanges.getFileChanges(inputDirectories).forEach { change ->
42             var file = change.file
43             if (change.fileType == FileType.DIRECTORY) {
44                 println("Creating link to ${file.path}")
45                 var relativePath = file.canonicalFile.relativeTo(androidTopFile)
46                 var symbolicLinkPath =
47                         project.file("$outputDirectory/$relativePath").toPath()
48                 if (change.changeType == ChangeType.ADDED && !symbolicLinkPath.toFile().exists()) {
49                     symbolicLinkPath.parent.toFile().mkdirs()
50                     Files.createSymbolicLink(symbolicLinkPath, file.toPath())
51                 }
52             } else {
53                 // We only need to create symbolic links to directories.
54                 // System.err.println("${file.path} is not a directory")
55             }
56         }
57     }
58 }
59