Skip to content

Commit 7bc886f

Browse files
committed
[GR-62397] Some inputs in gradle AbstractPackagesTask are set in task config, other in task implementation.
PullRequest: graalpython/3715
2 parents 60f8617 + 9fc72e9 commit 7bc886f

File tree

4 files changed

+22
-42
lines changed

4 files changed

+22
-42
lines changed

graalpython/org.graalvm.python.gradle.plugin/src/main/java/org/graalvm/python/GraalPyGradlePlugin.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,11 @@
5656
import org.gradle.api.file.Directory;
5757
import org.gradle.api.file.DirectoryProperty;
5858
import org.gradle.api.file.ProjectLayout;
59+
import org.gradle.api.file.RegularFile;
5960
import org.gradle.api.plugins.JavaPlugin;
6061
import org.gradle.api.plugins.JavaPluginExtension;
6162
import org.gradle.api.provider.Provider;
63+
import org.gradle.api.tasks.Internal;
6264
import org.gradle.api.tasks.SourceSet;
6365
import org.gradle.api.tasks.TaskProvider;
6466
import org.gradle.jvm.tasks.Jar;
@@ -74,6 +76,7 @@
7476

7577
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.GRAALPY_GROUP_ID;
7678
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.VFS_ROOT;
79+
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.VFS_VENV;
7780

