mirror of
https://github.com/apple/pkl.git
synced 2026-07-08 14:05:17 +02:00
Convert org.pkl.core.project POJOs to record classes (#749)
This commit is contained in:
@@ -36,7 +36,7 @@ class CliProjectPackager(
|
|||||||
) : CliProjectCommand(baseOptions, projectDirs) {
|
) : CliProjectCommand(baseOptions, projectDirs) {
|
||||||
|
|
||||||
private fun runApiTests(project: Project) {
|
private fun runApiTests(project: Project) {
|
||||||
val apiTests = project.`package`!!.apiTests
|
val apiTests = project.`package`!!.apiTests()
|
||||||
if (apiTests.isEmpty()) return
|
if (apiTests.isEmpty()) return
|
||||||
val normalizeApiTests = apiTests.map { project.projectDir.resolve(it).toUri() }
|
val normalizeApiTests = apiTests.map { project.projectDir.resolve(it).toUri() }
|
||||||
val testRunner =
|
val testRunner =
|
||||||
@@ -49,7 +49,7 @@ class CliProjectPackager(
|
|||||||
try {
|
try {
|
||||||
testRunner.run()
|
testRunner.run()
|
||||||
} catch (e: CliTestException) {
|
} catch (e: CliTestException) {
|
||||||
throw CliException(ErrorMessages.create("packageTestsFailed", project.`package`!!.uri))
|
throw CliException(ErrorMessages.create("packageTestsFailed", project.`package`!!.uri()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,8 +67,8 @@ class CliProjectPackager(
|
|||||||
}
|
}
|
||||||
// Require that all local projects are included
|
// Require that all local projects are included
|
||||||
projects.forEach { proj ->
|
projects.forEach { proj ->
|
||||||
proj.dependencies.localDependencies.values.forEach { localDep ->
|
proj.dependencies.localDependencies().values.forEach { localDep ->
|
||||||
val projectDir = Path.of(localDep.projectFileUri).parent
|
val projectDir = Path.of(localDep.projectFileUri()).parent
|
||||||
if (projects.none { it.projectDir == projectDir }) {
|
if (projects.none { it.projectDir == projectDir }) {
|
||||||
throw CliException(
|
throw CliException(
|
||||||
ErrorMessages.create("missingProjectInPackageCommand", proj.projectDir, projectDir)
|
ErrorMessages.create("missingProjectInPackageCommand", proj.projectDir, projectDir)
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public final class ProjectDependenciesManager {
|
|||||||
SecurityManager securityManager) {
|
SecurityManager securityManager) {
|
||||||
this.declaredDependencies = declaredDependencies;
|
this.declaredDependencies = declaredDependencies;
|
||||||
// new URI("scheme://host/a/b/c.txt").resolve(".") == new URI("scheme://host/a/b/")
|
// new URI("scheme://host/a/b/c.txt").resolve(".") == new URI("scheme://host/a/b/")
|
||||||
this.projectBaseUri = IoUtils.resolve(declaredDependencies.getProjectFileUri(), ".");
|
this.projectBaseUri = IoUtils.resolve(declaredDependencies.projectFileUri(), ".");
|
||||||
this.moduleResolver = moduleResolver;
|
this.moduleResolver = moduleResolver;
|
||||||
this.securityManager = securityManager;
|
this.securityManager = securityManager;
|
||||||
}
|
}
|
||||||
@@ -88,7 +88,7 @@ public final class ProjectDependenciesManager {
|
|||||||
}
|
}
|
||||||
var projectDeps = getProjectDeps();
|
var projectDeps = getProjectDeps();
|
||||||
myDependencies = doBuildResolvedDependenciesForProject(declaredDependencies, projectDeps);
|
myDependencies = doBuildResolvedDependenciesForProject(declaredDependencies, projectDeps);
|
||||||
for (var localPkg : declaredDependencies.getLocalDependencies().values()) {
|
for (var localPkg : declaredDependencies.localDependencies().values()) {
|
||||||
ensureLocalProjectDependencyInitialized(localPkg, projectDeps);
|
ensureLocalProjectDependencyInitialized(localPkg, projectDeps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -97,14 +97,14 @@ public final class ProjectDependenciesManager {
|
|||||||
private void ensureLocalProjectDependencyInitialized(
|
private void ensureLocalProjectDependencyInitialized(
|
||||||
DeclaredDependencies localProjectDependencies, ProjectDeps projectDeps) {
|
DeclaredDependencies localProjectDependencies, ProjectDeps projectDeps) {
|
||||||
// turn `package:` scheme into `projectpackage`: scheme
|
// turn `package:` scheme into `projectpackage`: scheme
|
||||||
var uri = PackageUri.create("project" + localProjectDependencies.getMyPackageUri());
|
var uri = PackageUri.create("project" + localProjectDependencies.myPackageUri());
|
||||||
if (localPackageDependencies.containsKey(uri)) {
|
if (localPackageDependencies.containsKey(uri)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var resolvedDeps = doBuildResolvedDependenciesForProject(localProjectDependencies, projectDeps);
|
var resolvedDeps = doBuildResolvedDependenciesForProject(localProjectDependencies, projectDeps);
|
||||||
localPackageDependencies.put(uri, resolvedDeps);
|
localPackageDependencies.put(uri, resolvedDeps);
|
||||||
// TODO: check circular imports (should not be possible)
|
// TODO: check circular imports (should not be possible)
|
||||||
for (var declaredDeps : localProjectDependencies.getLocalDependencies().values()) {
|
for (var declaredDeps : localProjectDependencies.localDependencies().values()) {
|
||||||
ensureLocalProjectDependencyInitialized(declaredDeps, projectDeps);
|
ensureLocalProjectDependencyInitialized(declaredDeps, projectDeps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,22 +124,21 @@ public final class ProjectDependenciesManager {
|
|||||||
DeclaredDependencies declaredDeps, ProjectDeps resolvedProjectDeps) {
|
DeclaredDependencies declaredDeps, ProjectDeps resolvedProjectDeps) {
|
||||||
var ret =
|
var ret =
|
||||||
new HashMap<String, Dependency>(
|
new HashMap<String, Dependency>(
|
||||||
declaredDeps.getRemoteDependencies().size()
|
declaredDeps.remoteDependencies().size() + declaredDeps.localDependencies().size());
|
||||||
+ declaredDeps.getLocalDependencies().size());
|
for (var entry : declaredDeps.localDependencies().entrySet()) {
|
||||||
for (var entry : declaredDeps.getLocalDependencies().entrySet()) {
|
|
||||||
var localDeclaredDependencies = entry.getValue();
|
var localDeclaredDependencies = entry.getValue();
|
||||||
var packageUri = localDeclaredDependencies.getMyPackageUri();
|
var packageUri = localDeclaredDependencies.myPackageUri();
|
||||||
assert packageUri != null;
|
assert packageUri != null;
|
||||||
var canonicalPackageUri =
|
var canonicalPackageUri =
|
||||||
CanonicalPackageUri.fromPackageUri(localDeclaredDependencies.getMyPackageUri());
|
CanonicalPackageUri.fromPackageUri(localDeclaredDependencies.myPackageUri());
|
||||||
var resolvedDep = resolvedProjectDeps.get(canonicalPackageUri);
|
var resolvedDep = resolvedProjectDeps.get(canonicalPackageUri);
|
||||||
if (resolvedDep == null) {
|
if (resolvedDep == null) {
|
||||||
throw new PackageLoadError("unresolvedProjectDependency", packageUri);
|
throw new PackageLoadError("unresolvedProjectDependency", packageUri);
|
||||||
}
|
}
|
||||||
checkProjectDependencyOutOfDate(declaredDeps.getProjectFileUri(), packageUri, resolvedDep);
|
checkProjectDependencyOutOfDate(declaredDeps.projectFileUri(), packageUri, resolvedDep);
|
||||||
ret.put(entry.getKey(), resolvedDep);
|
ret.put(entry.getKey(), resolvedDep);
|
||||||
}
|
}
|
||||||
for (var entry : declaredDeps.getRemoteDependencies().entrySet()) {
|
for (var entry : declaredDeps.remoteDependencies().entrySet()) {
|
||||||
var remoteDep = entry.getValue();
|
var remoteDep = entry.getValue();
|
||||||
var packageUri = CanonicalPackageUri.fromPackageUri(remoteDep.getPackageUri());
|
var packageUri = CanonicalPackageUri.fromPackageUri(remoteDep.getPackageUri());
|
||||||
var resolvedDep = resolvedProjectDeps.get(packageUri);
|
var resolvedDep = resolvedProjectDeps.get(packageUri);
|
||||||
@@ -147,7 +146,7 @@ public final class ProjectDependenciesManager {
|
|||||||
throw new PackageLoadError("unresolvedProjectDependency", entry.getValue().getPackageUri());
|
throw new PackageLoadError("unresolvedProjectDependency", entry.getValue().getPackageUri());
|
||||||
}
|
}
|
||||||
checkProjectDependencyOutOfDate(
|
checkProjectDependencyOutOfDate(
|
||||||
declaredDeps.getProjectFileUri(), remoteDep.getPackageUri(), resolvedDep);
|
declaredDeps.projectFileUri(), remoteDep.getPackageUri(), resolvedDep);
|
||||||
ret.put(entry.getKey(), resolvedDep);
|
ret.put(entry.getKey(), resolvedDep);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@@ -220,7 +219,7 @@ public final class ProjectDependenciesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public URI getProjectFileUri() {
|
public URI getProjectFileUri() {
|
||||||
return declaredDependencies.getProjectFileUri();
|
return declaredDependencies.projectFileUri();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ProjectDeps getProjectDeps() {
|
private ProjectDeps getProjectDeps() {
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ package org.pkl.core.project;
|
|||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.Objects;
|
|
||||||
import org.pkl.core.PklBugException;
|
import org.pkl.core.PklBugException;
|
||||||
import org.pkl.core.packages.PackageUri;
|
import org.pkl.core.packages.PackageUri;
|
||||||
import org.pkl.core.util.ErrorMessages;
|
import org.pkl.core.util.ErrorMessages;
|
||||||
@@ -29,10 +28,7 @@ import org.pkl.core.util.ErrorMessages;
|
|||||||
* package://example.com/foo/bar@0}. Does not include a URI's userinfo, query params or fragment
|
* package://example.com/foo/bar@0}. Does not include a URI's userinfo, query params or fragment
|
||||||
* segments.
|
* segments.
|
||||||
*/
|
*/
|
||||||
public final class CanonicalPackageUri {
|
public record CanonicalPackageUri(URI baseUri, int majorVersion) {
|
||||||
private final URI baseUri;
|
|
||||||
private final int majorVersion;
|
|
||||||
|
|
||||||
public static CanonicalPackageUri fromPackageUri(PackageUri packageUri) {
|
public static CanonicalPackageUri fromPackageUri(PackageUri packageUri) {
|
||||||
var uri = packageUri.getUri();
|
var uri = packageUri.getUri();
|
||||||
URI baseUri;
|
URI baseUri;
|
||||||
@@ -71,17 +67,18 @@ public final class CanonicalPackageUri {
|
|||||||
return new CanonicalPackageUri(baseUri, majorVersion);
|
return new CanonicalPackageUri(baseUri, majorVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CanonicalPackageUri(URI baseUri, int majorVersion) {
|
/**
|
||||||
this.baseUri = baseUri;
|
* @deprecated As of 0.28.0, replaced by {@link #majorVersion()}.
|
||||||
this.majorVersion = majorVersion;
|
*/
|
||||||
}
|
@Deprecated(forRemoval = true)
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public int getMajorVersion() {
|
public int getMajorVersion() {
|
||||||
return majorVersion;
|
return majorVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #baseUri()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public URI getBaseUri() {
|
public URI getBaseUri() {
|
||||||
return baseUri;
|
return baseUri;
|
||||||
}
|
}
|
||||||
@@ -98,11 +95,6 @@ public final class CanonicalPackageUri {
|
|||||||
return majorVersion == that.majorVersion && baseUri.equals(that.baseUri);
|
return majorVersion == that.majorVersion && baseUri.equals(that.baseUri);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(baseUri, majorVersion);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return baseUri + "@" + majorVersion;
|
return baseUri + "@" + majorVersion;
|
||||||
|
|||||||
@@ -21,35 +21,39 @@ import org.pkl.core.packages.Dependency.RemoteDependency;
|
|||||||
import org.pkl.core.packages.PackageUri;
|
import org.pkl.core.packages.PackageUri;
|
||||||
import org.pkl.core.util.Nullable;
|
import org.pkl.core.util.Nullable;
|
||||||
|
|
||||||
public final class DeclaredDependencies {
|
public record DeclaredDependencies(
|
||||||
private final Map<String, RemoteDependency> remoteDependencies;
|
Map<String, RemoteDependency> remoteDependencies,
|
||||||
private final Map<String, DeclaredDependencies> localDependencies;
|
Map<String, DeclaredDependencies> localDependencies,
|
||||||
private final URI projectFileUri;
|
URI projectFileUri,
|
||||||
private final @Nullable PackageUri myPackageUri;
|
@Nullable PackageUri myPackageUri) {
|
||||||
|
/**
|
||||||
public DeclaredDependencies(
|
* @deprecated As of 0.28.0, replaced by {@link #localDependencies()}.
|
||||||
Map<String, RemoteDependency> remoteDependencies,
|
*/
|
||||||
Map<String, DeclaredDependencies> localDependencies,
|
@Deprecated(forRemoval = true)
|
||||||
URI projectFileUri,
|
|
||||||
@Nullable PackageUri myPackageUri) {
|
|
||||||
this.remoteDependencies = remoteDependencies;
|
|
||||||
this.localDependencies = localDependencies;
|
|
||||||
this.projectFileUri = projectFileUri;
|
|
||||||
this.myPackageUri = myPackageUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, DeclaredDependencies> getLocalDependencies() {
|
public Map<String, DeclaredDependencies> getLocalDependencies() {
|
||||||
return localDependencies;
|
return localDependencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #remoteDependencies()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public Map<String, RemoteDependency> getRemoteDependencies() {
|
public Map<String, RemoteDependency> getRemoteDependencies() {
|
||||||
return remoteDependencies;
|
return remoteDependencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #projectFileUri()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public URI getProjectFileUri() {
|
public URI getProjectFileUri() {
|
||||||
return projectFileUri;
|
return projectFileUri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #myPackageUri()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public @Nullable PackageUri getMyPackageUri() {
|
public @Nullable PackageUri getMyPackageUri() {
|
||||||
return myPackageUri;
|
return myPackageUri;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,209 +18,145 @@ package org.pkl.core.project;
|
|||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import org.pkl.core.Version;
|
import org.pkl.core.Version;
|
||||||
import org.pkl.core.packages.PackageUri;
|
import org.pkl.core.packages.PackageUri;
|
||||||
import org.pkl.core.util.Nullable;
|
import org.pkl.core.util.Nullable;
|
||||||
|
|
||||||
/** Java representation of class {@code pkl.Project#Package} */
|
/** Java representation of class {@code pkl.Project#Package} */
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class Package {
|
public record Package(
|
||||||
|
String name,
|
||||||
private final String name;
|
PackageUri uri,
|
||||||
private final PackageUri uri;
|
Version version,
|
||||||
private final Version version;
|
URI packageZipUrl,
|
||||||
private final URI packageZipUrl;
|
@Nullable String description,
|
||||||
private final @Nullable String description;
|
List<String> authors,
|
||||||
private final List<String> authors;
|
@Nullable URI website,
|
||||||
private final @Nullable URI website;
|
@Nullable URI documentation,
|
||||||
private final @Nullable URI documentation;
|
@Nullable URI sourceCode,
|
||||||
private final @Nullable URI sourceCode;
|
@Nullable String sourceCodeUrlScheme,
|
||||||
private final @Nullable String sourceCodeUrlScheme;
|
@Nullable String license,
|
||||||
private final @Nullable String license;
|
@Nullable String licenseText,
|
||||||
private final @Nullable String licenseText;
|
@Nullable URI issueTracker,
|
||||||
private final @Nullable URI issueTracker;
|
List<Path> apiTests,
|
||||||
private final List<Path> apiTests;
|
List<String> exclude) {
|
||||||
private final List<String> exclude;
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #name()}.
|
||||||
public Package(
|
*/
|
||||||
String name,
|
@Deprecated(forRemoval = true)
|
||||||
PackageUri uri,
|
|
||||||
Version version,
|
|
||||||
URI packageZipUrl,
|
|
||||||
@Nullable String description,
|
|
||||||
List<String> authors,
|
|
||||||
@Nullable URI website,
|
|
||||||
@Nullable URI documentation,
|
|
||||||
@Nullable URI sourceCode,
|
|
||||||
@Nullable String sourceCodeUrlScheme,
|
|
||||||
@Nullable String license,
|
|
||||||
@Nullable String licenseText,
|
|
||||||
@Nullable URI issueTracker,
|
|
||||||
List<Path> apiTests,
|
|
||||||
List<String> exclude) {
|
|
||||||
this.name = name;
|
|
||||||
this.uri = uri;
|
|
||||||
this.version = version;
|
|
||||||
this.packageZipUrl = packageZipUrl;
|
|
||||||
this.description = description;
|
|
||||||
this.authors = authors;
|
|
||||||
this.website = website;
|
|
||||||
this.documentation = documentation;
|
|
||||||
this.sourceCode = sourceCode;
|
|
||||||
this.sourceCodeUrlScheme = sourceCodeUrlScheme;
|
|
||||||
this.license = license;
|
|
||||||
this.licenseText = licenseText;
|
|
||||||
this.issueTracker = issueTracker;
|
|
||||||
this.apiTests = apiTests;
|
|
||||||
this.exclude = exclude;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #uri()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public PackageUri getUri() {
|
public PackageUri getUri() {
|
||||||
return uri;
|
return uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #version()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public Version getVersion() {
|
public Version getVersion() {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #packageZipUrl()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public URI getPackageZipUrl() {
|
public URI getPackageZipUrl() {
|
||||||
return packageZipUrl;
|
return packageZipUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #description()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public @Nullable String getDescription() {
|
public @Nullable String getDescription() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #authors()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public List<String> getAuthors() {
|
public List<String> getAuthors() {
|
||||||
return authors;
|
return authors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #website()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public @Nullable URI getWebsite() {
|
public @Nullable URI getWebsite() {
|
||||||
return website;
|
return website;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #documentation()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public @Nullable URI getDocumentation() {
|
public @Nullable URI getDocumentation() {
|
||||||
return documentation;
|
return documentation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #sourceCode()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public @Nullable URI getSourceCode() {
|
public @Nullable URI getSourceCode() {
|
||||||
return sourceCode;
|
return sourceCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #sourceCodeUrlScheme()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public @Nullable String getSourceCodeUrlScheme() {
|
public @Nullable String getSourceCodeUrlScheme() {
|
||||||
return sourceCodeUrlScheme;
|
return sourceCodeUrlScheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #licenseText()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public @Nullable String getLicenseText() {
|
public @Nullable String getLicenseText() {
|
||||||
return licenseText;
|
return licenseText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #license()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public @Nullable String getLicense() {
|
public @Nullable String getLicense() {
|
||||||
return license;
|
return license;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #issueTracker()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public @Nullable URI getIssueTracker() {
|
public @Nullable URI getIssueTracker() {
|
||||||
return issueTracker;
|
return issueTracker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #apiTests()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public List<Path> getApiTests() {
|
public List<Path> getApiTests() {
|
||||||
return apiTests;
|
return apiTests;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #exclude()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public List<String> getExclude() {
|
public List<String> getExclude() {
|
||||||
return exclude;
|
return exclude;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (o == null || getClass() != o.getClass()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Package aPackage = (Package) o;
|
|
||||||
return name.equals(aPackage.name)
|
|
||||||
&& uri.equals(aPackage.uri)
|
|
||||||
&& version.equals(aPackage.version)
|
|
||||||
&& Objects.equals(description, aPackage.description)
|
|
||||||
&& authors.equals(aPackage.authors)
|
|
||||||
&& Objects.equals(website, aPackage.website)
|
|
||||||
&& Objects.equals(documentation, aPackage.documentation)
|
|
||||||
&& Objects.equals(sourceCode, aPackage.sourceCode)
|
|
||||||
&& Objects.equals(sourceCodeUrlScheme, aPackage.sourceCodeUrlScheme)
|
|
||||||
&& Objects.equals(license, aPackage.license)
|
|
||||||
&& Objects.equals(licenseText, aPackage.licenseText)
|
|
||||||
&& Objects.equals(issueTracker, aPackage.issueTracker)
|
|
||||||
&& Objects.equals(apiTests, aPackage.apiTests)
|
|
||||||
&& exclude.equals(aPackage.exclude);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(
|
|
||||||
name,
|
|
||||||
uri,
|
|
||||||
version,
|
|
||||||
description,
|
|
||||||
authors,
|
|
||||||
website,
|
|
||||||
documentation,
|
|
||||||
sourceCode,
|
|
||||||
sourceCodeUrlScheme,
|
|
||||||
license,
|
|
||||||
licenseText,
|
|
||||||
issueTracker,
|
|
||||||
apiTests,
|
|
||||||
exclude);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Package{"
|
|
||||||
+ "name="
|
|
||||||
+ name
|
|
||||||
+ ", uri="
|
|
||||||
+ uri
|
|
||||||
+ ", version='"
|
|
||||||
+ version
|
|
||||||
+ '\''
|
|
||||||
+ ", description='"
|
|
||||||
+ description
|
|
||||||
+ '\''
|
|
||||||
+ ", authors="
|
|
||||||
+ authors
|
|
||||||
+ ", website='"
|
|
||||||
+ website
|
|
||||||
+ ", documentation='"
|
|
||||||
+ documentation
|
|
||||||
+ '\''
|
|
||||||
+ ", sourceCode='"
|
|
||||||
+ sourceCode
|
|
||||||
+ '\''
|
|
||||||
+ ", sourceCodeUrlScheme='"
|
|
||||||
+ sourceCodeUrlScheme
|
|
||||||
+ '\''
|
|
||||||
+ ", license='"
|
|
||||||
+ license
|
|
||||||
+ '\''
|
|
||||||
+ ", licenseText='"
|
|
||||||
+ licenseText
|
|
||||||
+ '\''
|
|
||||||
+ ", issueTracker='"
|
|
||||||
+ issueTracker
|
|
||||||
+ '\''
|
|
||||||
+ ", apiTests='"
|
|
||||||
+ apiTests
|
|
||||||
+ '\''
|
|
||||||
+ ", exclude='"
|
|
||||||
+ exclude
|
|
||||||
+ '\''
|
|
||||||
+ '}';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,8 +62,8 @@ public final class ProjectDependenciesResolver {
|
|||||||
|
|
||||||
public ProjectDeps resolve() {
|
public ProjectDeps resolve() {
|
||||||
buildResolvedDependencies(project.getDependencies());
|
buildResolvedDependencies(project.getDependencies());
|
||||||
for (var localProject : project.getDependencies().getLocalDependencies().values()) {
|
for (var localProject : project.getDependencies().localDependencies().values()) {
|
||||||
var packageUri = localProject.getMyPackageUri();
|
var packageUri = localProject.myPackageUri();
|
||||||
assert packageUri != null;
|
assert packageUri != null;
|
||||||
var canonicalUri = CanonicalPackageUri.fromPackageUri(packageUri);
|
var canonicalUri = CanonicalPackageUri.fromPackageUri(packageUri);
|
||||||
var resolvedDependency = resolvedDependencies.get(canonicalUri);
|
var resolvedDependency = resolvedDependencies.get(canonicalUri);
|
||||||
@@ -86,11 +86,11 @@ public final class ProjectDependenciesResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void buildResolvedDependencies(DeclaredDependencies declaredDependencies) {
|
private void buildResolvedDependencies(DeclaredDependencies declaredDependencies) {
|
||||||
for (var dependency : declaredDependencies.getRemoteDependencies().values()) {
|
for (var dependency : declaredDependencies.remoteDependencies().values()) {
|
||||||
resolveDependenciesOfPackageUri(
|
resolveDependenciesOfPackageUri(
|
||||||
dependency.getPackageUri().toProjectPackageUri(), dependency.getChecksums());
|
dependency.getPackageUri().toProjectPackageUri(), dependency.getChecksums());
|
||||||
}
|
}
|
||||||
for (var localDeclaredDependencies : declaredDependencies.getLocalDependencies().values()) {
|
for (var localDeclaredDependencies : declaredDependencies.localDependencies().values()) {
|
||||||
resolveDependencies(localDeclaredDependencies);
|
resolveDependencies(localDeclaredDependencies);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,9 +128,9 @@ public final class ProjectDependenciesResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void resolveDependencies(DeclaredDependencies declaredDependencies) {
|
private void resolveDependencies(DeclaredDependencies declaredDependencies) {
|
||||||
var packageUri = declaredDependencies.getMyPackageUri();
|
var packageUri = declaredDependencies.myPackageUri();
|
||||||
assert packageUri != null;
|
assert packageUri != null;
|
||||||
var projectDir = Path.of(declaredDependencies.getProjectFileUri()).getParent();
|
var projectDir = Path.of(declaredDependencies.projectFileUri()).getParent();
|
||||||
var relativePath = IoUtils.relativize(projectDir, this.project.getProjectDir());
|
var relativePath = IoUtils.relativize(projectDir, this.project.getProjectDir());
|
||||||
var localDependency = new LocalDependency(packageUri.toProjectPackageUri(), relativePath);
|
var localDependency = new LocalDependency(packageUri.toProjectPackageUri(), relativePath);
|
||||||
updateDependency(localDependency);
|
updateDependency(localDependency);
|
||||||
|
|||||||
@@ -134,10 +134,10 @@ public final class ProjectPackager {
|
|||||||
public void createPackages() throws IOException {
|
public void createPackages() throws IOException {
|
||||||
for (var project : projects) {
|
for (var project : projects) {
|
||||||
var packageResult = doPackage(project);
|
var packageResult = doPackage(project);
|
||||||
writeLine(IoUtils.relativize(packageResult.getMetadataFile(), workingDir).toString());
|
writeLine(IoUtils.relativize(packageResult.metadataFile(), workingDir).toString());
|
||||||
writeLine(IoUtils.relativize(packageResult.getMetadataChecksumFile(), workingDir).toString());
|
writeLine(IoUtils.relativize(packageResult.metadataChecksumFile(), workingDir).toString());
|
||||||
writeLine(IoUtils.relativize(packageResult.getZipFile(), workingDir).toString());
|
writeLine(IoUtils.relativize(packageResult.zipFile(), workingDir).toString());
|
||||||
writeLine(IoUtils.relativize(packageResult.getZipChecksumFile(), workingDir).toString());
|
writeLine(IoUtils.relativize(packageResult.zipChecksumFile(), workingDir).toString());
|
||||||
outputWriter.flush();
|
outputWriter.flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -145,8 +145,8 @@ public final class ProjectPackager {
|
|||||||
private Path resolveOutputDirectory(Package pkg) {
|
private Path resolveOutputDirectory(Package pkg) {
|
||||||
var substituted =
|
var substituted =
|
||||||
outputPathPattern
|
outputPathPattern
|
||||||
.replace("%{name}", pkg.getName())
|
.replace("%{name}", pkg.name())
|
||||||
.replace("%{version}", pkg.getVersion().toString());
|
.replace("%{version}", pkg.version().toString());
|
||||||
return workingDir.resolve(substituted);
|
return workingDir.resolve(substituted);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,13 +156,13 @@ public final class ProjectPackager {
|
|||||||
throw new PklException(
|
throw new PklException(
|
||||||
ErrorMessages.create("noPackageDefinedByProject", project.getProjectFileUri()));
|
ErrorMessages.create("noPackageDefinedByProject", project.getProjectFileUri()));
|
||||||
}
|
}
|
||||||
if (packageResults.containsKey(pkg.getUri())) {
|
if (packageResults.containsKey(pkg.uri())) {
|
||||||
return packageResults.get(pkg.getUri());
|
return packageResults.get(pkg.uri());
|
||||||
}
|
}
|
||||||
var files = collectPackageElements(project, pkg);
|
var files = collectPackageElements(project, pkg);
|
||||||
validatePklImportsAndReads(project, files);
|
validatePklImportsAndReads(project, files);
|
||||||
var outputDir = resolveOutputDirectory(pkg);
|
var outputDir = resolveOutputDirectory(pkg);
|
||||||
var metadataFileName = IoUtils.takeLastSegment(pkg.getUri().getUri().getPath(), '/');
|
var metadataFileName = IoUtils.takeLastSegment(pkg.uri().getUri().getPath(), '/');
|
||||||
var metadataFile = outputDir.resolve(metadataFileName);
|
var metadataFile = outputDir.resolve(metadataFileName);
|
||||||
var metadataChecksumFile = outputDir.resolve(metadataFileName + ".sha256");
|
var metadataChecksumFile = outputDir.resolve(metadataFileName + ".sha256");
|
||||||
var zipFile = outputDir.resolve(metadataFileName + ".zip");
|
var zipFile = outputDir.resolve(metadataFileName + ".zip");
|
||||||
@@ -178,21 +178,20 @@ public final class ProjectPackager {
|
|||||||
var result =
|
var result =
|
||||||
new PackageResult(
|
new PackageResult(
|
||||||
metadataFile, metadataChecksumFile, zipFile, zipChecksumFile, metadataFileChecksum);
|
metadataFile, metadataChecksumFile, zipFile, zipChecksumFile, metadataFileChecksum);
|
||||||
packageResults.put(pkg.getUri(), result);
|
packageResults.put(pkg.uri(), result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkAlreadyPublishedPackage(Package pkg, String computedChecksum)
|
private void checkAlreadyPublishedPackage(Package pkg, String computedChecksum)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
try {
|
try {
|
||||||
var metadataAndChecksum =
|
var metadataAndChecksum = packageResolver.getDependencyMetadataAndComputeChecksum(pkg.uri());
|
||||||
packageResolver.getDependencyMetadataAndComputeChecksum(pkg.getUri());
|
|
||||||
var receivedChecksum = metadataAndChecksum.second.getSha256();
|
var receivedChecksum = metadataAndChecksum.second.getSha256();
|
||||||
if (!receivedChecksum.equals(computedChecksum)) {
|
if (!receivedChecksum.equals(computedChecksum)) {
|
||||||
throw new PklException(
|
throw new PklException(
|
||||||
ErrorMessages.create(
|
ErrorMessages.create(
|
||||||
"packageAlreadyPublishedWithDifferentContents",
|
"packageAlreadyPublishedWithDifferentContents",
|
||||||
pkg.getUri(),
|
pkg.uri(),
|
||||||
computedChecksum,
|
computedChecksum,
|
||||||
receivedChecksum));
|
receivedChecksum));
|
||||||
}
|
}
|
||||||
@@ -204,8 +203,8 @@ public final class ProjectPackager {
|
|||||||
throw new PklException(
|
throw new PklException(
|
||||||
ErrorMessages.create(
|
ErrorMessages.create(
|
||||||
"unableToAccessPublishedPackage",
|
"unableToAccessPublishedPackage",
|
||||||
pkg.getName(),
|
pkg.name(),
|
||||||
pkg.getPackageZipUrl(),
|
pkg.packageZipUrl(),
|
||||||
e.getArguments()[0]));
|
e.getArguments()[0]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -229,15 +228,15 @@ public final class ProjectPackager {
|
|||||||
try {
|
try {
|
||||||
var ret =
|
var ret =
|
||||||
new HashMap<String, RemoteDependency>(
|
new HashMap<String, RemoteDependency>(
|
||||||
project.getDependencies().getLocalDependencies().size()
|
project.getDependencies().localDependencies().size()
|
||||||
+ project.getDependencies().getRemoteDependencies().size());
|
+ project.getDependencies().remoteDependencies().size());
|
||||||
// module resolver is only used for reading PklProject.deps.json, so provide one that reads
|
// module resolver is only used for reading PklProject.deps.json, so provide one that reads
|
||||||
// files.
|
// files.
|
||||||
var moduleResolver = new ModuleResolver(List.of(ModuleKeyFactories.file));
|
var moduleResolver = new ModuleResolver(List.of(ModuleKeyFactories.file));
|
||||||
var projectDependenciesManager =
|
var projectDependenciesManager =
|
||||||
new ProjectDependenciesManager(
|
new ProjectDependenciesManager(
|
||||||
project.getDependencies(), moduleResolver, this.securityManager);
|
project.getDependencies(), moduleResolver, this.securityManager);
|
||||||
for (var entry : project.getDependencies().getRemoteDependencies().entrySet()) {
|
for (var entry : project.getDependencies().remoteDependencies().entrySet()) {
|
||||||
var resolved =
|
var resolved =
|
||||||
(RemoteDependency)
|
(RemoteDependency)
|
||||||
projectDependenciesManager.getResolvedDependency(entry.getValue().getPackageUri());
|
projectDependenciesManager.getResolvedDependency(entry.getValue().getPackageUri());
|
||||||
@@ -249,7 +248,7 @@ public final class ProjectPackager {
|
|||||||
for (var entry : project.getLocalProjectDependencies().entrySet()) {
|
for (var entry : project.getLocalProjectDependencies().entrySet()) {
|
||||||
var localProject = entry.getValue();
|
var localProject = entry.getValue();
|
||||||
assert localProject.getPackage() != null;
|
assert localProject.getPackage() != null;
|
||||||
var packageUri = localProject.getPackage().getUri();
|
var packageUri = localProject.getPackage().uri();
|
||||||
var resolved = projectDependenciesManager.getResolvedDependency(packageUri);
|
var resolved = projectDependenciesManager.getResolvedDependency(packageUri);
|
||||||
if (resolved instanceof LocalDependency) {
|
if (resolved instanceof LocalDependency) {
|
||||||
var packageResult = doPackage(localProject);
|
var packageResult = doPackage(localProject);
|
||||||
@@ -257,7 +256,7 @@ public final class ProjectPackager {
|
|||||||
entry.getKey(),
|
entry.getKey(),
|
||||||
new RemoteDependency(
|
new RemoteDependency(
|
||||||
packageUri.toExternalPackageUri(),
|
packageUri.toExternalPackageUri(),
|
||||||
new Checksums(packageResult.getMetadataChecksum())));
|
new Checksums(packageResult.metadataChecksum())));
|
||||||
} else {
|
} else {
|
||||||
var remoteDep = (RemoteDependency) resolved;
|
var remoteDep = (RemoteDependency) resolved;
|
||||||
ret.put(
|
ret.put(
|
||||||
@@ -278,20 +277,20 @@ public final class ProjectPackager {
|
|||||||
private DependencyMetadata createDependencyMetadata(
|
private DependencyMetadata createDependencyMetadata(
|
||||||
Project project, Package pkg, String packageZipChecksum) throws IOException {
|
Project project, Package pkg, String packageZipChecksum) throws IOException {
|
||||||
return new DependencyMetadata(
|
return new DependencyMetadata(
|
||||||
pkg.getName(),
|
pkg.name(),
|
||||||
pkg.getUri(),
|
pkg.uri(),
|
||||||
pkg.getVersion(),
|
pkg.version(),
|
||||||
pkg.getPackageZipUrl(),
|
pkg.packageZipUrl(),
|
||||||
new Checksums(packageZipChecksum),
|
new Checksums(packageZipChecksum),
|
||||||
buildDependencies(project),
|
buildDependencies(project),
|
||||||
pkg.getSourceCodeUrlScheme(),
|
pkg.sourceCodeUrlScheme(),
|
||||||
pkg.getSourceCode(),
|
pkg.sourceCode(),
|
||||||
pkg.getDocumentation(),
|
pkg.documentation(),
|
||||||
pkg.getLicense(),
|
pkg.license(),
|
||||||
pkg.getLicenseText(),
|
pkg.licenseText(),
|
||||||
pkg.getAuthors(),
|
pkg.authors(),
|
||||||
pkg.getIssueTracker(),
|
pkg.issueTracker(),
|
||||||
pkg.getDescription(),
|
pkg.description(),
|
||||||
project.getAnnotations());
|
project.getAnnotations());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,7 +342,7 @@ public final class ProjectPackager {
|
|||||||
|
|
||||||
private List<Pattern> getExcludePatterns(Package pkg) {
|
private List<Pattern> getExcludePatterns(Package pkg) {
|
||||||
var excludePatterns = new ArrayList<Pattern>();
|
var excludePatterns = new ArrayList<Pattern>();
|
||||||
for (String s : pkg.getExclude()) {
|
for (String s : pkg.exclude()) {
|
||||||
try {
|
try {
|
||||||
excludePatterns.add(GlobResolver.toRegexPattern(s));
|
excludePatterns.add(GlobResolver.toRegexPattern(s));
|
||||||
} catch (InvalidGlobPatternException e) {
|
} catch (InvalidGlobPatternException e) {
|
||||||
@@ -452,42 +451,48 @@ public final class ProjectPackager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class PackageResult {
|
public record PackageResult(
|
||||||
private final Path zipFile;
|
Path zipFile,
|
||||||
private final Path zipChecksumFile;
|
Path zipChecksumFile,
|
||||||
private final Path metadataFile;
|
Path metadataFile,
|
||||||
private final Path metadataChecksumFile;
|
Path metadataChecksumFile,
|
||||||
private final String metadataChecksum;
|
String metadataChecksum) {
|
||||||
|
/**
|
||||||
public PackageResult(
|
* @deprecated As of 0.28.0, replaced by {@link #zipFile()}.
|
||||||
Path zipFile,
|
*/
|
||||||
Path zipChecksumFile,
|
@Deprecated(forRemoval = true)
|
||||||
Path metadataFile,
|
|
||||||
Path metadataChecksumFile,
|
|
||||||
String metadataChecksum) {
|
|
||||||
this.zipFile = zipFile;
|
|
||||||
this.zipChecksumFile = zipChecksumFile;
|
|
||||||
this.metadataFile = metadataFile;
|
|
||||||
this.metadataChecksumFile = metadataChecksumFile;
|
|
||||||
this.metadataChecksum = metadataChecksum;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Path getZipFile() {
|
public Path getZipFile() {
|
||||||
return zipFile;
|
return zipFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #zipChecksumFile()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public Path getZipChecksumFile() {
|
public Path getZipChecksumFile() {
|
||||||
return zipChecksumFile;
|
return zipChecksumFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #metadataFile()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public Path getMetadataFile() {
|
public Path getMetadataFile() {
|
||||||
return metadataFile;
|
return metadataFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #metadataChecksumFile()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public Path getMetadataChecksumFile() {
|
public Path getMetadataChecksumFile() {
|
||||||
return metadataChecksumFile;
|
return metadataChecksumFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 0.28.0, replaced by {@link #metadataChecksum()}.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true)
|
||||||
public String getMetadataChecksum() {
|
public String getMetadataChecksum() {
|
||||||
return metadataChecksum;
|
return metadataChecksum;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user