@@ -84,7 +84,12 @@ class GradleService(
8484    private  fun  setupGradle (): MutableList <String > {
8585        val  sketch =  sketch ? :  throw  IllegalStateException (" Sketch is not set"  )
8686
87-         //  TODO: if sketch is read-only, copy it whole to the temporary working directory / sketch
87+         val  sketchFolder =  if (sketch.isReadOnly) workingDir.resolve(" sketch"  ).toFile() else  sketch.folder
88+         if (sketch.isReadOnly){
89+             //  If the sketch is read-only, we copy it to the working directory
90+             //  This allows us to run the sketch without modifying the original files
91+             sketch.folder.copyRecursively(sketchFolder, overwrite =  true )
92+         }
8893
8994        val  unsaved =  sketch.code
9095            .map { code -> 
@@ -118,7 +123,7 @@ class GradleService(
118123            // "window.color" to "0xFF000000", // TODO: Implement
119124            // "stop.color" to "0xFF000000", // TODO: Implement
120125            " stop.hide"   to false , //  TODO: Implement
121-             " sketch.folder"   to sketch.folder.absolutePath ,
126+             " sketch.folder"   to sketchFolder ,
122127        )
123128        val  repository =  Platform .getContentFile(" repository"  ).absolutePath.replace(""" \"""  , """ \\"""  )
124129
@@ -144,7 +149,7 @@ class GradleService(
144149        }
145150
146151
147-         val  buildGradle =  sketch.folder .resolve(" build.gradle.kts"  )
152+         val  buildGradle =  sketchFolder .resolve(" build.gradle.kts"  )
148153        val  generate =  buildGradle.let  {
149154            if (! it.exists()) return @let true 
150155
@@ -179,13 +184,16 @@ class GradleService(
179184            val  content =  " ${header} \n ${instructions} \n ${configuration} " 
180185            buildGradle.writeText(content)
181186        }
182-         val  settingsGradle =  sketch.folder .resolve(" settings.gradle.kts"  )
187+         val  settingsGradle =  sketchFolder .resolve(" settings.gradle.kts"  )
183188        if  (! settingsGradle.exists()) {
184189            settingsGradle.createNewFile()
185190        }
186191
187192        val  arguments =  mutableListOf (" --init-script"  , initGradle.toAbsolutePath().toString())
188193        if  (! Base .DEBUG ) arguments.add(" --quiet"  )
194+         if (sketch.isReadOnly){
195+             arguments + =  listOf (" --project-dir"  , sketchFolder.absolutePath)
196+         }
189197        arguments.addAll(variables.entries
190198            .filter { it.value !=  null  }
191199            .map { " -Pprocessing.${it.key} =${it.value} "   }
0 commit comments