7881
public abstract class GraalPyGradlePlugin implements Plugin<Project> {
7982
private static final String LAUNCHER_CONFIGURATION_NAME = "pythonLauncherClasspath";
@@ -211,8 +214,6 @@ private TaskProvider<InstallPackagesTask> registerInstallPackagesTask(Project pr
211214
private TaskProvider<LockPackagesTask> registerLockPackagesTask(Project project, Configuration launcherClasspath, GraalPyExtension extension) {
212215
return project.getTasks().register(GRAALPY_LOCK_PACKAGES_TASK, LockPackagesTask.class, t -> {
213216
registerPackagesTask(project, launcherClasspath, extension, t);
214-
// TODO probably not necessary
215-
// t.getOutputs().upToDateWhen(tt -> false);
216217
});
217218
}
218219

@@ -227,11 +228,18 @@ private void registerPackagesTask(Project project, Configuration launcherClasspa
227228
t.getPackages().set(extension.getPackages());
228229

229230
DirectoryProperty externalDirectory = extension.getExternalDirectory();
230-
t.getOutput().convention(externalDirectory.orElse(extension.getPythonResourcesDirectory().orElse(buildDirectory.dir(DEFAULT_RESOURCES_DIRECTORY))));
231-
t.getIncludeVfsRoot().convention(externalDirectory.map(d -> false).orElse(extension.getPythonResourcesDirectory().map(d -> false).orElse(true)));
232-
t.getResourceDirectory().set(extension.getResourceDirectory());
231+
Directory output = externalDirectory.orElse(extension.getPythonResourcesDirectory().orElse(buildDirectory.dir(DEFAULT_RESOURCES_DIRECTORY))).get();
232+
t.getOutput().convention(output);
233233

234-
t.getGraalPyLockFile().convention(extension.getGraalPyLockFile().orElse(projectDirectory.file(GRAALPY_LOCK_FILE)));
234+
String vfsRoot = externalDirectory.isPresent() ? "" : extension.getResourceDirectory().getOrElse(VFS_ROOT);
235+
t.getVenvDirectory().set(output.getAsFile().toPath().resolve(vfsRoot).resolve(VFS_VENV).toFile());
236+
237+
RegularFile graalPyLockFile = extension.getGraalPyLockFile().orElse(projectDirectory.file(GRAALPY_LOCK_FILE)).get();
238+
File glfFile = graalPyLockFile.getAsFile();
239+
if(!glfFile.isAbsolute()) {
240+
graalPyLockFile = projectDirectory.file(glfFile.getPath());
241+
}
242+
t.getGraalPyLockFile().set(graalPyLockFile);
235243

236244
t.setGroup(GRAALPY_GRADLE_PLUGIN_TASK_GROUP);
237245
}

graalpython/org.graalvm.python.gradle.plugin/src/main/java/org/graalvm/python/tasks/AbstractPackagesTask.java

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@
6666
import java.util.stream.Collectors;
6767

6868
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.LAUNCHER_NAME;
69-
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.VFS_ROOT;
70-
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.VFS_VENV;
7169

7270
/**
7371
* This task is responsible installing the dependencies which were requested by the user.
@@ -121,11 +119,6 @@ public abstract class AbstractPackagesTask extends DefaultTask {
121119
122120
""";
123121

124-
/** @see #getOutput() */
125-
@Input
126-
@Optional
127-
public abstract Property<Boolean> getIncludeVfsRoot();
128-
129122
@Input
130123
public abstract ListProperty<String> getPackages();
131124

@@ -143,20 +136,15 @@ public abstract class AbstractPackagesTask extends DefaultTask {
143136
*/
144137
@OutputDirectory
145138
public abstract DirectoryProperty getOutput();
146-
147-
/**
148-
* The directory where the VFS should be generated within Java resources, i.e., applied only when
149-
* {@link #getIncludeVfsRoot()} is set.
150-
*/
151-
@Input
152-
@Optional
153-
public abstract Property<String> getResourceDirectory();
154139

155140
@InputFiles
156141
@Optional
157142
@PathSensitive(PathSensitivity.RELATIVE)
158143
public abstract RegularFileProperty getGraalPyLockFile();
159144

145+
@Internal
146+
public abstract RegularFileProperty getVenvDirectory();
147+
160148
/**
161149
* Desired polyglot runtime and GraalPy version.
162150
*/
@@ -189,25 +177,9 @@ protected Path computeLauncherDirectory() {
189177
return getLauncherDirectory().get().getAsFile().toPath();
190178
}
191179

192-
@Internal
193-
protected Path getVenvDirectory() {
194-
// XXX why not convention?
195-
// XXX skip external/resouces dir and set venv dir from task config
196-
String path = "";
197-
if (getIncludeVfsRoot().getOrElse(true)) {
198-
path = getResourceDirectory().getOrElse(VFS_ROOT);
199-
}
200-
201-
return Path.of(getOutput().get().getAsFile().toURI()).resolve(path).resolve(VFS_VENV);
202-
}
203-
204180
@Internal
205181
protected Path getLockFilePath() {
206-
Path rfp = getGraalPyLockFile().get().getAsFile().toPath();
207-
if(rfp.isAbsolute()) {
208-
return rfp;
209-
} else {
210-
return getProject().file(getGraalPyLockFile().get()).toPath();
211-
}
182+
return getGraalPyLockFile().get().getAsFile().toPath();
212183
}
184+
213185
}

graalpython/org.graalvm.python.gradle.plugin/src/main/java/org/graalvm/python/tasks/InstallPackagesTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
public abstract class InstallPackagesTask extends AbstractPackagesTask {
6868
@TaskAction
6969
public void exec() throws GradleException {
70-
Path venvDirectory = getVenvDirectory();
70+
Path venvDirectory = getVenvDirectory().get().getAsFile().toPath();
7171
try {
7272
VFSUtils.createVenv(venvDirectory, getPackages().get(), getLockFilePath(), PACKAGES_CHANGED_ERROR, MISSING_LOCK_FILE_WARNING, createLauncher(), getPolyglotVersion().get(), getLog());
7373
} catch (IOException e) {

graalpython/org.graalvm.python.gradle.plugin/src/main/java/org/graalvm/python/tasks/LockPackagesTask.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ public abstract class LockPackagesTask extends AbstractPackagesTask {
6262
public void exec() throws GradleException {
6363
checkEmptyPackages();
6464

65-
Path venvDirectory = getVenvDirectory();
65+
Path venvDirectory = getVenvDirectory().get().getAsFile().toPath();
6666
try {
67-
VFSUtils.lockPackages(getVenvDirectory(), getPackages().get(), getLockFilePath(), LOCK_FILE_HEADER, createLauncher(), getPolyglotVersion().get(), getLog());
67+
VFSUtils.lockPackages(venvDirectory, getPackages().get(), getLockFilePath(), LOCK_FILE_HEADER, createLauncher(), getPolyglotVersion().get(), getLog());
6868
} catch (IOException e) {
6969
throw new GradleException(String.format("failed to lock packages in python virtual environment %s", venvDirectory), e);
7070
}

0 commit comments

Comments
 (0)